塔吊-人员考勤

This commit is contained in:
guo 2024-03-08 19:15:47 +08:00
parent 263f7ef12d
commit 78b34e41a4
10 changed files with 638 additions and 10 deletions

View File

@ -0,0 +1,161 @@
package com.zhgd.xmgl.modules.bigdevice.controller;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance;
import com.zhgd.xmgl.modules.bigdevice.service.ITowerWorkerAttendanceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiImplicitParams;
import java.util.HashMap;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import org.apache.commons.collections.MapUtils;
import org.simpleframework.xml.core.Validate;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
/**
* @Title: Controller
* @Description: 塔吊-人员考勤
* @author pds
* @date 2024-03-08
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/towerWorkerAttendance")
@Slf4j
@Api(tags = "塔吊-人员考勤相关Api")
public class TowerWorkerAttendanceController {
@Autowired
private ITowerWorkerAttendanceService towerWorkerAttendanceService;
/**
* 分页列表查询
*
* @return
*/
@ApiOperation(value = "分页列表查询塔吊-人员考勤信息", notes = "分页列表查询塔吊-人员考勤信息", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"),
})
@GetMapping(value = "/page")
public Result<IPage<TowerWorkerAttendance>> queryPageList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {
return Result.success(towerWorkerAttendanceService.queryPageList(paramMap));
}
/**
* 列表查询
*
* @return
*/
@ApiOperation(value = "列表查询塔吊-人员考勤信息", notes = "列表查询塔吊-人员考勤信息", httpMethod = "GET")
@GetMapping(value = "/list")
public Result<List<TowerWorkerAttendance>> queryList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {
return Result.success(towerWorkerAttendanceService.queryList(paramMap));
}
/**
* 添加
*
* @param towerWorkerAttendance
* @return
*/
@ApiOperation(value = "添加塔吊-人员考勤信息", notes = "添加塔吊-人员考勤信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<TowerWorkerAttendance> add(@RequestBody @Validate TowerWorkerAttendance towerWorkerAttendance) {
towerWorkerAttendanceService.add(towerWorkerAttendance);
return Result.ok();
}
/**
* 编辑
*
* @param towerWorkerAttendance
* @return
*/
@ApiOperation(value = "编辑塔吊-人员考勤信息", notes = "编辑塔吊-人员考勤信息", httpMethod = "POST")
@PostMapping(value = "/edit")
public Result<TowerWorkerAttendance> edit(@RequestBody TowerWorkerAttendance towerWorkerAttendance) {
towerWorkerAttendanceService.edit(towerWorkerAttendance);
return Result.ok();
}
/**
* 通过id删除
*
* @return
*/
@ApiOperation(value = "删除塔吊-人员考勤信息", notes = "删除塔吊-人员考勤信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "塔吊-人员考勤ID", paramType = "body", required = true, dataType = "String", example = "{\"id\":\"1\"}")
@PostMapping(value = "/delete")
public Result<TowerWorkerAttendance> delete(@ApiIgnore @RequestBody HashMap<String, Object> map) {
String id = MapUtils.getString(map, "id");
Result<TowerWorkerAttendance> result = new Result<TowerWorkerAttendance>();
TowerWorkerAttendance towerWorkerAttendance = towerWorkerAttendanceService.getById(id);
if (towerWorkerAttendance == null) {
result.error500("未找到对应实体");
} else {
boolean ok = towerWorkerAttendanceService.removeById(id);
if (ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 通过id查询
*
* @param id
* @return
*/
@ApiOperation(value = "通过id查询塔吊-人员考勤信息", notes = "通过id查询塔吊-人员考勤信息", httpMethod = "GET")
@ApiImplicitParam(name = "id", value = "塔吊-人员考勤ID", paramType = "query", required = true, dataType = "Integer")
@GetMapping(value = "/queryById")
public Result<TowerWorkerAttendance> queryById(@RequestParam(name = "id", required = true) String id) {
Result<TowerWorkerAttendance> result = new Result<TowerWorkerAttendance>();
TowerWorkerAttendance towerWorkerAttendance = towerWorkerAttendanceService.getById(id);
if (towerWorkerAttendance == null) {
result.error500("未找到对应实体");
} else {
result.setResult(towerWorkerAttendance);
result.setSuccess(true);
}
return result;
}
}

View File

@ -0,0 +1,105 @@
package com.zhgd.xmgl.modules.bigdevice.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 pds
* @date 2024-03-08
* @version V1.0
*/
@Data
@TableName("tower_worker_attendance")
@ApiModel(value = "TowerWorkerAttendance实体类", description = "TowerWorkerAttendance")
public class TowerWorkerAttendance implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private java.lang.Long id;
/**
* 塔吊设备sn
*/
@Excel(name = "塔吊设备sn", width = 15)
@ApiModelProperty(value = "塔吊设备sn")
private java.lang.String towerDevSn;
/**
* 识别类型
*/
@Excel(name = "识别类型", width = 15)
@ApiModelProperty(value = "识别类型")
private java.lang.String recognitionType;
/**
* 匹配百分比
*/
@Excel(name = "匹配百分比", width = 15)
@ApiModelProperty(value = "匹配百分比")
private java.lang.String recgRercentage;
/**
* 驾驶员id
*/
@Excel(name = "驾驶员id", width = 15)
@ApiModelProperty(value = "驾驶员id")
private java.lang.String driverId;
/**
* 驾驶员名称
*/
@Excel(name = "驾驶员名称", width = 15)
@ApiModelProperty(value = "驾驶员名称")
private java.lang.String driverName;
/**
* 驾驶员身份证号码
*/
@Excel(name = "驾驶员身份证号码", width = 15)
@ApiModelProperty(value = "驾驶员身份证号码")
private java.lang.String idCardNo;
/**
* 考勤时间
*/
@Excel(name = "考勤时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "考勤时间")
private java.util.Date systemTime;
/**
* 创建时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "创建时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**
* 更新时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "更新时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**
* 项目sn
*/
@Excel(name = "项目sn", width = 15)
@ApiModelProperty(value = "项目sn")
private java.lang.String projectSn;
@TableField(exist = false)
@ApiModelProperty(value = "塔吊名称")
private String towerName;
}

View File

@ -0,0 +1,37 @@
package com.zhgd.xmgl.modules.bigdevice.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance;
import com.zhgd.xmgl.modules.bigdevice.entity.vo.DriverVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 塔吊-人员考勤
* @author pds
* @date 2024-03-08
* @version V1.0
*/
@Mapper
public interface TowerWorkerAttendanceMapper extends BaseMapper<TowerWorkerAttendance> {
List<TowerWorkerAttendance> queryList(@Param(Constants.WRAPPER) QueryWrapper<TowerWorkerAttendance> queryWrapper);
IPage<TowerWorkerAttendance> queryList(Page<TowerWorkerAttendance> page, @Param(Constants.WRAPPER) QueryWrapper<TowerWorkerAttendance> queryWrapper);
TowerWorkerAttendance getNewestOne(String devSn);
/**
* 获取当前司机信息
*
* @param devSn
* @return
*/
DriverVO getNewestWorkerInfo(String devSn);
}

View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhgd.xmgl.modules.bigdevice.mapper.TowerWorkerAttendanceMapper">
<select id="queryList" resultType="com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance">
select
twa.id,
twa.tower_dev_sn,
twa.recognition_type,
twa.recg_rercentage,
twa.driver_id,
wi.worker_name driverName,
wi.id_card idCardNo,
twa.system_time,
twa.create_time,
twa.update_time,
twa.project_sn,
t.dev_name as towerName
from tower_worker_attendance twa
join tower t on twa.project_sn = t.project_sn and twa.tower_dev_sn=t.dev_sn
join worker_info wi on wi.id_card = twa.id_card_no
${ew.customSqlSegment}
</select>
<select id="getNewestOne" resultType="com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance">
select *
from tower_worker_attendance
where tower_dev_sn=#{devSn}
order by system_time desc
limit 1
</select>
<select id="getNewestWorkerInfo" resultType="com.zhgd.xmgl.modules.bigdevice.entity.vo.DriverVO">
select wi.worker_name,
wi.phone_number,
(SELECT certificate_number
FROM `worker_certificate`
WHERE worker_id = wi.id
AND certificate_type = 98
ORDER BY effect_time DESC
LIMIT 1) special_certificate_number,
wi.field_acquisition_url as imageUrl,
wi.sex,
TIMESTAMPDIFF(YEAR, wi.birthday, CURDATE()) as age,
(select IFNULL(a.work_time, 0) continuous_working_time
from tower_work_cycle a
where a.dev_sn = twa.tower_dev_sn
order by a.add_time desc
limit 1) continuous_working_time,
wi.id_card,
wi.add_time
from tower_worker_attendance twa
join worker_info wi on twa.project_sn = wi.project_sn and twa.id_card_no=wi.id_card
where twa.tower_dev_sn=#{devSn}
order by twa.system_time desc
limit 1
</select>
</mapper>

View File

@ -0,0 +1,25 @@
package com.zhgd.xmgl.modules.bigdevice.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance;
import java.util.HashMap;
import java.util.List;
/**
* @Description: 塔吊-人员考勤
* @author pds
* @date 2024-03-08
* @version V1.0
*/
public interface ITowerWorkerAttendanceService extends IService<TowerWorkerAttendance> {
IPage<TowerWorkerAttendance> queryPageList(HashMap<String, Object> paramMap);
List<TowerWorkerAttendance> queryList(HashMap<String, Object> paramMap);
void add(TowerWorkerAttendance towerWorkerAttendance);
void edit(TowerWorkerAttendance towerWorkerAttendance);
}

View File

@ -36,6 +36,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.sql.Struct;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -53,6 +54,8 @@ public class TowerServiceImpl extends ServiceImpl<TowerMapper, Tower> implements
@Autowired
private TowerMapper towerMapper;
@Autowired
private TowerWorkerAttendanceMapper towerWorkerAttendanceMapper;
@Autowired
private BigDeviceDriverRecordMapper bigDeviceDriverRecordMapper;
@Autowired
private BigDeviceVideoMapper bigDeviceVideoMapper;
@ -257,6 +260,9 @@ public class TowerServiceImpl extends ServiceImpl<TowerMapper, Tower> implements
List<EntityMap> videoList = bigDeviceVideoMapper.selectTowerVideoList(map);
List<EntityMap> driverList = bigDeviceDriverRecordMapper.selectTowerDriverList(map);
DriverVO driverVO = towerWorkCycleMapper.getCurrentDriver(map);
if (driverVO == null) {
driverVO = towerWorkerAttendanceMapper.getNewestWorkerInfo(tower.getDevSn());
}
TowerBySnVo vo = new TowerBySnVo();
vo.setVideoList(videoList);
vo.setDriverList(driverList);
@ -501,19 +507,25 @@ public class TowerServiceImpl extends ServiceImpl<TowerMapper, Tower> implements
log.info("getRelatedInfo塔吊实时数据信息{}", newData);
List<DriverVO> driverList = tower.getDriverList().stream().map(driver -> {
DriverVO driverVO = new DriverVO();
driverVO.setWorkerName(driver.getDriverName());
driverVO.setPhoneNumber(driver.getDriverPhone());
driverVO.setSpecialCertificateNumber(driver.getCertificateNumber());
driverVO.setImageUrl(driver.getImageUrl());
driverVO.setSex(driver.getSex());
driverVO.setAge(driver.getAge());
driverVO.setContinuousWorkingTime(driver.getContinuousWorkingTime());
driverVO.setContinuousWorkingTimeName(TimeUtil.toHourMinSecond(driver.getContinuousWorkingTime()));
driverVO.setIdCard(driver.getDriverIdCard());
String driverName = driver.getDriverName();
if (StrUtil.isNotBlank(driverName)) {
driverVO.setWorkerName(driverName);
driverVO.setPhoneNumber(driver.getDriverPhone());
driverVO.setSpecialCertificateNumber(driver.getCertificateNumber());
driverVO.setImageUrl(driver.getImageUrl());
driverVO.setSex(driver.getSex());
driverVO.setAge(driver.getAge());
driverVO.setContinuousWorkingTime(driver.getContinuousWorkingTime());
driverVO.setContinuousWorkingTimeName(TimeUtil.toHourMinSecond(driver.getContinuousWorkingTime()));
driverVO.setIdCard(driver.getDriverIdCard());
} else {
//从塔吊-人员考勤里面获取人员信息
driverVO = towerWorkerAttendanceMapper.getNewestWorkerInfo(driver.getDevSn());
driverVO.setContinuousWorkingTimeName(TimeUtil.toHourMinSecond(driver.getContinuousWorkingTime()));
}
return driverVO;
}).collect(Collectors.toList());
DevWorkerVO devWorker = new DevWorkerVO(tower.getDevName(), tower.getDevSn(), tower.getRegistNo(), tower.getFactoryName(), null, driverList, null);
// double towerHeight = (tower.getTowerHeight() == null ? 0 : tower.getTowerHeight()) + (tower.getReferenceHeight() == null ? 0 : tower.getReferenceHeight());
TowerDataInfoDTO towerDataInfo = new TowerDataInfoDTO().setForearmLength(tower.getForearmLength()).setTowerHeight(tower.getTowerHeight());
if (newData != null) {
towerDataInfo.setLoading(newData.getLoading()).setRanger(newData.getRanger()).setCurrentHeight(newData.getHeight())

View File

@ -0,0 +1,69 @@
package com.zhgd.xmgl.modules.bigdevice.service.impl;
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance;
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerWorkerAttendanceMapper;
import com.zhgd.xmgl.modules.bigdevice.service.ITowerWorkerAttendanceService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.util.PageUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.HashMap;
import java.util.List;
import com.zhgd.xmgl.util.RefUtil;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: 塔吊-人员考勤
* @author pds
* @date 2024-03-08
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class TowerWorkerAttendanceServiceImpl extends ServiceImpl<TowerWorkerAttendanceMapper, TowerWorkerAttendance> implements ITowerWorkerAttendanceService {
@Autowired
private TowerWorkerAttendanceMapper towerWorkerAttendanceMapper;
@Override
public IPage<TowerWorkerAttendance> queryPageList(HashMap<String, Object> paramMap) {
QueryWrapper<TowerWorkerAttendance> queryWrapper = getQueryWrapper(paramMap);
Page<TowerWorkerAttendance> page = PageUtil.getPage(paramMap);
IPage<TowerWorkerAttendance> pageList = baseMapper.queryList(page, queryWrapper);
pageList.setRecords(dealList(pageList.getRecords()));
return pageList;
}
@Override
public List<TowerWorkerAttendance> queryList(HashMap<String, Object> paramMap) {
QueryWrapper<TowerWorkerAttendance> queryWrapper = getQueryWrapper(paramMap);
return dealList(baseMapper.queryList(queryWrapper));
}
private QueryWrapper<TowerWorkerAttendance> getQueryWrapper(HashMap<String, Object> paramMap) {
String alias = "twa.";
QueryWrapper<TowerWorkerAttendance> queryWrapper = QueryGenerator.initPageQueryWrapper(TowerWorkerAttendance.class, paramMap, alias);
queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(TowerWorkerAttendance::getId));
return queryWrapper;
}
private List<TowerWorkerAttendance> dealList(List<TowerWorkerAttendance> list) {
return list;
}
@Override
public void add(TowerWorkerAttendance towerWorkerAttendance) {
towerWorkerAttendance.setId(null);
baseMapper.insert(towerWorkerAttendance);
}
@Override
public void edit(TowerWorkerAttendance towerWorkerAttendance) {
baseMapper.updateById(towerWorkerAttendance);
}
}

View File

@ -26,6 +26,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.text.DecimalFormat;
@ -42,6 +44,7 @@ import java.util.stream.Collectors;
**/
@Slf4j
@Component
@RestController("/xmgl/task")
public class EnvironmentDevTask {
@Autowired
private EnvironmentDevMapper environmentDevMapper;
@ -134,6 +137,7 @@ public class EnvironmentDevTask {
*/
@SchedulerLock(name = "getEnvironmentDustData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("dustData")
public void getEnvironmentDustData() {
log.info("获取扬尘数据(携稳)开始任务");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()

View File

@ -0,0 +1,133 @@
package com.zhgd.xmgl.task;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gexin.fastjson.JSON;
import com.zhgd.xmgl.modules.bigdevice.entity.Tower;
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance;
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerMapper;
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerWorkerAttendanceMapper;
import com.zhgd.xmgl.modules.environment.entity.DustNoiseData;
import com.zhgd.xmgl.modules.environment.mapper.DustNoiseDataMapper;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.task.dto.EnvironmentDustDataDto;
import com.zhgd.xmgl.task.dto.TowerWorkerAttendanceDataDto;
import com.zhgd.xmgl.util.WindDirectionUtils;
import com.zhgd.xmgl.util.XiwonUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
* @program: wisdomSite
* @description: 塔吊-人员考勤
* @author: Mr.Peng
* @create: 2021-07-12 13:41
**/
@Slf4j
@Component
@RestController
@RequestMapping(("/xmgl/task"))
public class TowerWorkerAttendanceTask {
@Autowired
private TowerMapper towerMapper;
@Autowired
private DustNoiseDataMapper dustNoiseDataMapper;
@Autowired
private ProjectMapper projectMapper;
@Autowired
private TowerWorkerAttendanceMapper towerWorkerAttendanceMapper;
@Resource
private XiwonUtil xiwonUtil;
/**
* 获取塔吊-人员考勤数据(携稳) 每5分钟触发任务
*/
@SchedulerLock(name = "getTowerWorkerAttendanceData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("getTowerWorkerAttendanceData")
public void getTowerWorkerAttendanceData() {
log.info("获取塔吊-人员考勤数据(携稳)开始任务");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.isNotNull(Project::getXiwonAppId)
.isNotNull(Project::getXiwonAppSecret)
);
for (Project project : projects) {
// 获取设备列表
List<Tower> devList = towerMapper.selectList(new LambdaQueryWrapper<Tower>()
.eq(Tower::getProjectSn, project.getProjectSn()));
devList.forEach(dev -> CompletableFuture.runAsync(() -> {
doGetTowerWorkerAttendanceData(dev, project);
}).exceptionally(throwable -> {
log.error("err", throwable);
return null;
})
);
}
}
private void doGetTowerWorkerAttendanceData(Tower dev, Project project) {
// 设备sn
String devSn = dev.getDevSn();
log.info("doGetTowerWorkerAttendanceData设备sn{}", devSn);
TowerWorkerAttendance newestData = towerWorkerAttendanceMapper.getNewestOne(dev.getDevSn());
// 请求参数
Map<String, Object> map = new HashMap<>(4);
map.put("pageSize", "10");
map.put("pageNum", "1");
JSONObject realTimeData = xiwonUtil.postForm("/tower/attendance", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> {
map.put("deviceSn", devSn);
if (newestData != null && newestData.getSystemTime() != null) {
map.put("startTime", DateUtil.formatDateTime(newestData.getSystemTime()));
}
map.put("endTime", DateUtil.formatDateTime(new Date()));
return map;
}));
log.info("携稳接口响应数据(塔吊-人员考勤devSn:{}rs:{}", devSn, JSON.toJSONString(realTimeData));
Integer code = realTimeData.getInteger("code");
// code校验是否成功请求
if (code == HttpStatus.OK.value()) {
JSONArray dataArray = realTimeData.getJSONArray("data");
if (CollUtil.isNotEmpty(dataArray)) {
// 解析请求到的参数保存到我们的数据库
for (Object o : dataArray) {
TowerWorkerAttendanceDataDto dto = BeanUtil.toBean(o, TowerWorkerAttendanceDataDto.class);
TowerWorkerAttendance data = new TowerWorkerAttendance();
data.setTowerDevSn(devSn);
data.setRecognitionType(dto.getRecognitionType());
data.setRecgRercentage(Convert.toStr(dto.getRecgRercentage()));
data.setDriverId(dto.getDriverId());
data.setDriverName(dto.getDriverName());
data.setIdCardNo(dto.getIdCardNo());
data.setSystemTime(DateUtil.parse(dto.getSystemTime()));
data.setProjectSn(dev.getProjectSn());
towerWorkerAttendanceMapper.insert(data);
}
} else {
log.info("设备sn{},当前无数据!", devSn);
}
} else {
log.error("设备sn{}请求失败当前code{}msg{}", devSn, code, realTimeData.getString("msg"));
}
}
}

View File

@ -0,0 +1,25 @@
package com.zhgd.xmgl.task.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class TowerWorkerAttendanceDataDto {
@JsonProperty("blackBoxId")
private String blackBoxId;
@JsonProperty("towerCraneId")
private Long towerCraneId;
@JsonProperty("recognitionType")
private String recognitionType;
@JsonProperty("recgRercentage")
private Long recgRercentage;
@JsonProperty("driverId")
private String driverId;
@JsonProperty("driverName")
private String driverName;
@JsonProperty("idCardNo")
private String idCardNo;
@JsonProperty("systemTime")
private String systemTime;
}