统计执法记录仪每日工作时长

This commit is contained in:
guoshengxiong 2025-11-07 16:12:23 +08:00
parent 5341bb4d94
commit 38342059c9
7 changed files with 74 additions and 1 deletions

View File

@ -17,6 +17,7 @@ import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraGroup;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig;
import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.GroupTreeWithDevVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo;
@ -416,4 +417,15 @@ public class PoliceCameraItemController {
}
}
@ApiOperation(value = "统计执法记录仪每日工作时长", notes = "统计执法记录仪每日工作时长", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "itemId", value = "执法记录仪id", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "startDate", value = "开始日期yyyy-MM-dd", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "endDate", value = "结束日期yyyy-MM-dd", paramType = "body", required = true, dataType = "String"),
})
@PostMapping("/countWorkingHours")
public Result<List<CountWorkingHoursVo>> countWorkingHours(@RequestBody Map<String, Object> map) {
return Result.success(policeCameraItemService.countWorkingHours(map));
}
}

View File

@ -0,0 +1,21 @@
package com.zhgd.xmgl.modules.policecamera.entity.vo;
import com.zhgd.xmgl.util.DateUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CountWorkingHoursVo implements DateUtils.DateAware {
@ApiModelProperty(value = "工作时长中文显示")
private String workingTimeName;
/**
*日期
*/
@ApiModelProperty("日期")
private String date;
/**
* 文件时长
*/
@ApiModelProperty(value = "文件时长")
private java.lang.Integer duration;
}

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.annotation.DataScope;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo;
import org.apache.ibatis.annotations.Mapper;
@ -85,4 +86,6 @@ public interface PoliceCameraItemMapper extends BaseMapper<PoliceCameraItem> {
* @return
*/
List<Long> getCameraItemIdListByTicketId(String ticketId);
List<CountWorkingHoursVo> countWorkingHours(Map<String, Object> map);
}

View File

@ -88,4 +88,26 @@
join work_ticket_camera_rel wtcr on wt.id = wtcr.work_ticket_id
where wt.id = #{ticketId}
</select>
<select id="countWorkingHours" resultType="com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo">
select
date_format(pcif.upload_time, '%Y-%m-%d') date
,ifnull(round(sum(pcif.duration),2),0) duration
from police_camera_item pci
join police_camera_item_file pcif on pci.item_id = pcif.item_id
where 1=1
<if test="projectSn != null and projectSn != ''">
and pci.project_sn = #{projectSn}
</if>
<if test="itemId != null and itemId != ''">
and pci.item_id = #{itemId}
</if>
<if test="startDate != null and startDate != ''">
and pcif.upload_time >= #{startDate}
</if>
<if test="endDate != null and endDate != ''">
and pcif.upload_time <![CDATA[<=]]> concat(#{endDate},' 23:59:59')
</if>
group by date
</select>
</mapper>

View File

@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.policecamera.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo;
import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo;
@ -102,4 +103,6 @@ public interface IPoliceCameraItemService extends IService<PoliceCameraItem> {
VideoItemInfoVo getVideoItemInfo(Map<String, Object> map);
List<PoliceCameraItem> getListByProjectSn(String projectSn);
List<CountWorkingHoursVo> countWorkingHours(Map<String, Object> map);
}

View File

@ -22,6 +22,7 @@ import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraVideoConfig;
import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig;
import com.zhgd.xmgl.modules.policecamera.entity.WorkTicketCameraRel;
import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo.VideoInfo;
@ -350,4 +351,15 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl<PoliceCameraItemMap
.eq(PoliceCameraItem::getProjectSn, projectSn));
}
@Override
public List<CountWorkingHoursVo> countWorkingHours(Map<String, Object> map) {
List<CountWorkingHoursVo> hoursVos = baseMapper.countWorkingHours(map);
for (CountWorkingHoursVo hoursVo : hoursVos) {
hoursVo.setWorkingTimeName(TimeUtil.toHourMinSecond(hoursVo.getDuration()));
}
Map<String, CountWorkingHoursVo> hoursVoMap = hoursVos.stream().collect(Collectors.toMap(CountWorkingHoursVo::getDate, Function.identity(), (o1, o2) -> o1));
hoursVos = DateUtils.fillDateByStartEndDate(map, hoursVoMap, CountWorkingHoursVo::new);
return hoursVos;
}
}

View File

@ -791,7 +791,7 @@ public class DateUtils {
* @param paramMap
* @param dateMap
* @param instanceSupplier
* @param <T>
* @param <T> 类要实现DateAware
* @return
*/
public static <T extends DateAware> List<T> fillDateByStartEndDate(