From 389ffcd285f5b28e43f48775905146e10a433fe1 Mon Sep 17 00:00:00 2001 From: pengjie <17373303529@163.com> Date: Fri, 11 Jul 2025 18:18:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E6=B0=B4=E5=8C=97=E6=96=B9=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ProjectUfaceConfigServiceImpl.java | 8 + .../controller/RegionViolationController.java | 285 ++++++++++++++++++ .../worker/entity/RegionViolation.java | 100 ++++++ .../worker/mapper/RegionViolationMapper.java | 19 ++ .../mapper/xml/RegionViolationMapper.xml | 5 + .../service/IRegionViolationService.java | 14 + .../impl/RegionViolationServiceImpl.java | 19 ++ .../impl/WorkerAttendanceServiceImpl.java | 5 + .../java/com/zhgd/xmgl/task/WorkerTask.java | 86 ++++++ .../com/zhgd/xmgl/util/MqttFaceDevUtil.java | 100 ++++++ 10 files changed, 641 insertions(+) create mode 100644 src/main/java/com/zhgd/xmgl/modules/worker/controller/RegionViolationController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/worker/entity/RegionViolation.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/worker/mapper/RegionViolationMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/RegionViolationMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/worker/service/IRegionViolationService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/worker/service/impl/RegionViolationServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/util/MqttFaceDevUtil.java diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectUfaceConfigServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectUfaceConfigServiceImpl.java index 068baa1aa..1711d4bd6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectUfaceConfigServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectUfaceConfigServiceImpl.java @@ -229,6 +229,8 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl> queryPageList(@ApiIgnore @RequestBody Map map) { + QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(RegionViolation.class, map); + Page page = PageUtil.getPage(map); + IPage pageList = regionViolationService.page(page, queryWrapper); + return Result.success(pageList); + } + + /** + * 列表查询 + * + * @param regionViolation + * @return + */ + @OperLog(operModul = "中水北方区域违规记录管理", operType = "列表查询", operDesc = "列表查询中水北方区域违规记录信息") + @ApiOperation(value = " 列表查询中水北方区域违规记录信息", notes = "列表查询中水北方区域违规记录信息", httpMethod = "POST") + @PostMapping(value = "/list") + public Result> queryList(@RequestBody RegionViolation regionViolation) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(regionViolation); + List list = regionViolationService.list(queryWrapper); + return Result.success(list); + } + + + /** + * 添加 + * + * @param regionViolation + * @return + */ + @OperLog(operModul = "中水北方区域违规记录管理", operType = "新增", operDesc = "添加中水北方区域违规记录信息") + @ApiOperation(value = " 添加中水北方区域违规记录信息", notes = "添加中水北方区域违规记录信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody RegionViolation regionViolation) { + Result result = new Result(); + regionViolationService.save(regionViolation); + return Result.success("添加成功!"); + } + + /** + * 编辑 + * + * @param regionViolation + * @return + */ + @OperLog(operModul = "中水北方区域违规记录管理", operType = "修改", operDesc = "编辑中水北方区域违规记录信息") + @ApiOperation(value = "编辑中水北方区域违规记录信息", notes = "编辑中水北方区域违规记录信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result edit(@RequestBody RegionViolation regionViolation) { + Result result = new Result(); + RegionViolation regionViolationEntity = regionViolationService.getById(regionViolation.getId()); + if (regionViolationEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = regionViolationService.updateById(regionViolation); + if (ok) { + result.success("修改成功!"); + } else { + result.success("操作失败!"); + } + } + + return result; + } + + /** + * 通过id删除 + * + * @return + */ + @OperLog(operModul = "中水北方区域违规记录管理", operType = "删除", operDesc = "删除中水北方区域违规记录信息") + @ApiOperation(value = "删除中水北方区域违规记录信息", notes = "删除中水北方区域违规记录信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "中水北方区域违规记录ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/delete") + public Result delete(@RequestBody RegionViolation regionViolation) { + Result result = new Result(); + RegionViolation regionViolationEntity = regionViolationService.getById(regionViolation.getId()); + if (regionViolationEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = regionViolationService.removeById(regionViolation.getId()); + if (ok) { + result.success("删除成功!"); + } else { + result.success("操作失败!"); + } + } + return result; + } + + /** + * 批量删除 + * + * @return + */ + @OperLog(operModul = "中水北方区域违规记录管理", operType = "批量删除", operDesc = "批量删除中水北方区域违规记录信息") + @ApiOperation(value = "批量删除中水北方区域违规记录信息", notes = "批量删除中水北方区域违规记录信息", httpMethod = "POST") + @ApiImplicitParam(name = "ids", value = "中水北方区域违规记录ID字符串", paramType = "body", required = true, dataType = "String") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@ApiIgnore @RequestBody Map map) { + Result result = new Result(); + String ids = MapUtils.getString(map, "ids"); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.regionViolationService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @return + */ + @OperLog(operModul = "中水北方区域违规记录管理", operType = "查询", operDesc = "通过id查询中水北方区域违规记录信息") + @ApiOperation(value = "通过id查询中水北方区域违规记录信息", notes = "通过id查询中水北方区域违规记录信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "中水北方区域违规记录ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/queryById") + public Result queryById(@ApiIgnore @RequestBody Map map) { + Result result = new Result(); + RegionViolation regionViolation = regionViolationService.getById(MapUtils.getString(map, "id")); + if (regionViolation == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(regionViolation); + result.setSuccess(true); + } + return result; + } + + /** + * 导出excel + * + * @param request + * @param response + */ + @ApiOperation(value = "导出excel中水北方区域违规记录信息", notes = "导出excel中水北方区域违规记录信息", httpMethod = "POST") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = null; + try { + String paramsStr = request.getParameter("paramsStr"); + if (oConvertUtils.isNotEmpty(paramsStr)) { + String deString = URLDecoder.decode(paramsStr, "UTF-8"); + RegionViolation regionViolation = JSON.parseObject(deString, RegionViolation.class); + queryWrapper = QueryGenerator.initQueryWrapper(regionViolation, request.getParameterMap()); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = regionViolationService.list(queryWrapper); + for (RegionViolation regionViolation : pageList) { + if (regionViolation.getWorkerType() == 1) { + regionViolation.setWorkerTypeName("劳务人员"); + } else if (regionViolation.getWorkerType() == 1) { + regionViolation.setWorkerTypeName("管理人员"); + } else { + regionViolation.setWorkerTypeName("临时人员"); + } + } + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "中水北方区域违规记录列表"); + mv.addObject(NormalExcelConstants.CLASS, RegionViolation.class); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("中水北方区域违规记录列表数据", "导出人:" + SecurityUtils.getUser().getRealName(), "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @ApiOperation(value = "通过excel导入中水北方区域违规记录信息", notes = "通过excel导入中水北方区域违规记录信息", httpMethod = "POST") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listRegionViolations = ExcelImportUtil.importExcel(file.getInputStream(), RegionViolation.class, params); + for (RegionViolation regionViolationExcel : listRegionViolations) { + regionViolationService.save(regionViolationExcel); + } + return Result.ok("文件导入成功!数据行数:" + listRegionViolations.size()); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.ok("文件导入失败!"); + } + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/RegionViolation.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/RegionViolation.java new file mode 100644 index 000000000..0f52b9f2a --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/RegionViolation.java @@ -0,0 +1,100 @@ +package com.zhgd.xmgl.modules.worker.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 中水北方区域违规记录 + * @author: pengj + * @date: 2025-07-10 + * @version: V1.0 + */ +@Data +@TableName("region_violation") +@ApiModel(value = "RegionViolation实体类", description = "RegionViolation") +public class RegionViolation implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 区域违规ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "区域违规ID") + private Long id; + + @ApiModelProperty(value = "人员ID") + private Long workerId; + /** + * 人员类型 + */ + @ApiModelProperty(value = "人员类型") + private Integer workerType; + + @TableField(exist = false) + @Excel(name = "人员类型", width = 15) + @ApiModelProperty(value = "人员类型") + private String workerTypeName; + /** + * 企业名称 + */ + @Excel(name = "企业名称", width = 15) + @ApiModelProperty(value = "企业名称") + private String enterpriseName; + /** + * 部门/班组名称 + */ + @Excel(name = "部门/班组名称", width = 15) + @ApiModelProperty(value = "部门/班组名称") + private String teamName; + /** + * 人员名称 + */ + @Excel(name = "人员名称", width = 15) + @ApiModelProperty(value = "人员名称") + private String workerName; + /** + * 进场时间 + */ + @Excel(name = "进场时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "进场时间") + private String enterTime; + /** + * 出场时间 + */ + @Excel(name = "出场时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "出场时间") + private String outTime; + /** + * 在场时长 + */ + @Excel(name = "在场时长", width = 15) + @ApiModelProperty(value = "在场时长") + private String duration; + /** + * 出场位置 + */ + @Excel(name = "出场位置", width = 15) + @ApiModelProperty(value = "出场位置") + private String address; + /** + * 区域ID + */ + @ApiModelProperty(value = "区域ID") + private Long regionId; + /** + * 项目SN + */ + @ApiModelProperty(value = "项目SN") + private String projectSn; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/RegionViolationMapper.java b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/RegionViolationMapper.java new file mode 100644 index 000000000..f0348cab8 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/RegionViolationMapper.java @@ -0,0 +1,19 @@ +package com.zhgd.xmgl.modules.worker.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import com.zhgd.xmgl.modules.worker.entity.RegionViolation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 中水北方区域违规记录 + * @author: pengj + * @date: 2025-07-10 + * @version: V1.0 + */ +@Mapper +public interface RegionViolationMapper extends BaseMapper { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/RegionViolationMapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/RegionViolationMapper.xml new file mode 100644 index 000000000..da05fa322 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/RegionViolationMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/IRegionViolationService.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/IRegionViolationService.java new file mode 100644 index 000000000..989e996b0 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/IRegionViolationService.java @@ -0,0 +1,14 @@ +package com.zhgd.xmgl.modules.worker.service; + +import com.zhgd.xmgl.modules.worker.entity.RegionViolation; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 中水北方区域违规记录 + * @author: pengj + * @date: 2025-07-10 + * @version: V1.0 + */ +public interface IRegionViolationService extends IService { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/RegionViolationServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/RegionViolationServiceImpl.java new file mode 100644 index 000000000..8db35f2f7 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/RegionViolationServiceImpl.java @@ -0,0 +1,19 @@ +package com.zhgd.xmgl.modules.worker.service.impl; + +import com.zhgd.xmgl.modules.worker.entity.RegionViolation; +import com.zhgd.xmgl.modules.worker.mapper.RegionViolationMapper; +import com.zhgd.xmgl.modules.worker.service.IRegionViolationService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 中水北方区域违规记录 + * @author: pengj + * @date: 2025-07-10 + * @version: V1.0 + */ +@Service +public class RegionViolationServiceImpl extends ServiceImpl implements IRegionViolationService { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java index e31ca73ec..04768d25d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java @@ -20,6 +20,7 @@ import com.arcsoft.face.toolkit.ImageInfo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.jeecg.common.api.vo.Result; @@ -180,6 +181,10 @@ public class WorkerAttendanceServiceImpl extends ServiceImpllambdaQuery().eq(WorkerInfo::getPersonSn, workerAttendance.getPersonSn())); + workerAttendance.setImageUrl(workerInfo == null ? "" : workerInfo.getFieldAcquisitionUrl()); + } workerAttendanceMapper.insert(workerAttendance); //计算在场 workerAttendancePresenceService.addWorkerAttendancePresence(workerAttendance); diff --git a/src/main/java/com/zhgd/xmgl/task/WorkerTask.java b/src/main/java/com/zhgd/xmgl/task/WorkerTask.java index 6be065584..5b3607371 100644 --- a/src/main/java/com/zhgd/xmgl/task/WorkerTask.java +++ b/src/main/java/com/zhgd/xmgl/task/WorkerTask.java @@ -1,6 +1,7 @@ package com.zhgd.xmgl.task; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.BetweenFormatter; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; @@ -10,6 +11,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.constant.Cts; @@ -28,6 +31,8 @@ import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig; import com.zhgd.xmgl.modules.project.mapper.ProjectExternalSystemServiceMapper; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService; +import com.zhgd.xmgl.modules.quality.entity.QualityRegion; +import com.zhgd.xmgl.modules.quality.service.IQualityRegionService; import com.zhgd.xmgl.modules.worker.entity.*; import com.zhgd.xmgl.modules.worker.mapper.WorkerBlacklistMapper; import com.zhgd.xmgl.modules.worker.mapper.WorkerCertificateMapper; @@ -86,6 +91,10 @@ public class WorkerTask { @Autowired WorkerInfoServiceImpl workerInfoService; @Autowired + IQualityRegionService qualityRegionService; + @Autowired + IRegionViolationService regionViolationService; + @Autowired ISystemUserService systemUserService; @Autowired private ProjectExternalSystemServiceMapper projectExternalSystemServiceMapper; @@ -862,4 +871,81 @@ public class WorkerTask { } } + + /** + * 中水北方区域人员滞留超过一天进行记录 + */ + @Scheduled(cron = "0 0/2 * * * ?") + @SchedulerLock(name = "regionViolation", lockAtMostFor = 1000 * 55, lockAtLeastFor = 1000 * 55) + @RequestMapping("regionViolation") + public void regionViolation() { + List list = new ArrayList<>(); + List violations = regionViolationService.list(Wrappers.lambdaQuery().isNull(RegionViolation::getOutTime)); + List exist = violations.stream().map(v -> v.getWorkerId()).collect(Collectors.toList()); + List regionList = qualityRegionService.list(Wrappers.lambdaQuery().eq(QualityRegion::getProjectSn, "554F52F52835441386247F5061D4F9DD")); + for (QualityRegion qualityRegion : regionList) { + Map map = new HashMap(); + map.put("projectSn", "554F52F52835441386247F5061D4F9DD"); + map.put("pageNo", 1); + map.put("pageSize", 1000); + map.put("presence", 1); + map.put("regionIdForUface", qualityRegion.getId()); + List workerInfoIList = workerInfoService.selectWorkerInfoList(map).getRecords(); + for (WorkerInfo workerInfo : workerInfoIList) { + if (StringUtils.isNotBlank(workerInfo.getAlarmFlag())) { + if (!exist.contains(workerInfo.getId())) { + RegionViolation regionViolation = new RegionViolation(); + regionViolation.setWorkerType(workerInfo.getPersonType()); + regionViolation.setWorkerId(workerInfo.getId()); + regionViolation.setEnterpriseName(workerInfo.getEnterpriseName()); + String teamName = StringUtils.isNotEmpty(workerInfo.getTeamName()) ? workerInfo.getTeamName() : ""; + String departmentName =StringUtils.isNotEmpty(workerInfo.getDepartmentName()) ? workerInfo.getDepartmentName() : ""; + regionViolation.setTeamName(teamName + departmentName); + regionViolation.setWorkerName(workerInfo.getWorkerName()); + regionViolation.setEnterTime(workerInfo.getAttendTime()); + regionViolation.setProjectSn(workerInfo.getProjectSn()); + regionViolation.setRegionId(qualityRegion.getId()); + list.add(regionViolation); + } + } + } + List regionExist = violations.stream().filter(v -> v.getRegionId().toString().equals(qualityRegion.getId().toString())) + .map(v -> v.getWorkerId()).collect(Collectors.toList()); + for (Long workerId : regionExist) { + if (!workerInfoIList.contains(workerId)) { + WorkerInfo workerInfo = workerInfoService.getById(workerId); + WorkerAttendance enter = workerAttendanceService.getOne(Wrappers.lambdaQuery() + .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) + .eq(WorkerAttendance::getPassType, 1) + .orderByDesc(WorkerAttendance::getCreateTime).last(" limit 1")); + WorkerAttendance out = workerAttendanceService.getOne(Wrappers.lambdaQuery() + .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) + .eq(WorkerAttendance::getPassType, 2) + .orderByDesc(WorkerAttendance::getCreateTime).last(" limit 1")); + if (out != null) { + UfaceDev one = ufaceDevService.getOne(Wrappers.lambdaQuery().eq(UfaceDev::getDevSn, out.getDevSn())); + LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate(); + wrapper.eq(RegionViolation::getWorkerId, workerInfo.getId()); + wrapper.isNull(RegionViolation::getOutTime); + wrapper.set(RegionViolation::getOutTime, out.getCreateTime()); + wrapper.set(RegionViolation::getAddress, one.getDevName()); + wrapper.set(RegionViolation::getDuration, DateUtil.formatBetween(DateUtil.parseDateTime(enter.getCreateTime()), + DateUtil.parseDateTime(out.getCreateTime()), BetweenFormatter.Level.SECOND)); + regionViolationService.update(wrapper); + } + } + } + } + regionViolationService.saveBatch(list); + } + +// /** +// * MQTT同步下发人员信息 +// */ +// @Scheduled(cron = "0 0/10 * * * ?") +// @SchedulerLock(name = "mqttIssuedWorkerInfo", lockAtMostFor = 1000 * 55, lockAtLeastFor = 1000 * 55) +// @RequestMapping("mqttIssuedWorkerInfo") +// public void mqttIssuedWorkerInfo() { +// +// } } diff --git a/src/main/java/com/zhgd/xmgl/util/MqttFaceDevUtil.java b/src/main/java/com/zhgd/xmgl/util/MqttFaceDevUtil.java new file mode 100644 index 000000000..86d0e8006 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/util/MqttFaceDevUtil.java @@ -0,0 +1,100 @@ +package com.zhgd.xmgl.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.zhgd.jeecg.common.util.SpringContextUtils; +import com.zhgd.mqtt.server.IMqttSender; +import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig; +import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * MQTT下发人员信息 + */ +@Slf4j +public class MqttFaceDevUtil { + + @Value("${basePath}") + private static String basePath; + + private static String mqttTopic = "mqtt/face/"; + + /** + * 添加修改人员 + * + * @param workerInfo + * @param devSn + */ + public static void addOrUpdatePerson(WorkerInfo workerInfo, String devSn) { + if (StrUtil.isNotBlank(devSn)) { + String[] splitArr = StringUtils.split(devSn, ","); + for (int i = 0; i < splitArr.length; i++) { + String ds = splitArr[i]; + Map map = build(workerInfo); + String payload = JSON.toJSONString(map); + String topic = mqttTopic + ds; + log.info("发送主题信息:{},主题为:{}", payload, topic); + IMqttSender mqttSender = SpringContextUtils.getBean(IMqttSender.class); + mqttSender.sendToMqtt(topic, 2, payload); + } + } else { + log.info("未查询到设备sn"); + } + } + + /** + * 删除人员 + * + * @param workerInfo + */ + public static void deletePerson(WorkerInfo workerInfo, String devSn) { + if (StrUtil.isNotBlank(devSn)) { + String[] splitArr = StringUtils.split(devSn, ","); + for (int i = 0; i < splitArr.length; i++) { + String ds = splitArr[i]; + Map map = new HashMap<>(); + map.put("operator", "DelPerson"); + map.put("messageId", "ID:" + System.currentTimeMillis() + ":" + workerInfo.getPersonSn()); + Map info = new HashMap<>(); + info.put("customId", workerInfo.getPersonSn()); + map.put("info", info); + String payload = JSON.toJSONString(map); + String topic = mqttTopic + ds; + log.info("发送主题信息:{},主题为:{}", payload, topic); + IMqttSender mqttSender = SpringContextUtils.getBean(IMqttSender.class); + mqttSender.sendToMqtt(topic, 2, payload); + } + } else { + log.error("未查询到设备sn"); + } + } + + private static Map build(WorkerInfo workerInfo) { + Map map = new HashMap<>(); + map.put("messageId", "ID:" + System.currentTimeMillis() + ":" + workerInfo.getPersonSn()); + map.put("operator", "EditPerson"); + Map info = new HashMap<>(); + info.put("customId", workerInfo.getPersonSn()); + info.put("name", workerInfo.getWorkerName()); + info.put("nation", 1); + info.put("gender", workerInfo.getSex() - 1); + info.put("birthday", workerInfo.getBirthday()); + info.put("address", workerInfo.getNowPlace()); + info.put("idCard", workerInfo.getIdCard()); + info.put("tempCardType", 0); + info.put("telnum1", workerInfo.getPhoneNumber()); + info.put("native", workerInfo.getNativePlace()); + info.put("personType", 0); + info.put("cardType", 0); + info.put("pic", basePath + "/" + workerInfo.getFieldAcquisitionUrl()); + map.put("info", info); + return map; + } +}