塔吊-人员考勤
This commit is contained in:
parent
263f7ef12d
commit
78b34e41a4
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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>
|
||||
@ -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);
|
||||
}
|
||||
@ -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())
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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>()
|
||||
|
||||
133
src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java
Normal file
133
src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java
Normal 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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user