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

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.PoliceCameraGroup;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig; 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.GroupTreeWithDevVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo; 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;
@ -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.annotation.DataScope;
import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; 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.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo; import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -85,4 +86,6 @@ public interface PoliceCameraItemMapper extends BaseMapper<PoliceCameraItem> {
* @return * @return
*/ */
List<Long> getCameraItemIdListByTicketId(String ticketId); 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 join work_ticket_camera_rel wtcr on wt.id = wtcr.work_ticket_id
where wt.id = #{ticketId} where wt.id = #{ticketId}
</select> </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> </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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; 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.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo;
import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo; 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); VideoItemInfoVo getVideoItemInfo(Map<String, Object> map);
List<PoliceCameraItem> getListByProjectSn(String projectSn); 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.PoliceCameraVideoConfig;
import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig; import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig;
import com.zhgd.xmgl.modules.policecamera.entity.WorkTicketCameraRel; 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.PoliceCameraItemVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo;
import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo.VideoInfo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo.VideoInfo;
@ -350,4 +351,15 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl<PoliceCameraItemMap
.eq(PoliceCameraItem::getProjectSn, projectSn)); .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 paramMap
* @param dateMap * @param dateMap
* @param instanceSupplier * @param instanceSupplier
* @param <T> * @param <T> 类要实现DateAware
* @return * @return
*/ */
public static <T extends DateAware> List<T> fillDateByStartEndDate( public static <T extends DateAware> List<T> fillDateByStartEndDate(