Sfoglia il codice sorgente

优化添加 考勤同步功能

java110 3 anni fa
parent
commit
f863d71bf3

+ 1 - 0
java110-bean/src/main/java/com/java110/dto/machine/MachineDto.java

@@ -18,6 +18,7 @@ public class MachineDto extends PageDto implements Serializable {
     public static final String MACHINE_TYPE_CAR = "9996";//自有道闸设备道闸
     public static final String MACHINE_TYPE_CAR_THIRD = "9995";//第三方道闸平台
     public static final String MACHINE_TYPE_ACCESS_CONTROL = "9999";
+    public static final String MACHINE_TYPE_ATTENDANCE = "9997"; // 考勤机
     public static final String MACHINE_STATE_ON = "1200";
     public static final String MACHINE_STATE_OFF = "1300";
 

+ 2 - 0
service-job/src/main/java/com/java110/job/adapt/hcIot/IotConstant.java

@@ -121,6 +121,8 @@ public class IotConstant {
     //添加考勤班次
     public static final String ADD_ATTENDANCE_CLASSES_STAFFS = "/extApi/attendance/addAttendanceClassStaffs";
 
+    //修改考勤班次
+    public static final String UPDATE_ATTENDANCE_CLASSES_STAFFS = "/extApi/attendance/updateAttendanceClassStaffs";
 
     //删除考勤班次
     public static final String DELETE_ATTENDANCE_CLASSES_STAFFS = "/extApi/attendance/deleteAttendanceClassStaff";

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

@@ -154,6 +154,9 @@ public interface IIotSendAsyn {
      */
     void addAttendanceStaff(JSONObject postParameters, List<JSONObject> staffs);
 
+
+    void updateAttendanceStaff(JSONObject postParameters, List<JSONObject> storeUserObjs);
+
     /**
      * 编辑考勤 同步
      *
@@ -190,4 +193,5 @@ public interface IIotSendAsyn {
      * @param postParameters
      */
     void deleteParkingBox(JSONObject postParameters);
+
 }

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

@@ -1207,6 +1207,57 @@ public class IotSendAsynImpl implements IIotSendAsyn {
         }
     }
 
+    @Override
+    @Async
+    public void updateAttendanceStaff(JSONObject postParameters, List<JSONObject> staffs) {
+        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_STAFFS);
+        try {
+            for (JSONObject staff : staffs) {
+                staff.put("taskId", machineTranslateDto.getMachineTranslateId());
+            }
+            HttpEntity httpEntity = new HttpEntity(JSONArray.toJSONString(staffs), 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
     @Async

+ 54 - 4
service-job/src/main/java/com/java110/job/adapt/hcIot/staff/AddStaffToIotAdapt.java

@@ -18,10 +18,15 @@ package com.java110.job.adapt.hcIot.staff;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.dto.attendanceClasses.AttendanceClassesDto;
+import com.java110.dto.file.FileDto;
+import com.java110.dto.file.FileRelDto;
+import com.java110.dto.machine.MachineDto;
 import com.java110.dto.org.OrgStaffRelDto;
-import com.java110.dto.store.StoreUserDto;
 import com.java110.entity.order.Business;
 import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
+import com.java110.intf.common.IFileInnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.common.IMachineV1InnerServiceSMO;
 import com.java110.intf.user.IOrgStaffRelInnerServiceSMO;
 import com.java110.job.adapt.DatabusAdaptImpl;
 import com.java110.job.adapt.hcIot.asyn.IIotSendAsyn;
@@ -53,6 +58,16 @@ public class AddStaffToIotAdapt extends DatabusAdaptImpl {
     @Autowired
     private IAttendanceClassesInnerServiceSMO attendanceClassesInnerServiceSMOImpl;
 
+    @Autowired
+    private IMachineV1InnerServiceSMO machineV1InnerServiceSMOImpl;
+
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+
 
     /**
      * accessToken={access_token}
@@ -69,7 +84,7 @@ public class AddStaffToIotAdapt extends DatabusAdaptImpl {
     @Override
     public void execute(Business business, List<Business> businesses) {
         JSONObject data = business.getData();
-        JSONArray   businessStoreUsers = new JSONArray();
+        JSONArray businessStoreUsers = new JSONArray();
         if (data.containsKey(StoreUserPo.class.getSimpleName())) {
             Object bObj = data.get(StoreUserPo.class.getSimpleName());
             if (bObj instanceof JSONObject) {
@@ -80,7 +95,7 @@ public class AddStaffToIotAdapt extends DatabusAdaptImpl {
             } else {
                 businessStoreUsers = (JSONArray) bObj;
             }
-        }else {
+        } else {
             if (data instanceof JSONObject) {
                 businessStoreUsers.add(data);
             }
@@ -114,15 +129,30 @@ public class AddStaffToIotAdapt extends DatabusAdaptImpl {
         if (attendanceClassesDtos == null || attendanceClassesDtos.size() < 1) {
             return;
         }
+
+        MachineDto machineDto = new MachineDto();
+        machineDto.setLocationObjId(orgStaffRelDtos.get(0).getDepartmentId());
+        machineDto.setMachineTypeCd(MachineDto.MACHINE_TYPE_ATTENDANCE);
+        List<MachineDto> machineDtos = machineV1InnerServiceSMOImpl.queryMachines(machineDto);
+
+        String img = getStaffPhoto(orgStaffRelDtos.get(0));
+
         JSONObject storeUserObj = null;
         List<JSONObject> storeUserObjs = new ArrayList<>();
-        for(AttendanceClassesDto tmpAttendanceClassesDto : attendanceClassesDtos ){
+        for (AttendanceClassesDto tmpAttendanceClassesDto : attendanceClassesDtos) {
+
             storeUserObj = new JSONObject();
             storeUserObj.put("extClassesId", tmpAttendanceClassesDto.getClassesId());
             storeUserObj.put("extStaffId", orgStaffRelDtos.get(0).getStaffId());
             storeUserObj.put("staffName", orgStaffRelDtos.get(0).getStaffName());
             storeUserObj.put("departmentId", orgStaffRelDtos.get(0).getDepartmentId());
             storeUserObj.put("departmentName", orgStaffRelDtos.get(0).getDepartmentName());
+            if (machineDtos != null && machineDtos.size() < 1) {
+                storeUserObj.put("machineCode", machineDtos.get(0).getMachineCode());
+                storeUserObj.put("extMachineId", machineDtos.get(0).getMachineId());
+                storeUserObj.put("extCommunityId", machineDtos.get(0).getCommunityId());
+            }
+            storeUserObj.put("faceBase64", img);
             storeUserObjs.add(storeUserObj);
         }
         JSONObject postParameters = new JSONObject();
@@ -131,4 +161,24 @@ public class AddStaffToIotAdapt extends DatabusAdaptImpl {
         postParameters.put("extCommunityId", "-1");
         hcStoreUserAsynImpl.addAttendanceStaff(postParameters, storeUserObjs);
     }
+
+    private String getStaffPhoto(OrgStaffRelDto orgStaffRelDto) {
+
+        FileRelDto fileRelDto = new FileRelDto();
+        fileRelDto.setObjId(orgStaffRelDto.getStaffId());
+        fileRelDto.setRelTypeCd("12000");
+        List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
+        if (fileRelDtos == null || fileRelDtos.size() != 1) {
+            return "";
+        }
+        FileDto fileDto = new FileDto();
+        fileDto.setFileId(fileRelDtos.get(0).getFileSaveName());
+        fileDto.setFileSaveName(fileRelDtos.get(0).getFileSaveName());
+        List<FileDto> fileDtos = fileInnerServiceSMOImpl.queryFiles(fileDto);
+        if (fileDtos == null || fileDtos.size() != 1) {
+            return "";
+        }
+
+        return fileDtos.get(0).getContext();
+    }
 }

+ 24 - 0
service-job/src/main/java/com/java110/job/adapt/hcIot/staff/DeleteStaffToIotAdapt.java

@@ -18,9 +18,13 @@ package com.java110.job.adapt.hcIot.staff;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.dto.attendanceClasses.AttendanceClassesDto;
+import com.java110.dto.machine.MachineDto;
 import com.java110.dto.org.OrgStaffRelDto;
 import com.java110.entity.order.Business;
 import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
+import com.java110.intf.common.IFileInnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.common.IMachineV1InnerServiceSMO;
 import com.java110.intf.user.IOrgStaffRelInnerServiceSMO;
 import com.java110.job.adapt.DatabusAdaptImpl;
 import com.java110.job.adapt.hcIot.asyn.IIotSendAsyn;
@@ -55,6 +59,16 @@ public class DeleteStaffToIotAdapt extends DatabusAdaptImpl {
     @Autowired
     private IOrgStaffRelInnerServiceSMO orgStaffRelInnerServiceSMOImpl;
 
+    @Autowired
+    private IMachineV1InnerServiceSMO machineV1InnerServiceSMOImpl;
+
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+
 
     /**
      * accessToken={access_token}
@@ -118,6 +132,11 @@ public class DeleteStaffToIotAdapt extends DatabusAdaptImpl {
             return;
         }
 
+        MachineDto machineDto = new MachineDto();
+        machineDto.setLocationObjId(orgStaffRelDtos.get(0).getDepartmentId());
+        machineDto.setMachineTypeCd(MachineDto.MACHINE_TYPE_ATTENDANCE);
+        List<MachineDto> machineDtos = machineV1InnerServiceSMOImpl.queryMachines(machineDto);
+
         for(AttendanceClassesDto tmpAttendanceClassesDto : attendanceClassesDtos ){
             JSONObject postParameters = new JSONObject();
             postParameters.put("classesName", tmpAttendanceClassesDto.getClassesName());
@@ -125,6 +144,11 @@ public class DeleteStaffToIotAdapt extends DatabusAdaptImpl {
             postParameters.put("extStaffId", orgStaffRelDtos.get(0).getStaffId());
             postParameters.put("deleteStaff", "1");
             postParameters.put("extCommunityId", "-1");
+            if (machineDtos != null && machineDtos.size() < 1) {
+                postParameters.put("machineCode", machineDtos.get(0).getMachineCode());
+                postParameters.put("extMachineId", machineDtos.get(0).getMachineId());
+                postParameters.put("extCommunityId", machineDtos.get(0).getCommunityId());
+            }
             hcStoreUserAsynImpl.deleteAttendanceStaff(postParameters);
         }
 

+ 100 - 35
service-job/src/main/java/com/java110/job/adapt/hcIot/staff/UpdateStaffToIotAdapt.java

@@ -18,21 +18,29 @@ package com.java110.job.adapt.hcIot.staff;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.dto.attendanceClasses.AttendanceClassesDto;
+import com.java110.dto.file.FileDto;
+import com.java110.dto.file.FileRelDto;
+import com.java110.dto.machine.MachineDto;
+import com.java110.dto.org.OrgStaffRelDto;
 import com.java110.entity.order.Business;
 import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
+import com.java110.intf.common.IFileInnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.common.IMachineV1InnerServiceSMO;
 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.po.store.StoreUserPo;
 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 考勤同步适配器
+ * HC iot 车辆同步适配器
  * <p>
  * 接口协议地址: https://gitee.com/java110/MicroCommunityThings/blob/master/back/docs/api.md
  *
@@ -42,14 +50,23 @@ import java.util.List;
 public class UpdateStaffToIotAdapt extends DatabusAdaptImpl {
 
     @Autowired
-    private IIotSendAsyn hcOwnerAttendanceAsynImpl;
+    private IIotSendAsyn hcStoreUserAsynImpl;
 
+    @Autowired
+    private IOrgStaffRelInnerServiceSMO orgStaffRelInnerServiceSMOImpl;
 
     @Autowired
     private IAttendanceClassesInnerServiceSMO attendanceClassesInnerServiceSMOImpl;
 
     @Autowired
-    private IOrgStaffRelInnerServiceSMO orgStaffRelInnerServiceSMOImpl;
+    private IMachineV1InnerServiceSMO machineV1InnerServiceSMOImpl;
+
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
 
 
     /**
@@ -67,53 +84,101 @@ public class UpdateStaffToIotAdapt extends DatabusAdaptImpl {
     @Override
     public void execute(Business business, List<Business> businesses) {
         JSONObject data = business.getData();
-        JSONArray  businessOwnerAttendances = new JSONArray();
-        if (data.containsKey(AttendanceClassesPo.class.getSimpleName())) {
-            Object bObj = data.get(AttendanceClassesPo.class.getSimpleName());
-
+        JSONArray businessStoreUsers = new JSONArray();
+        if (data.containsKey(StoreUserPo.class.getSimpleName())) {
+            Object bObj = data.get(StoreUserPo.class.getSimpleName());
             if (bObj instanceof JSONObject) {
 
-                businessOwnerAttendances.add(bObj);
+                businessStoreUsers.add(bObj);
             } else if (bObj instanceof List) {
-                businessOwnerAttendances = JSONArray.parseArray(JSONObject.toJSONString(bObj));
+                businessStoreUsers = JSONArray.parseArray(JSONObject.toJSONString(bObj));
             } else {
-                businessOwnerAttendances = (JSONArray) bObj;
+                businessStoreUsers = (JSONArray) bObj;
             }
-        }else {
+        } else {
             if (data instanceof JSONObject) {
-                businessOwnerAttendances.add(data);
+                businessStoreUsers.add(data);
             }
         }
-
-        //JSONObject businessOwnerAttendance = data.getJSONObject("businessOwnerAttendance");
-        for (int bOwnerAttendanceIndex = 0; bOwnerAttendanceIndex < businessOwnerAttendances.size(); bOwnerAttendanceIndex++) {
-            JSONObject businessOwnerAttendance = businessOwnerAttendances.getJSONObject(bOwnerAttendanceIndex);
-            doSendOwnerAttendance(business, businessOwnerAttendance);
+        //JSONObject businessStoreUser = data.getJSONObject("businessStoreUser");
+        for (int bStoreUserIndex = 0; bStoreUserIndex < businessStoreUsers.size(); bStoreUserIndex++) {
+            JSONObject businessStoreUser = businessStoreUsers.getJSONObject(bStoreUserIndex);
+            doSendStoreUser(business, businessStoreUser);
         }
     }
 
-    private void doSendOwnerAttendance(Business business, JSONObject businessOwnerAttendance) {
+    private void doSendStoreUser(Business business, JSONObject businessStoreUser) {
+
+        StoreUserPo storeUserPo = BeanConvertUtil.covertBean(businessStoreUser, StoreUserPo.class);
 
-        AttendanceClassesPo ownerAttendancePo = BeanConvertUtil.covertBean(businessOwnerAttendance, AttendanceClassesPo.class);
+        //查询员工部门
+        OrgStaffRelDto orgStaffRelDto = new OrgStaffRelDto();
+        orgStaffRelDto.setStaffId(storeUserPo.getUserId());
+        orgStaffRelDto.setStoreId(storeUserPo.getStoreId());
+        List<OrgStaffRelDto> orgStaffRelDtos = orgStaffRelInnerServiceSMOImpl.queryOrgStaffRels(orgStaffRelDto);
 
-        AttendanceClassesDto ownerAttendanceDto = new AttendanceClassesDto();
-        ownerAttendanceDto.setClassesId(ownerAttendancePo.getClassesId());
-        ownerAttendanceDto.setStoreId(ownerAttendancePo.getStoreId());
-        List<AttendanceClassesDto> attendanceDtos = attendanceClassesInnerServiceSMOImpl.queryAttendanceClassess(ownerAttendanceDto);
+        Assert.listOnlyOne(orgStaffRelDtos, "未包含员工信息");
 
-        Assert.listOnlyOne(attendanceDtos, "未找到考勤班组");
+        //查询员工部门是否参与考勤
+        AttendanceClassesDto attendanceClassesDto = new AttendanceClassesDto();
+        attendanceClassesDto.setClassesObjType(AttendanceClassesDto.CLASSES_OBJ_TYPE_PARTMENT);
+        attendanceClassesDto.setClassesObjId(orgStaffRelDtos.get(0).getDepartmentId());
+        List<AttendanceClassesDto> attendanceClassesDtos = attendanceClassesInnerServiceSMOImpl.queryAttendanceClassess(attendanceClassesDto);
 
+        //员工部门没有考勤,不用处理
+        if (attendanceClassesDtos == null || attendanceClassesDtos.size() < 1) {
+            return;
+        }
+
+        MachineDto machineDto = new MachineDto();
+        machineDto.setLocationObjId(orgStaffRelDtos.get(0).getDepartmentId());
+        machineDto.setMachineTypeCd(MachineDto.MACHINE_TYPE_ATTENDANCE);
+        List<MachineDto> machineDtos = machineV1InnerServiceSMOImpl.queryMachines(machineDto);
+
+        String img = getStaffPhoto(orgStaffRelDtos.get(0));
+
+        JSONObject storeUserObj = null;
+        List<JSONObject> storeUserObjs = new ArrayList<>();
+        for (AttendanceClassesDto tmpAttendanceClassesDto : attendanceClassesDtos) {
+
+            storeUserObj = new JSONObject();
+            storeUserObj.put("extClassesId", tmpAttendanceClassesDto.getClassesId());
+            storeUserObj.put("extStaffId", orgStaffRelDtos.get(0).getStaffId());
+            storeUserObj.put("staffName", orgStaffRelDtos.get(0).getStaffName());
+            storeUserObj.put("departmentId", orgStaffRelDtos.get(0).getDepartmentId());
+            storeUserObj.put("departmentName", orgStaffRelDtos.get(0).getDepartmentName());
+            if (machineDtos != null && machineDtos.size() < 1) {
+                storeUserObj.put("machineCode", machineDtos.get(0).getMachineCode());
+                storeUserObj.put("extMachineId", machineDtos.get(0).getMachineId());
+                storeUserObj.put("extCommunityId", machineDtos.get(0).getCommunityId());
+            }
+            storeUserObj.put("faceBase64", img);
+            storeUserObjs.add(storeUserObj);
+        }
         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("classesName", attendanceClassesDtos.get(0).getClassesName());
+        postParameters.put("extClassesId", attendanceClassesDtos.get(0).getClassesId());
         postParameters.put("extCommunityId", "-1");
-        postParameters.put("attrs", JSONArray.parseArray(JSONArray.toJSONString(attendanceDtos.get(0).getAttrs())));
-        hcOwnerAttendanceAsynImpl.updateAttendance(postParameters);
+        hcStoreUserAsynImpl.updateAttendanceStaff(postParameters, storeUserObjs);
+    }
+
+    private String getStaffPhoto(OrgStaffRelDto orgStaffRelDto) {
+
+        FileRelDto fileRelDto = new FileRelDto();
+        fileRelDto.setObjId(orgStaffRelDto.getStaffId());
+        fileRelDto.setRelTypeCd("12000");
+        List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
+        if (fileRelDtos == null || fileRelDtos.size() != 1) {
+            return "";
+        }
+        FileDto fileDto = new FileDto();
+        fileDto.setFileId(fileRelDtos.get(0).getFileSaveName());
+        fileDto.setFileSaveName(fileRelDtos.get(0).getFileSaveName());
+        List<FileDto> fileDtos = fileInnerServiceSMOImpl.queryFiles(fileDto);
+        if (fileDtos == null || fileDtos.size() != 1) {
+            return "";
+        }
+
+        return fileDtos.get(0).getContext();
     }
 }