1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package com.iailab.module.data.video.service.impl;
 
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.framework.common.constant.Constant;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.framework.web.core.util.WebFrameworkUtils;
import com.iailab.module.data.mq.consumer.ImageMessage;
import com.iailab.module.data.video.controller.admin.camera.vo.CameraPageReqVO;
import com.iailab.module.data.video.dahua.DHConfiguration;
import com.iailab.module.data.video.dahua.DHSavePath;
import com.iailab.module.data.video.dao.CameraDao;
import com.iailab.module.data.video.dao.ImageDao;
import com.iailab.module.data.video.dto.CameraDTO;
import com.iailab.module.data.video.dto.ImageDTO;
import com.iailab.module.data.video.entity.CameraEntity;
import com.iailab.module.data.video.entity.ImageEntity;
import com.iailab.module.data.video.service.CameraService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
 
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年02月27日
 */
@Service
public class CameraServiceImpl extends BaseServiceImpl<CameraDao, CameraEntity> implements CameraService {
 
    @Resource
    private CameraDao cameraDao;
 
    @Resource
    private ImageDao imageDao;
 
    @Resource
    private RabbitTemplate rabbitTemplate;
 
    @Override
    public PageResult<CameraDTO> getPage(CameraPageReqVO cameraPageReqVO) {
        PageResult<CameraEntity> pageResult = cameraDao.selectPage(cameraPageReqVO);
        return BeanUtils.toBean(pageResult, CameraDTO.class);
    }
 
    @Override
    public List<CameraDTO> list(@Valid CameraPageReqVO cameraPageReqVO) {
        QueryWrapper<CameraEntity> queryWrapper = getWrapper(cameraPageReqVO);
        queryWrapper.orderByDesc(Constant.CREATE_DATE);
        List<CameraEntity> list = baseDao.selectList(queryWrapper);
        return ConvertUtils.sourceToTarget(list, CameraDTO.class);
    }
 
    @Override
    public List<CameraDTO> apiCameraList(Map<String, Object> params) {
        return baseDao.apiCameraList();
    }
 
    @Override
    public List<CameraDTO> getByNVRId(String nvrId) {
        QueryWrapper<CameraEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("nvr_id", nvrId).orderByAsc("channel");
        List<CameraEntity> list = baseDao.selectList(queryWrapper);
        return ConvertUtils.sourceToTarget(list, CameraDTO.class);
    }
 
    @Override
    public CameraDTO get(String id) {
        CameraEntity entity = baseDao.selectById(id);
 
        return ConvertUtils.sourceToTarget(entity, CameraDTO.class);
    }
 
    @Override
    public CameraDTO getByCode(String code) {
        QueryWrapper<CameraEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("code", code);
        CameraEntity entity = baseDao.selectOne(wrapper);
 
        return ConvertUtils.sourceToTarget(entity, CameraDTO.class);
    }
 
    @Override
    @DSTransactional(rollbackFor = Exception.class)
    public void dealCapture(Map<String, String> params) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        Date captureDate = calendar.getTime();
        CameraDTO devCamera = getByCode(params.get("cmdSerial"));
        String strFileName = params.get("strFileName");
        String imagePath = strFileName.replace("\\", "/");
        String imageUrl = imagePath.replace(DHConfiguration.staticCapturePath, "");
        ImageEntity image = new ImageEntity();
        image.setCameraId(devCamera.getId());
        image.setImagePath(imagePath);
        image.setImageUrl("/Capture/" + imageUrl);
        image.setCreateDate(captureDate);
        imageDao.insert(image);
        //存入rabbitmq消息队列,等待模型处理
        sendRabbitMQMessage(image);
    }
 
    private QueryWrapper<CameraEntity> getWrapper(CameraPageReqVO cameraPageReqVO){
        String location = cameraPageReqVO.getLocation();
        QueryWrapper<CameraEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("type", cameraPageReqVO.getType());
        wrapper.like(StringUtils.isNotBlank(location), "location", location);
        return wrapper;
    }
 
    @Override
    public void save(CameraDTO dto) {
        CameraEntity entity = ConvertUtils.sourceToTarget(dto, CameraEntity.class);
        entity.setCreateDate(new Date());
        entity.setCreator(WebFrameworkUtils.getLoginUserId());
        insert(entity);
    }
 
    @Override
    public void update(CameraDTO dto) {
        CameraEntity entity = ConvertUtils.sourceToTarget(dto, CameraEntity.class);
        entity.setUpdateDate(new Date());
        entity.setUpdater(WebFrameworkUtils.getLoginUserId());
        updateById(entity);
    }
 
    @Override
    @DSTransactional(rollbackFor = Exception.class)
    public void delete(String[] ids) {
        baseDao.deleteBatchIds(Arrays.asList(ids));
    }
 
    @Override
    public Long cheack(CameraDTO dto) {
        String id = dto.getId();
        String code = dto.getCode();
        QueryWrapper<CameraEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.ne(StringUtils.isNotBlank(id), "id", id);
        queryWrapper.and(wrapper -> wrapper.eq("code", code));
        return baseDao.selectCount(queryWrapper);
    }
 
    // 发送rabbitMQ消息
    private void sendRabbitMQMessage(ImageEntity image) {
        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        ImageMessage imageMessage = new ImageMessage();
        imageMessage.setMessageId(image.getId());
        imageMessage.setCreateTime(createTime);
        imageMessage.setImageDTO(BeanUtils.toBean(image, ImageDTO.class));
        rabbitTemplate.convertAndSend(ImageMessage.EXCHANGE, ImageMessage.DAHUA_ROUTING_KEY, imageMessage);
        rabbitTemplate.convertAndSend(ImageMessage.EXCHANGE, ImageMessage.HIKVISION_ROUTING_KEY, imageMessage);
    }
 
}