From 78b34e41a43b3e2d0daccd013dbd03d75a2583de Mon Sep 17 00:00:00 2001 From: guo Date: Fri, 8 Mar 2024 19:15:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A1=94=E5=90=8A-=E4=BA=BA=E5=91=98=E8=80=83?= =?UTF-8?q?=E5=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TowerWorkerAttendanceController.java | 161 ++++++++++++++++++ .../entity/TowerWorkerAttendance.java | 105 ++++++++++++ .../mapper/TowerWorkerAttendanceMapper.java | 37 ++++ .../xml/TowerWorkerAttendanceMapper.xml | 57 +++++++ .../ITowerWorkerAttendanceService.java | 25 +++ .../service/impl/TowerServiceImpl.java | 32 ++-- .../TowerWorkerAttendanceServiceImpl.java | 69 ++++++++ .../zhgd/xmgl/task/EnvironmentDevTask.java | 4 + .../xmgl/task/TowerWorkerAttendanceTask.java | 133 +++++++++++++++ .../dto/TowerWorkerAttendanceDataDto.java | 25 +++ 10 files changed, 638 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/zhgd/xmgl/modules/bigdevice/controller/TowerWorkerAttendanceController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/bigdevice/entity/TowerWorkerAttendance.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/TowerWorkerAttendanceMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/xml/TowerWorkerAttendanceMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/bigdevice/service/ITowerWorkerAttendanceService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerWorkerAttendanceServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java create mode 100644 src/main/java/com/zhgd/xmgl/task/dto/TowerWorkerAttendanceDataDto.java diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/controller/TowerWorkerAttendanceController.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/controller/TowerWorkerAttendanceController.java new file mode 100644 index 000000000..c5d6f9411 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/controller/TowerWorkerAttendanceController.java @@ -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> queryPageList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(towerWorkerAttendanceService.queryPageList(paramMap)); + } + + /** + * 列表查询 + * + * @return + */ + @ApiOperation(value = "列表查询塔吊-人员考勤信息", notes = "列表查询塔吊-人员考勤信息", httpMethod = "GET") + @GetMapping(value = "/list") + public Result> queryList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(towerWorkerAttendanceService.queryList(paramMap)); + } + + /** + * 添加 + * + * @param towerWorkerAttendance + * @return + */ + @ApiOperation(value = "添加塔吊-人员考勤信息", notes = "添加塔吊-人员考勤信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody @Validate TowerWorkerAttendance towerWorkerAttendance) { + towerWorkerAttendanceService.add(towerWorkerAttendance); + return Result.ok(); + } + + /** + * 编辑 + * + * @param towerWorkerAttendance + * @return + */ + @ApiOperation(value = "编辑塔吊-人员考勤信息", notes = "编辑塔吊-人员考勤信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result 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 delete(@ApiIgnore @RequestBody HashMap map) { + String id = MapUtils.getString(map, "id"); + Result result = new Result(); + 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 queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + TowerWorkerAttendance towerWorkerAttendance = towerWorkerAttendanceService.getById(id); + if (towerWorkerAttendance == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(towerWorkerAttendance); + result.setSuccess(true); + } + return result; + } + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/entity/TowerWorkerAttendance.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/entity/TowerWorkerAttendance.java new file mode 100644 index 000000000..522fe11c1 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/entity/TowerWorkerAttendance.java @@ -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; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/TowerWorkerAttendanceMapper.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/TowerWorkerAttendanceMapper.java new file mode 100644 index 000000000..54f40b686 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/TowerWorkerAttendanceMapper.java @@ -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 { + + List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + IPage queryList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + TowerWorkerAttendance getNewestOne(String devSn); + + /** + * 获取当前司机信息 + * + * @param devSn + * @return + */ + DriverVO getNewestWorkerInfo(String devSn); +} diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/xml/TowerWorkerAttendanceMapper.xml b/src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/xml/TowerWorkerAttendanceMapper.xml new file mode 100644 index 000000000..0a43bdf20 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/mapper/xml/TowerWorkerAttendanceMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/ITowerWorkerAttendanceService.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/ITowerWorkerAttendanceService.java new file mode 100644 index 000000000..1543738aa --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/ITowerWorkerAttendanceService.java @@ -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 { + + IPage queryPageList(HashMap paramMap); + + List queryList(HashMap paramMap); + + void add(TowerWorkerAttendance towerWorkerAttendance); + + void edit(TowerWorkerAttendance towerWorkerAttendance); +} diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerServiceImpl.java index d6c0f712a..fa8f5312e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerServiceImpl.java @@ -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 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 implements List videoList = bigDeviceVideoMapper.selectTowerVideoList(map); List 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 implements log.info("getRelatedInfo塔吊实时数据信息:{}", newData); List 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()) diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerWorkerAttendanceServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerWorkerAttendanceServiceImpl.java new file mode 100644 index 000000000..11a03679a --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TowerWorkerAttendanceServiceImpl.java @@ -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 implements ITowerWorkerAttendanceService { + @Autowired + private TowerWorkerAttendanceMapper towerWorkerAttendanceMapper; + + @Override + public IPage queryPageList(HashMap paramMap) { + QueryWrapper queryWrapper = getQueryWrapper(paramMap); + Page page = PageUtil.getPage(paramMap); + IPage pageList = baseMapper.queryList(page, queryWrapper); + pageList.setRecords(dealList(pageList.getRecords())); + return pageList; + } + + @Override + public List queryList(HashMap paramMap) { + QueryWrapper queryWrapper = getQueryWrapper(paramMap); + return dealList(baseMapper.queryList(queryWrapper)); + } + + private QueryWrapper getQueryWrapper(HashMap paramMap) { + String alias = "twa."; + QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(TowerWorkerAttendance.class, paramMap, alias); + queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(TowerWorkerAttendance::getId)); + return queryWrapper; + } + + private List dealList(List list) { + return list; + } + + @Override + public void add(TowerWorkerAttendance towerWorkerAttendance) { + towerWorkerAttendance.setId(null); + baseMapper.insert(towerWorkerAttendance); + } + + @Override + public void edit(TowerWorkerAttendance towerWorkerAttendance) { + baseMapper.updateById(towerWorkerAttendance); + } +} diff --git a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java index 782ea29b5..1a0217bee 100644 --- a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java +++ b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java @@ -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 projects = projectMapper.selectList(new LambdaQueryWrapper() diff --git a/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java b/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java new file mode 100644 index 000000000..7d7c0ed91 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java @@ -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 projects = projectMapper.selectList(new LambdaQueryWrapper() + .isNotNull(Project::getXiwonAppId) + .isNotNull(Project::getXiwonAppSecret) + ); + for (Project project : projects) { + // 获取设备列表 + List devList = towerMapper.selectList(new LambdaQueryWrapper() + .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 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")); + } + } +} diff --git a/src/main/java/com/zhgd/xmgl/task/dto/TowerWorkerAttendanceDataDto.java b/src/main/java/com/zhgd/xmgl/task/dto/TowerWorkerAttendanceDataDto.java new file mode 100644 index 000000000..aa8eb9e03 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/dto/TowerWorkerAttendanceDataDto.java @@ -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; + +}