Jelajahi Sumber

新增设备与人员同步关系定时修改逻辑

fllmoyu 5 tahun lalu
induk
melakukan
d06af8b418

+ 3 - 0
common/src/main/java/com/jpsoft/smart/modules/base/dao/PersonDeviceRelationDAO.java

@@ -2,6 +2,7 @@ package com.jpsoft.smart.modules.base.dao;
 import com.jpsoft.smart.modules.base.entity.DeviceInfo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import org.springframework.stereotype.Repository;
 import com.jpsoft.smart.modules.base.entity.PersonDeviceRelation;
@@ -22,6 +23,8 @@ public interface PersonDeviceRelationDAO {
 	List<PersonDeviceRelation> search(Map<String, Object> searchParams, List<Sort> sortList);
     List<DeviceInfo> findDeviceByPersonId(Long personId);
 
+    List<PersonDeviceRelation> findByIsBoundAndUpdateTime(Date updateTime, Integer limit);
+
 //    List<PersonDeviceRelation>  findByPersonId(@Param("personId")Long personId);
 
 

+ 7 - 1
common/src/main/java/com/jpsoft/smart/modules/base/service/PersonDeviceRelationService.java

@@ -1,8 +1,10 @@
 package com.jpsoft.smart.modules.base.service;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import cn.hutool.core.date.DateTime;
 import com.jpsoft.smart.modules.base.entity.DeviceInfo;
 import com.jpsoft.smart.modules.base.entity.PersonDeviceRelation;
 import com.github.pagehelper.Page;
@@ -23,5 +25,9 @@ public interface PersonDeviceRelationService {
 
     List<DeviceInfo> findDeviceByPersonId(Long id);
 
-    //List<PersonDeviceRelation> findByPersonId(Long id);
+	List<PersonDeviceRelation> findByIsBoundAndUpdateTime(Date updateTime, Integer limit);
+
+	void updateIsBound(Long personInfoId, String deviceInfoId);
+
+	//List<PersonDeviceRelation> findByPersonId(Long id);
 }

+ 18 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonDeviceRelationServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jpsoft.smart.modules.base.service.impl;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -120,4 +121,21 @@ public class PersonDeviceRelationServiceImpl implements PersonDeviceRelationServ
 	public List<DeviceInfo> findDeviceByPersonId(Long personId) {
 		return personDeviceRelationDAO.findDeviceByPersonId(personId);
 	}
+
+	@Override
+	public List<PersonDeviceRelation> findByIsBoundAndUpdateTime(Date updateTime, Integer limit) {
+		return personDeviceRelationDAO.findByIsBoundAndUpdateTime(updateTime,limit);
+	}
+
+	@Override
+	public void updateIsBound(Long personInfoId, String deviceInfoId) {
+		PersonDeviceRelation personDeviceRelation =  personDeviceRelationDAO.findByDeviceIdAndPersonId(deviceInfoId,personInfoId);
+		if (personDeviceRelation != null){
+			if (!personDeviceRelation.getIsBound() || personDeviceRelation.getIsBound() == null){
+				personDeviceRelation.setIsBound(true);
+				personDeviceRelation.setUpdateTime(new Date());
+				personDeviceRelationDAO.update(personDeviceRelation);
+			}
+		}
+	}
 }

+ 7 - 0
common/src/main/java/com/jpsoft/smart/modules/lapi/service/impl/LapiServiceImpl.java

@@ -777,6 +777,13 @@ public class LapiServiceImpl implements ILapiService {
             JSONObject response = LApiUtil.getResponse(dataJson);
             Integer num = response.getInteger("Total");
             if (num > 0) {
+
+                try{
+                    personDeviceRelationService.updateIsBound(personInfo.getId(),deviceInfo.getId());
+                }catch (Exception e){
+                    log.error(e.getMessage(),e);
+                }
+
                 return true;
             }
         } catch (Exception e) {

+ 16 - 0
common/src/main/resources/mapper/base/PersonDeviceRelation.xml

@@ -130,4 +130,20 @@ id_,device_id,person_id,del_flag,create_by,create_time,update_by,update_time		fr
 		and a.device_id = b.id_
 		and a.del_flag=false
 	</select>
+
+    <select id="findByIsBoundAndUpdateTime" resultMap="PersonDeviceRelationMap">
+        <![CDATA[
+        select * from base_person_device_relation
+                where del_flag = false
+                and is_bound is null
+                and update_time <= #{updateTime}
+                or update_time is null
+                and del_flag = false
+                and is_bound is null
+                limit #{limit}
+
+        ]]>
+
+
+</select>
 </mapper>

+ 79 - 0
web/src/main/java/com/jpsoft/smart/schduled/UpdatePersonDeviceBoundTask.java

@@ -0,0 +1,79 @@
+package com.jpsoft.smart.schduled;
+
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
+import com.github.pagehelper.Page;
+import com.jpsoft.smart.modules.base.entity.DeviceInfo;
+import com.jpsoft.smart.modules.base.entity.PersonDeviceRelation;
+import com.jpsoft.smart.modules.base.entity.PersonInfo;
+import com.jpsoft.smart.modules.base.service.DeviceInfoService;
+import com.jpsoft.smart.modules.base.service.PersonDeviceRelationService;
+import com.jpsoft.smart.modules.base.service.PersonInfoService;
+import com.jpsoft.smart.modules.common.dto.Sort;
+import com.jpsoft.smart.modules.lapi.service.ILapiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-8 14:27
+ */
+
+@Component
+@Slf4j
+@Transactional
+public class UpdatePersonDeviceBoundTask {
+
+
+    @Autowired
+    private PersonDeviceRelationService personDeviceRelationService;
+
+    @Autowired
+    private ILapiService lapiService;
+
+    @Autowired
+    private PersonInfoService personInfoService;
+
+    @Autowired
+    private DeviceInfoService deviceInfoService;
+
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public  void run() {
+        log.warn("人员设备绑定关系更新定时任务开始");
+
+
+        List<PersonDeviceRelation> personDeviceRelationList = personDeviceRelationService.findByIsBoundAndUpdateTime(DateUtil.offset(new Date(),DateField.DAY_OF_MONTH, -1),500);
+        if (personDeviceRelationList.size()>0){
+            for (PersonDeviceRelation personDeviceRelation : personDeviceRelationList){
+                try{
+                    lapiService.keepAlive(personDeviceRelation.getDeviceId());
+                    PersonInfo personInfo = personInfoService.get(personDeviceRelation.getPersonId());
+                    DeviceInfo deviceInfo = deviceInfoService.get(personDeviceRelation.getDeviceId());
+                    String faceDbId = lapiService.getFaceDbId(deviceInfo,personInfo.getCompanyName());
+                    Boolean isSuccessAdd =  lapiService.isSuccessAddPerson(personInfo,deviceInfo,faceDbId);
+                    if (isSuccessAdd){
+                        personDeviceRelation.setIsBound(true);
+                        personDeviceRelation.setUpdateTime(new Date());
+                    }else {
+                        personDeviceRelation.setIsBound(false);
+                        personDeviceRelation.setUpdateTime(new Date());
+                    }
+                }catch (Exception e){
+                    personDeviceRelation.setUpdateTime(new Date());
+                    personDeviceRelation.setIsBound(null);
+                }
+
+                personDeviceRelationService.update(personDeviceRelation);
+
+            }
+        }
+
+    }
+
+
+}

+ 20 - 1
web/src/test/java/com/jpsoft/smart/CheckNumCompanyTest.java

@@ -1,19 +1,25 @@
 package com.jpsoft.smart;
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
+import com.github.pagehelper.Page;
 import com.jpsoft.smart.modules.base.dao.CheckNumCompanyDAO;
 import com.jpsoft.smart.modules.base.dao.PersonInfoDAO;
 import com.jpsoft.smart.modules.base.dao.TotalCheckCompanyDAO;
 import com.jpsoft.smart.modules.base.entity.CheckNumCompany;
 import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.entity.PersonDeviceRelation;
 import com.jpsoft.smart.modules.base.entity.TotalCheckCompany;
 import com.jpsoft.smart.modules.base.service.CompanyInfoService;
+import com.jpsoft.smart.modules.base.service.PersonDeviceRelationService;
+import com.jpsoft.smart.modules.common.dto.Sort;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.List;
+import java.util.*;
 
 /**
  * @author 墨鱼_mo
@@ -35,6 +41,9 @@ public class CheckNumCompanyTest {
     @Autowired
     private CompanyInfoService companyInfoService;
 
+    @Autowired
+    private PersonDeviceRelationService personDeviceRelationService;
+
     @Test
     public void testGet(){
        // CheckNumCompany checkNumCompany = checkNumCompanyDAO.get(1L);
@@ -68,4 +77,14 @@ public class CheckNumCompanyTest {
         System.out.println(i);
     }
 
+
+    @Test
+    public void testPersonDevicePage(){
+
+
+        List<PersonDeviceRelation> list =personDeviceRelationService.findByIsBoundAndUpdateTime(DateUtil.offset(new Date(),DateField.DAY_OF_MONTH, -1),50);
+
+        System.out.println(list);
+        System.out.println(list.size());
+    }
 }