ソースを参照

Merge branch 'pre'

dzx 1 年間 前
コミット
820796b599

+ 2 - 2
pom.xml

@@ -572,8 +572,8 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.10.1</version>
                 <configuration>
-                    <source>8</source>
-                    <target>8</target>
+                    <source>11</source>
+                    <target>11</target>
                 </configuration>
             </plugin>
             <!--解开以下注释  打包时 会使用 maven插件 上传到docker-->

+ 30 - 0
src/main/java/com/xjrsoft/common/enums/AssessmentTypeEnum.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @author dzx
+ * @date 2024年9月25日
+ * 考核对象(class:班级 personal:个人)
+ */
+public enum AssessmentTypeEnum {
+
+
+    CLASS("class", "班级考核"),
+
+    PERSONAL("personal", "个人考核");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    AssessmentTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

+ 63 - 2
src/main/java/com/xjrsoft/module/hikvision/controller/OutInController.java

@@ -1,6 +1,8 @@
 package com.xjrsoft.module.hikvision.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -8,16 +10,20 @@ import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.hikvision.dto.HikvisionCarOutinPageDto;
 import com.xjrsoft.module.hikvision.dto.HikvisionOutinPageDto;
 import com.xjrsoft.module.hikvision.service.IHikvisionDataService;
 import com.xjrsoft.module.hikvision.util.ApiUtil;
+import com.xjrsoft.module.hikvision.vo.HikvisionCarListVo;
+import com.xjrsoft.module.hikvision.vo.HikvisionCarOutinPageVo;
 import com.xjrsoft.module.hikvision.vo.HikvisionOutinPageVo;
+import com.xjrsoft.module.personnel.entity.CarMessageApply;
+import com.xjrsoft.module.personnel.service.ICarMessageApplyService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -33,6 +39,7 @@ import java.util.List;
 public class OutInController {
 
     private final IHikvisionDataService hkvisionDataService;
+    private final ICarMessageApplyService carApplyService;
 
     @GetMapping("/page")
     @ApiOperation(value="海康记录查询(分页)")
@@ -71,7 +78,61 @@ public class OutInController {
         output.setTotalPage(data.get("totalPage").getAsInt());
         output.setTotal(data.get("total").getAsInt());
         output.setList(result);
-        
+
+        return RT.ok(output);
+    }
+
+    @GetMapping("/car-list")
+    @ApiOperation(value="根据用户id查询车牌号")
+    @SaCheckPermission("outin:detail")
+    public RT<List<HikvisionCarListVo>> carList(@Valid HikvisionCarOutinPageDto dto){
+        if(dto.getUserId() == null){
+            dto.setUserId(StpUtil.getLoginIdAsLong());
+        }
+        List<CarMessageApply> list = carApplyService.list(new QueryWrapper<CarMessageApply>().lambda().eq(CarMessageApply::getUserId, dto.getUserId()));
+        List<HikvisionCarListVo> result = new ArrayList<>();
+        for (CarMessageApply el : list) {
+            result.add(
+                    new HikvisionCarListVo(){{
+                        setPlateNo(el.getCarNumber());
+                    }}
+            );
+        }
+        return RT.ok(result);
+    }
+
+
+    @GetMapping("/car-page")
+    @ApiOperation(value="海康车辆出入记录查询(分页)")
+    @SaCheckPermission("outin:detail")
+    public RT<PageOutput<HikvisionCarOutinPageVo>> carPage(@Valid HikvisionCarOutinPageDto dto){
+        ApiUtil apiUtil = new ApiUtil();
+        String apiPath = "/api/pms/v1/crossRecords/page";
+
+        JsonObject paramJson = new JsonObject();
+        paramJson.addProperty("pageNo", dto.getLimit());
+        paramJson.addProperty("pageSize", dto.getSize());
+        paramJson.addProperty("sort", "crossTime");
+        paramJson.addProperty("order", "desc");
+        paramJson.addProperty("plateNo", dto.getPlateNo());
+
+        String doPost = apiUtil.doPost(apiPath, paramJson.toString(), null);
+        JsonParser parser = new JsonParser();
+        JsonObject data = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject();
+        JsonArray list = data.get("list").getAsJsonArray();
+        List<HikvisionCarOutinPageVo> result = new ArrayList<>();
+        Gson gson = new Gson();
+        for (JsonElement jsonElement : list) {
+            result.add(gson.fromJson(jsonElement.getAsJsonObject(), HikvisionCarOutinPageVo.class));
+        }
+
+        PageOutput<HikvisionCarOutinPageVo> output = new PageOutput<>();
+        output.setCurrentPage(dto.getLimit());
+        output.setPageSize(dto.getSize());
+//        output.setTotalPage(data.get("totalPage").getAsInt());
+        output.setTotal(data.get("total").getAsInt());
+        output.setList(result);
+
         return RT.ok(output);
     }
 }

+ 21 - 0
src/main/java/com/xjrsoft/module/hikvision/dto/HikvisionCarOutinPageDto.java

@@ -0,0 +1,21 @@
+package com.xjrsoft.module.hikvision.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dzx
+ * @date 2024年9月19日
+ */
+@Data
+public class HikvisionCarOutinPageDto extends PageInput {
+
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("车牌号(最大长度16)")
+    private String plateNo;
+
+}

+ 88 - 13
src/main/java/com/xjrsoft/module/hikvision/util/DataUtil.java

@@ -1,19 +1,22 @@
 package com.xjrsoft.module.hikvision.util;
 
+import cn.hutool.db.Entity;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
-import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseGrade;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
 import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.personnel.entity.CarMessageApply;
 import lombok.extern.slf4j.Slf4j;
-import lombok.var;
 
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -254,31 +257,47 @@ public class DataUtil {
         return idMap;
     }
 
-    public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData){
+    public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData, List<HikvisionData> studentList) throws InterruptedException {
+        return insertStudentOne(tableName, tableData, studentList, null);
+    }
+
+    public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData, List<HikvisionData> studentList, Long userId) throws InterruptedException {
         String sql = "SELECT t1.id,t1.name,CONCAT(t3.id,'-',replace(t4.name,'级',''),'-',t3.class_type,'-',t2.stduy_status) as orgIndexCode," +
                 " t1.user_name,t1.gender,DATE_FORMAT(t1.birth_date, '%Y-%m-%d') as birthday,t1.mobile,t1.email,t1.credential_type,t1.credential_number FROM xjr_user t1" +
                 " INNER JOIN base_student_school_roll t2 ON t1.id = t2.user_id" +
                 " INNER JOIN base_class t3 ON t2.class_id = t3.id" +
                 " INNER JOIN base_grade t4 ON t3.grade_id = t4.id" +
                 " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0" +
-                " AND t3.class_type IS NOT NULL";
+                " AND t3.class_type IS NOT NULL AND t3.is_graduate = 1";
+        if(userId != null){
+            sql += " and t1.id = " + userId;
+        }
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
         Map<Integer, String> clientMap = new HashMap<>();
+        List<Entity> insertList = new ArrayList<>();
 
 
+        Map<String, String> historyMap = new HashMap<>();
+        for (HikvisionData hikvisionData : studentList) {
+            historyMap.put(hikvisionData.getSourceId(), hikvisionData.getSendData());
+        }
+
         Map<String, String> idMap = new HashMap<>();
         JsonParser jsonParser = new JsonParser();
         ApiUtil apiUtil = new ApiUtil();
         Map<String, String> header = new HashMap<>();
         header.put("tagId", "insert_student");
 
+        List<JsonObject> addList = new ArrayList<>();
+        List<JsonObject> updateList = new ArrayList<>();
+
         for(int i = 0; i < list.size(); i ++){
             Map<String, Object> objectMap = list.get(i);
-            String apiPath = "/api/resource/v2/person/single/add";
+            String id = objectMap.get("id").toString();
 
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("clientId", i);
-            paramJson.addProperty("personId", objectMap.get("id").toString());
+            paramJson.addProperty("personId", id);
             paramJson.addProperty("personName", objectMap.get("name").toString());
             paramJson.addProperty("orgIndexCode", objectMap.get("orgIndexCode").toString());
             paramJson.addProperty("phoneNo", objectMap.get("mobile")==null?"":objectMap.get("mobile").toString());
@@ -301,24 +320,80 @@ public class DataUtil {
             }
             paramJson.addProperty("gender", gender);
 
-            if(tableData != null && tableData.containsKey(objectMap.get("id").toString())){
-                apiPath = "/api/resource/v1/person/single/update";
-                apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+            if(historyMap.containsKey(id)){
+                if(!paramJson.toString().equals(historyMap.get(id))){
+                    updateList.add(paramJson);
+                }
                 continue;
             }
 
-            clientMap.put(i, objectMap.get("id").toString());
+            addList.add(paramJson);
+
+//            if(tableData != null && tableData.containsKey(id)){
+//                apiPath = "/api/resource/v1/person/single/update";
+//                apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+//                continue;
+//            }
+//
+//            clientMap.put(i, id);
+//            String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+//            JsonElement parse = jsonParser.parse(result);
+//            JsonObject resultJson = parse.getAsJsonObject();
+//            if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
+//                JsonObject array = resultJson.get("data").getAsJsonObject();
+//                idMap.put(id, array.get("personId").getAsString());
+//            }
+        }
+
+        String apiPath = "/api/resource/v1/person/single/add";
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        for (JsonObject paramJson : addList) {
             String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
             JsonElement parse = jsonParser.parse(result);
             JsonObject resultJson = parse.getAsJsonObject();
             if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
-                JsonObject array = resultJson.get("data").getAsJsonObject();
-                idMap.put(objectMap.get("id").toString(), array.get("personId").getAsString());
+                if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
+                    Entity entity = Entity.create(tableName);
+                    entity.set("table_name", tableName);
+                    entity.set("create_date", sdf.format(new Date()));
+                    entity.set("source_id", clientMap.get(paramJson.get("clientId").getAsInt()));
+                    entity.set("hikvision_id", paramJson.get("personId").getAsString());
+                    entity.set("send_data", paramJson.toString());
+                    insertList.add(entity);
+                }else if("0x00052102".equals(resultJson.get("code").getAsString()) && "PersonId Already In Db".equals(resultJson.get("msg").getAsString())){
+                    Entity entity = Entity.create(tableName);
+                    entity.set("table_name", tableName);
+                    entity.set("create_date", sdf.format(new Date()));
+                    entity.set("source_id", paramJson.get("personId").getAsString());
+                    entity.set("hikvision_id", paramJson.get("personId").getAsString());
+                    entity.set("send_data", paramJson.toString());
+                    insertList.add(entity);
+                }
+            }
+        }
+
+        if(!insertList.isEmpty()){
+            SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
+        }
+
+        tableName = "hikvision_data";
+        apiPath = "/api/resource/v1/person/single/update";
+        for (JsonObject paramJson : updateList) {
+            Thread.sleep(500);
+            String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+            JsonElement parse = jsonParser.parse(result);
+            JsonObject resultJson = parse.getAsJsonObject();
+            if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
+                Entity entity = Entity.create(tableName);
+                entity.set("send_data", paramJson.toString());
+                Entity where = Entity.create(tableName);
+                where.set("source_id", paramJson.get("personId").getAsString());
+                SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
             }
         }
 
         //插入记录表
-        insertRecord(tableName, idMap);
+        //insertRecord(tableName, idMap);
         return idMap;
     }
 

+ 18 - 0
src/main/java/com/xjrsoft/module/hikvision/vo/HikvisionCarListVo.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.hikvision.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 查询海康门禁点事件返回结果对象
+ * @Author: dzx
+ * @Date: 2024年9月19日
+ */
+@Data
+public class HikvisionCarListVo {
+
+
+    @ApiModelProperty("车牌号码")
+    private String plateNo;
+}

+ 93 - 0
src/main/java/com/xjrsoft/module/hikvision/vo/HikvisionCarOutinPageVo.java

@@ -0,0 +1,93 @@
+package com.xjrsoft.module.hikvision.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 查询海康门禁点事件返回结果对象
+ * @Author: dzx
+ * @Date: 2024年9月19日
+ */
+@Data
+public class HikvisionCarOutinPageVo {
+
+
+    @ApiModelProperty("过车记录唯一标识")
+    private String crossRecordSyscode;
+
+    @ApiModelProperty("停车库唯一标识")
+    private String parkSyscode;
+
+    @ApiModelProperty("停车库名称")
+    private String parkName;
+
+    @ApiModelProperty("出入口唯一标识")
+    private String entranceSyscode;
+
+    @ApiModelProperty("出入口名称")
+    private String entranceName;
+
+    @ApiModelProperty("车道唯一标识")
+    private String roadwaySyscode;
+
+    @ApiModelProperty("车道名称")
+    private String roadwayName;
+
+    @ApiModelProperty("是否出场(0-进场, 1-出场)")
+    private Integer vehicleOut;
+
+    @ApiModelProperty("放行模式(0-禁止放行,1-固定车包期,2-临时车入场,3-预约车入场,10-离线出场,11-缴费出场,12-预付费出场,13-免费出场,30- 非法卡不放行,31-手动放行,32-特殊车辆放行,33-节假日放行,35-群组放行,36-遥控器开闸)")
+    private Integer releaseMode;
+
+    @ApiModelProperty("放行结果(0-未放行 1-正常放行 2-离线放行)")
+    private Integer releaseResult;
+
+    @ApiModelProperty("放行方式(10-未开闸 11-自动开闸 12-人工/人工开闸 13-遥控器开闸)")
+    private Integer releaseWay;
+
+    @ApiModelProperty("放行原因(100-固定车自动放行 101-临时车自动放行 102-预约车自动放行 103-一户多车自动放行)")
+    private Integer releaseReason;
+
+    @ApiModelProperty("车牌号码")
+    private String plateNo;
+
+    @ApiModelProperty("卡片号码")
+    private String cardNo;
+
+    @ApiModelProperty("车辆颜色(0:其他颜色; 1:白色; 2:银色; 3:灰色; 4:黑色; 5:红色; 6:深蓝色; 7:蓝色; 8:黄色; 9:绿色; 10:棕色; 11:粉色; 12:紫色)")
+    private Integer vehicleColor;
+
+    @ApiModelProperty("车辆类型(0:其他车; 1:小型车; 2:大型车; 3:摩托车)")
+    private Integer vehicleType;
+
+    @ApiModelProperty("车牌颜色(0:蓝色,1:黄色,2:白色,3:黑色,4:绿色,5:民航黑色, 255:其他颜色)")
+    private Integer plateColor;
+
+    @ApiModelProperty("车牌类型(0:标准民用车,1:02式民用车,3:警车,4:民用车双行尾牌车,5:使馆车,6:农用车,7:摩托车,8:新能源车)")
+    private Integer plateType;
+
+    @ApiModelProperty("车辆分类")
+    private String carCategory;
+
+    @ApiModelProperty("车辆分类名称")
+    private String carCategoryName;
+
+    @ApiModelProperty("车辆图片uri")
+    private String vehiclePicUri;
+
+    @ApiModelProperty("车牌图片uri")
+    private String plateNoPicUri;
+
+    @ApiModelProperty("人脸图片uri")
+    private String facePicUri;
+
+    @ApiModelProperty("图片服务唯一标识")
+    private String aswSyscode;
+
+    @ApiModelProperty("通过时间")
+    private String crossTime;
+
+    @ApiModelProperty("创建时间")
+    private String createTime;
+}

+ 6 - 1
src/main/java/com/xjrsoft/module/job/HikvisionBaseDataTask.java

@@ -1,8 +1,10 @@
 package com.xjrsoft.module.job;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
 import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
 import com.xjrsoft.module.hikvision.util.DataUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -104,8 +106,11 @@ public class HikvisionBaseDataTask {
 
 
             tableName = "base_student";
+            List<HikvisionData> studentList = hikvisionDataMapper.selectList(
+                    new QueryWrapper<HikvisionData>().lambda().eq(HikvisionData::getTableName, tableName)
+            );
             Map<String, String> baseStudent = dataMap.get(tableName);
-            dataUtil.insertStudentOne(tableName, baseStudent);
+            dataUtil.insertStudentOne(tableName, baseStudent, studentList);
 
             log.info("数据推送完成");
         } catch (Exception e) {

+ 1 - 1
src/main/java/com/xjrsoft/module/job/HikvisionLeaveTask.java

@@ -46,7 +46,7 @@ public class HikvisionLeaveTask {
 
     @Scheduled(cron = "0 */15 * * * ?")
     public void execute() {
-        //doExecute();
+        doExecute();
     }
     public void doExecute() {
         String active = SpringUtil.getActiveProfile();

+ 5 - 2
src/main/java/com/xjrsoft/module/liteflow/node/StudentAssessmentInspectionNode.java

@@ -14,7 +14,7 @@ import java.util.Map;
 @Component("student_assessment_inspection_node")
 public class StudentAssessmentInspectionNode extends NodeComponent {
     @Autowired
-    private IBaseStudentAssessmentInspectionService baseStudentAssessmentInspectionService;
+    private IBaseStudentAssessmentInspectionService inspectionService;
 
     @Override
     public void process() throws Exception {
@@ -24,7 +24,10 @@ public class StudentAssessmentInspectionNode extends NodeComponent {
         Long formId = Convert.toLong(value);
         if (formId != null) {
             // 数据处理
-            baseStudentAssessmentInspectionService.dataHandle(formId);
+            inspectionService.dataHandle(formId);
+
+            //通知班主
+            inspectionService.noticeTeacher(formId);
         }
     }
 }

+ 16 - 0
src/main/java/com/xjrsoft/module/liteflow/node/WfRoomApplicantNode.java

@@ -4,6 +4,9 @@ import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xjrsoft.common.enums.RoomApplicantTypeEnum;
 import com.xjrsoft.common.enums.StudyStatusEnum;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
+import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
+import com.xjrsoft.module.hikvision.util.DataUtil;
 import com.xjrsoft.module.room.entity.WfRoomApplicant;
 import com.xjrsoft.module.room.mapper.WfRoomApplicantMapper;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
@@ -12,6 +15,8 @@ import com.yomahub.liteflow.core.NodeComponent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,6 +28,10 @@ public class WfRoomApplicantNode extends NodeComponent {
     private WfRoomApplicantMapper wfRoomApplicantMapper;
     @Autowired
     private IBaseStudentSchoolRollService studentSchoolRollService;
+
+    @Autowired
+    private HikvisionDataMapper hikvisionDataMapper;
+
     @Override
     public void process() throws Exception {
         // 获取表单中数据编号
@@ -43,6 +52,13 @@ public class WfRoomApplicantNode extends NodeComponent {
             }
             //修改学生班级
             studentSchoolRollService.updateById(schoolRoll);
+
+            String tableName = "base_student";
+            List<HikvisionData> studentList = hikvisionDataMapper.selectList(
+                    new QueryWrapper<HikvisionData>().lambda().eq(HikvisionData::getTableName, tableName)
+            );
+            DataUtil dataUtil = new DataUtil();
+            dataUtil.insertStudentOne(tableName, new HashMap<>(), studentList, wfRoomApplicant.getApplicantUserId());
         }
     }
 }

+ 7 - 0
src/main/java/com/xjrsoft/module/student/service/IBaseStudentAssessmentInspectionService.java

@@ -61,4 +61,11 @@ public interface IBaseStudentAssessmentInspectionService extends MPJBaseService<
     IPage<CalssQuantitativeAssessmentPageVo> getCalssQuantitativeAssessmentPage(Page<CalssQuantitativeAssessmentPageDto> page, CalssQuantitativeAssessmentPageDto dto);
 
     Boolean dataHandle(Long id);
+
+    /**
+     * 通知班主任
+     * @param id
+     * @return
+     */
+    Boolean noticeTeacher(Long id);
 }

+ 93 - 2
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java

@@ -1,10 +1,12 @@
 package com.xjrsoft.module.student.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.IdUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,12 +15,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.AssessmentTypeEnum;
 import com.xjrsoft.common.enums.ScoreTypeEnum;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.mapper.BaseClassMapper;
+import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.service.IWeChatService;
 import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionMobilePageDto;
 import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionPageDto;
 import com.xjrsoft.module.student.dto.CalssQuantitativeAssessmentPageDto;
@@ -28,11 +35,13 @@ import com.xjrsoft.module.student.entity.BaseClassMajorSet;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentCategory;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentClassRelation;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentInspection;
+import com.xjrsoft.module.student.entity.BaseStudentAssessmentProject;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentStudentRelation;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentCategoryMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentClassRelationMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentInspectionMapper;
+import com.xjrsoft.module.student.mapper.BaseStudentAssessmentProjectMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentStudentRelationMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
 import com.xjrsoft.module.student.service.IBaseStudentAssessmentInspectionService;
@@ -54,6 +63,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.ByteArrayOutputStream;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
@@ -62,6 +72,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import static javax.swing.UIManager.put;
+
 /**
  * @title: 学生班级巡查考核
  * @Author dzx
@@ -74,7 +86,9 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
 
     private final BaseStudentAssessmentInspectionMapper assessmentInspectionMapper;
 
-    private final BaseStudentAssessmentCategoryMapper baseStudentAssessmentCategoryMapper;
+    private final BaseStudentAssessmentCategoryMapper categoryMapper;
+
+    private final BaseStudentAssessmentProjectMapper projectMapper;
 
     private final BaseStudentAssessmentStudentRelationMapper assessmentStudentRelationMapper;
 
@@ -86,6 +100,10 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
 
     private final IFileService fileService;
 
+    private final IUserService userService;
+
+    private final IWeChatService weChatService;
+
     @Override
     public Page<BaseStudentAssessmentInspectionPageVo> getPage(Page<BaseStudentAssessmentInspectionPageDto> page, BaseStudentAssessmentInspectionPageDto dto) {
         Page<BaseStudentAssessmentInspectionPageVo> result = assessmentInspectionMapper.getPage(page, dto);
@@ -195,7 +213,7 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
         LambdaQueryWrapper<BaseStudentAssessmentCategory> baseStudentAssessmentCategoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
         baseStudentAssessmentCategoryLambdaQueryWrapper
                 .in(BaseStudentAssessmentCategory::getId, baseStudentAssessmentCategoryIdList);
-        List<BaseStudentAssessmentCategory> baseStudentAssessmentCategorieList = baseStudentAssessmentCategoryMapper.selectList(baseStudentAssessmentCategoryLambdaQueryWrapper);
+        List<BaseStudentAssessmentCategory> baseStudentAssessmentCategorieList = categoryMapper.selectList(baseStudentAssessmentCategoryLambdaQueryWrapper);
 
         //导出子表
         if(baseStudentAssessmentCategorieList.size() > 0){
@@ -524,4 +542,77 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
         }
         return true;
     }
+
+    @Override
+    public Boolean noticeTeacher(Long id) {
+        BaseStudentAssessmentInspection inspection = this.getById(id);
+        String classIds = inspection.getClassIds();
+        BaseClass baseClass = baseClassMapper.selectById(classIds);
+        User user = userService.getById(baseClass.getTeacherId());
+        String wechatTemplate = "Xb21V8au0Ur9puQs4hIDJTl8LP6GTgVOHQtOeie1Oco";
+
+        WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+        weChatSendMessageDto.setUserId(user.getOpenId());
+        weChatSendMessageDto.setTemplateId(wechatTemplate);
+        weChatSendMessageDto.setMsgId(IdUtil.getSnowflakeNextId() + "");
+
+        JSONObject data = new JSONObject();
+        String thing4 = "";
+        String thing1 = "无";
+        if(AssessmentTypeEnum.CLASS.getCode().equals(inspection.getAssessmentType())){
+            data.put("const3", new JSONObject() {{
+                put("value", AssessmentTypeEnum.CLASS.getValue());
+            }});
+
+            BaseStudentAssessmentProject project = projectMapper.selectById(inspection.getBaseStudentAssessmentProjectId());
+            thing4 = project.getName();
+
+        }else if(AssessmentTypeEnum.PERSONAL.getCode().equals(inspection.getAssessmentType())){
+            data.put("const3", new JSONObject() {{
+                put("value", AssessmentTypeEnum.PERSONAL.getValue());
+            }});
+            String[] studentUsers = inspection.getStudentUserIds().split(",");
+            List<String> studentIds = new ArrayList<>();
+            for (String studentUser : studentUsers) {
+                studentIds.add(studentUser.trim());
+            }
+            List<User> userList = userService.listByIds(studentIds);
+            for (int i = 0; i < userList.size(); i ++){
+                if(i > 0){
+                    thing1 += ",";
+                }
+                thing1 += userList.get(i).getName();
+            }
+            if(thing1.length() > 20){
+                thing1 = thing1.substring(0, 16) + "...";
+            }
+
+            BaseStudentAssessmentCategory category = categoryMapper.selectById(inspection.getBaseStudentAssessmentCategoryId());
+            thing4 = category.getName();
+        }
+        //得分
+        JSONObject thing4Json = new JSONObject();
+        thing4Json.put("value", thing4);
+        data.put("thing4", thing4Json);
+
+        //学生
+        JSONObject thing1Json = new JSONObject();
+        thing1Json.put("value", thing1);
+        data.put("thing1", thing1Json);
+
+        //得分
+        data.put("character_string5", new JSONObject() {{
+            put("value", inspection.getScore());
+        }});
+
+        //考核时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
+        data.put("time2", new JSONObject() {{
+            put("value", sdf.format(inspection.getAssessmentDate()));
+        }});
+
+        weChatSendMessageDto.setContent(data);
+        weChatService.sendTemplateMessage(weChatSendMessageDto);
+        return true;
+    }
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/workflow/dto/MonitorPageDto.java

@@ -36,4 +36,10 @@ public class MonitorPageDto extends PageInput {
     @ApiModelProperty("流程类型id")
     private String category;
 
+    @ApiModelProperty("流程任务模板名称")
+    private String processSchemaName;
+
+    @ApiModelProperty("流程任务发起人名称")
+    private String startUserName;
+
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/workflow/listener/ExecutionDelegate.java

@@ -913,6 +913,7 @@ public class ExecutionDelegate implements ExecutionListener {
                 LiteFlowChainELBuilder.createChain().setChainName(chain.getChainName()).setEL(chain.getElData()).build();
                 // 执行规则
                 varMap.put("processDefinitionId", execution.getProcessDefinitionId());
+                varMap.put("processInstanceId", execution.getProcessInstanceId());
                 flowExecutor.execute2Resp(chain.getChainName(), null,varMap);
             }
 

+ 15 - 2
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -4099,14 +4099,24 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                     .variableValueEquals(WorkflowConstant.PROCESS_SERIAL_NUMBER_KEY, StrUtil.isNumeric(dto.getKeyword()) ? Convert.toLong(dto.getKeyword()) : 0L)
                     .endOr();
         }
+        // 发起人
+        if (StrUtil.isNotBlank(dto.getStartUserName())) {
+            historicProcessInstanceQuery.variableValueLike(WorkflowConstant.PROCESS_START_USER_NAME_KEY, StringPool.PERCENT + dto.getStartUserName() + StringPool.PERCENT);
+        }
+        // 流程任务模板名称
+        if (StrUtil.isNotBlank(dto.getProcessSchemaName())) {
+            historicProcessInstanceQuery.variableValueLike(WorkflowConstant.PROCESS_SCHEMA_NAME_KEY, StringPool.PERCENT + dto.getProcessSchemaName() + StringPool.PERCENT);
+        }
         if (dto.getType() == 1) {
             historicProcessInstanceQuery.finished();
         }
         if (dto.getType() == 0) {
             historicProcessInstanceQuery.unfinished();
         }
+        historicProcessInstanceQuery.orderByProcessInstanceStartTime().desc();
 
-        List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.list();
+        int startNum = (dto.getLimit() - 1) * dto.getSize();
+        List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.listPage(startNum, dto.getSize());
 
         //获取到所有流程id
         List<String> processIds = historicProcessInstances.stream().map(HistoricProcessInstance::getId).collect(Collectors.toList());
@@ -4119,6 +4129,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                             .leftJoin(WorkflowSchema.class, WorkflowSchema::getId, WorkflowExtra::getSchemaId)
                             .leftJoin(DictionaryDetail.class, DictionaryDetail::getId, WorkflowSchema::getCategory)
                             .eq(StrUtil.isNotEmpty(dto.getCategory()), DictionaryDetail::getCode, dto.getCategory())
+                            .in(WorkflowExtra::getProcessId, processIds)
             );
             for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
                 //找到当前流程的 任务开始时间 最大值  为当前审批节点
@@ -4159,7 +4170,9 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         PageOutput<MonitorPageVo> output = new PageOutput<>();
         output.setCurrentPage(dto.getLimit());
         output.setPageSize(dto.getSize());
-        output.setTotal(result.size());
+        if (processIds.size() > 0) {
+            output.setTotal(Convert.toInt(historicProcessInstanceQuery.count()));
+        }
         output.setList(result);
         return output;
     }

+ 2 - 1
src/main/resources/mapper/ledger/WfSubscriptionMapper.xml

@@ -5,9 +5,10 @@
 <mapper namespace="com.xjrsoft.module.oa.mapper.WfSubscriptionMapper">
     <select id="getPage" parameterType="com.xjrsoft.module.ledger.dto.WfSubscriptionPageDto" resultType="com.xjrsoft.module.ledger.vo.WfSubscriptionPageVo">
         select t1.id,t2.name as org_name,t3.name as user_name,t1.shen_qing_ri_qi4752,t1.folder_id,t1.number,t1.total_amount from wf_subscription t1
+        inner join xjr_workflow_form_relation t4 ON t1.id = t4.form_key_value
         left join xjr_department t2 on t1.application_department = t2.id
         left join xjr_user t3 on t1.user_id = t3.id
-        where t1.status = 1
+        where t4.current_state = 'COMPLETED'
         <if test="dto.orgId != null">
             and t2.id = #{dto.orgId}
         </if>

+ 134 - 34
src/test/java/com/xjrsoft/module/job/HikvisionBaseDataTaskTest.java

@@ -1,36 +1,36 @@
 package com.xjrsoft.module.job;
 
 import cn.hutool.db.Db;
+import cn.hutool.db.Entity;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.xjrsoft.XjrSoftApplication;
-import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
-import com.xjrsoft.common.utils.DatasourceUtil;
 import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.evaluate.controller.EvaluateItemController;
 import com.xjrsoft.module.hikvision.entity.HikvisionData;
+import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
 import com.xjrsoft.module.hikvision.util.ApiUtil;
 import com.xjrsoft.module.hikvision.util.DataUtil;
 import com.xjrsoft.module.hikvision.util.OutInRecordUtil;
 import com.xjrsoft.module.organization.entity.Department;
-import com.xjrsoft.module.schedule.entity.JianyueData;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
 import com.yomahub.liteflow.util.JsonUtil;
-import lombok.var;
 import org.junit.jupiter.api.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 javax.sql.DataSource;
 import java.sql.SQLException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -52,6 +52,9 @@ class HikvisionBaseDataTaskTest {
 
     OutInRecordUtil outInRecordUtil = new OutInRecordUtil();
 
+    @Autowired
+    private HikvisionDataMapper hikvisionDataMapper;
+
     @Test
     void test2(){
         String sql = "select * from base_class";
@@ -75,6 +78,51 @@ class HikvisionBaseDataTaskTest {
         }
     }
 
+    @Test
+    void selectOrg(){
+        String apiPath = "/api/resource/v1/org/orgList";
+        ApiUtil apiUtil = new ApiUtil();
+
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("pageNo", 1);
+        jsonObject.addProperty("pageSize", 500);
+
+        String doPost = apiUtil.doPost(apiPath, jsonObject.toString(), null);
+        System.out.println(doPost);
+
+        String sql = "SELECT * FROM hikvision_data WHERE 1 = 1 and table_name = 'base_class'";
+        List<Map<String, Object>> maps = SqlRunnerAdapter.db().selectList(sql);
+        List<String> sourceIds = new ArrayList<>();
+        for (Map<String, Object> map : maps) {
+            sourceIds.add(map.get("source_id").toString());
+        }
+        JsonParser jsonParser = new JsonParser();
+        JsonElement parse = jsonParser.parse(doPost);
+        JsonObject resultJson = parse.getAsJsonObject();
+
+        String tableName = "hikvision_data";
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
+            JsonArray array = resultJson.get("data").getAsJsonObject().get("list").getAsJsonArray();
+            for (JsonElement jsonElement : array) {
+                JsonObject json = jsonElement.getAsJsonObject();
+                String orgIndexCode = json.get("orgIndexCode").getAsString();
+                if(sourceIds.contains(orgIndexCode)){
+                    continue;
+                }
+
+                Entity entity = Entity.create(tableName);
+                entity.set("source_id", orgIndexCode);
+                entity.set("table_name", "base_class");
+                entity.set("hikvision_id", orgIndexCode);
+                entity.set("create_date", sdf.format(new Date()));
+                SqlRunnerAdapter.db().dynamicInsert(tableName, entity);
+            }
+        }
+
+
+    }
+
 
     @Test
     void test() throws Exception {
@@ -123,8 +171,20 @@ class HikvisionBaseDataTaskTest {
 
 
         tableName = "base_student";
+        List<HikvisionData> studentList = hikvisionDataMapper.selectList(
+                new QueryWrapper<HikvisionData>().lambda().eq(HikvisionData::getTableName, tableName)
+        );
         Map<String, String> baseStudent = dataMap.get(tableName);
-        Map<String, String> student = dataUtil.insertStudentOne(tableName, baseStudent);
+        insertStudentOne(tableName, baseStudent, studentList);
+//        sql = "SELECT * FROM wf_room_applicant WHERE delete_mark = 0 AND STATUS = 1";
+//        List<Map<String, Object>> wfRoomApplicantList = SqlRunnerAdapter.db().selectList(sql);
+//
+//        Map<String, String> baseStudent = dataMap.get(tableName);
+//        for (Map<String, Object> objectMap : wfRoomApplicantList) {
+//            Long applicantUserId = Long.parseLong(objectMap.get("applicant_user_id").toString());
+//            Map<String, String> student = dataUtil.insertStudentOne(tableName, baseStudent, studentList, applicantUserId);
+//        }
+
 
 //        selectOrg(use, "base_class");
 
@@ -178,17 +238,23 @@ class HikvisionBaseDataTaskTest {
         db.executeBatch(sqls);
     }
 
-    public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData) throws Exception {
+    public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData, List<HikvisionData> studentList) throws Exception {
         String sql = "SELECT t1.id,t1.name,CONCAT(t3.id,'-',replace(t4.name,'级',''),'-',t3.class_type,'-',t2.stduy_status) as orgIndexCode," +
                 " t1.user_name,t1.gender,DATE_FORMAT(t1.birth_date, '%Y-%m-%d') as birthday,t1.mobile,t1.email,t1.credential_type,t1.credential_number FROM xjr_user t1" +
                 " INNER JOIN base_student_school_roll t2 ON t1.id = t2.user_id" +
                 " INNER JOIN base_class t3 ON t2.class_id = t3.id" +
                 " INNER JOIN base_grade t4 ON t3.grade_id = t4.id" +
                 " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0" +
-                " AND t3.class_type IS NOT NULL" +
-                " AND t1.name IN ('罗一钦','刘嘉靖')";
+                " AND t3.class_type IS NOT NULL AND t3.is_graduate = 1";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
         Map<Integer, String> clientMap = new HashMap<>();
+        List<Entity> insertList = new ArrayList<>();
+
+
+        Map<String, String> historyMap = new HashMap<>();
+        for (HikvisionData hikvisionData : studentList) {
+            historyMap.put(hikvisionData.getSourceId(), hikvisionData.getSendData());
+        }
 
         Map<String, String> idMap = new HashMap<>();
         JsonParser jsonParser = new JsonParser();
@@ -196,13 +262,16 @@ class HikvisionBaseDataTaskTest {
         Map<String, String> header = new HashMap<>();
         header.put("tagId", "insert_student");
 
+        List<JsonObject> addList = new ArrayList<>();
+        List<JsonObject> updateList = new ArrayList<>();
+
         for(int i = 0; i < list.size(); i ++){
             Map<String, Object> objectMap = list.get(i);
-            String apiPath = "/api/resource/v2/person/single/add";
+            String id = objectMap.get("id").toString();
 
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("clientId", i);
-            paramJson.addProperty("personId", objectMap.get("id").toString());
+            paramJson.addProperty("personId", id);
             paramJson.addProperty("personName", objectMap.get("name").toString());
             paramJson.addProperty("orgIndexCode", objectMap.get("orgIndexCode").toString());
             paramJson.addProperty("phoneNo", objectMap.get("mobile")==null?"":objectMap.get("mobile").toString());
@@ -210,8 +279,9 @@ class HikvisionBaseDataTaskTest {
             paramJson.addProperty("birthday", objectMap.get("birthday")==null?"":objectMap.get("birthday").toString());
             paramJson.addProperty("personType", 2);
 
-            int gender;
-            switch (objectMap.get("gender").toString()) {
+            int gender = 0;
+            String genderData = objectMap.get("gender") == null ? "" : objectMap.get("gender").toString();
+            switch (genderData) {
                 case "SB10001":
                     gender = 1;
                     break;
@@ -224,19 +294,57 @@ class HikvisionBaseDataTaskTest {
             }
             paramJson.addProperty("gender", gender);
 
-            if(tableData != null && tableData.containsKey(objectMap.get("id").toString())){
-                apiPath = "/api/resource/v1/person/single/update";
-                apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+            if(historyMap.containsKey(id)){
+                if(historyMap.get(id) ==null || !paramJson.toString().equals(historyMap.get(id))){
+                    updateList.add(paramJson);
+                }
                 continue;
             }
 
-            clientMap.put(i, objectMap.get("id").toString());
+            addList.add(paramJson);
+        }
+
+        String apiPath = "/api/resource/v1/person/single/add";
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        for (JsonObject paramJson : addList) {
+            String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+            JsonElement parse = jsonParser.parse(result);
+            JsonObject resultJson = parse.getAsJsonObject();
+            if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
+                Entity entity = Entity.create(tableName);
+                entity.set("table_name", tableName);
+                entity.set("create_date", sdf.format(new Date()));
+                entity.set("source_id", clientMap.get(paramJson.get("clientId").getAsInt()));
+                entity.set("hikvision_id", paramJson.get("personId").getAsString());
+                entity.set("send_data", paramJson.toString());
+                insertList.add(entity);
+            }else if("0x00052102".equals(resultJson.get("code").getAsString()) && "PersonId Already In Db".equals(resultJson.get("msg").getAsString())){
+                Entity entity = Entity.create(tableName);
+                entity.set("table_name", tableName);
+                entity.set("create_date", sdf.format(new Date()));
+                entity.set("source_id", paramJson.get("personId").getAsString());
+                entity.set("hikvision_id", paramJson.get("personId").getAsString());
+                entity.set("send_data", paramJson.toString());
+                insertList.add(entity);
+            }
+        }
+        tableName = "hikvision_data";
+        if(!insertList.isEmpty()){
+            SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
+        }
+
+        apiPath = "/api/resource/v1/person/single/update";
+        for (JsonObject paramJson : updateList) {
+            Thread.sleep(500);
             String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
             JsonElement parse = jsonParser.parse(result);
             JsonObject resultJson = parse.getAsJsonObject();
             if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
-                JsonObject array = resultJson.get("data").getAsJsonObject();
-                idMap.put(objectMap.get("id").toString(), array.get("personId").getAsString());
+                Entity entity = Entity.create(tableName);
+                entity.set("send_data", paramJson.toString());
+                Entity where = Entity.create(tableName);
+                where.set("source_id", paramJson.get("personId").getAsString());
+                SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
             }
         }
         //插入记录表
@@ -245,30 +353,21 @@ class HikvisionBaseDataTaskTest {
 
 
 
-    void deleteClass(Db db) throws SQLException {
+    @Test
+    void deleteClass() {
 
-        String apiPath = "/api/resource/v1/org/orgList";
+        String apiPath = "/api/resource/v1/org/batch/delete";
         JsonObject jsonObject = new JsonObject();
-        jsonObject.addProperty("pageNo", 1);
-        jsonObject.addProperty("pageSize", 500);
         ApiUtil apiUtil = new ApiUtil();
-        String result = apiUtil.doPost(apiPath, jsonObject.toString(), null);
 
-        String sql = "SELECT * FROM hikvision_data WHERE table_name = 'base_class' order by length(hikvision_id) desc";
-        List<HikvisionData> dataList = db.query(sql, HikvisionData.class);
-        apiPath = "/api/resource/v1/org/batch/delete";
-        Map<Long, String> idMap = new HashMap<>();
-        JsonParser jsonParser = new JsonParser();
         JsonArray dataArray = new JsonArray();
-        for (HikvisionData department : dataList) {
-            dataArray.add(department.getHikvisionId());
-        }
-
+        dataArray.add("1828723343029219330-2024-job_class-FB3001");
+        dataArray.add("1828723343029219330-2024-job_class-FB3002");
         JsonObject paramJson = new JsonObject();
         paramJson.add("indexCodes", dataArray);
         Map<String, String> headerMap = new HashMap<>();
         headerMap.put("tagId", "deleteOrg");
-        result = apiUtil.doPost(apiPath, paramJson.toString(), null, headerMap);
+        String result = apiUtil.doPost(apiPath, paramJson.toString(), null, headerMap);
         System.out.println(result);
     }
 
@@ -385,6 +484,7 @@ class HikvisionBaseDataTaskTest {
     }
 
 
+    @Test
     void deleteOrg(Db db, String tableName) throws SQLException {
         String sql = "SELECT * FROM " + tableName + " WHERE delete_mark = 0 ORDER BY LENGTH(hierarchy)";
         List<Department> dataList = db.query(sql, Department.class);