记得上下班打卡 | git大法好,push需谨慎

Commit f126bb5d authored by jiangxiulong's avatar jiangxiulong

人体检测-redis

parent 5381b020
......@@ -26,6 +26,9 @@ public class KylinRedisConst {
public static final String ORDER_REFUND_BY_ORDER_ID = "kylin:order:refund:orderId:";
public static final String ORDER_REFUND = "kylin:order:refund:orderRefundsId:";
public static final String CAMERA_DEVICES = "kylin:cameraDevices:fieldId:";
public static final String CAMERA_DEVICES_PERSON_NUM = "kylin:cameraDevice:personNum:cameraId:";
public static final String BUY_NOTICE = "kylin:buyNotice";//购票须知
public static final String TICKET_EXPRESS_MODULE_P = "kylin:ticket:express_module:p:";//票种快递票模板关联vo [第三方非线上]
public static final String TICKET_EXPRESS_MODULE = "kylin:ticket:express_module:";//票种快递票模板关联vo [线上]
......
package com.liquidnet.service.kylin.dto.vo;
import com.liquidnet.service.kylin.entity.KylinCamera;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 人流量排队检测摄像头表
* </p>
*
* @author jiangxiulong
* @since 2022-01-11
*/
@Data
@ApiModel
public class KylinApiCameraDevicesVo implements Serializable {
@ApiModelProperty(value = "camera_id")
private String cameraId;
@ApiModelProperty(value = "场地ID")
private String fieldId;
@ApiModelProperty(value = "地点类型 1卫生间 2。。。")
private Integer siteType;
@ApiModelProperty(value = "设备状态 取值:on(在线),off(离线),failed(锁定),new(未注册)")
private String status;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createdAt;
@ApiModelProperty(value = "修改时间")
private LocalDateTime updatedAt;
@ApiModelProperty(value = "检测到的人数")
private Integer personNum;
private static final KylinApiCameraDevicesVo obj = new KylinApiCameraDevicesVo();
public static KylinApiCameraDevicesVo getNew() {
try {
return (KylinApiCameraDevicesVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinApiCameraDevicesVo();
}
}
public KylinApiCameraDevicesVo copy(KylinCamera source) {
KylinApiCameraDevicesVo kylinApiCameraDevicesVo = KylinApiCameraDevicesVo.getNew();
if (null == source) return null;
kylinApiCameraDevicesVo.setCameraId(source.getCameraId());
kylinApiCameraDevicesVo.setFieldId(source.getFieldId());
kylinApiCameraDevicesVo.setSiteType(source.getSiteType());
kylinApiCameraDevicesVo.setStatus(source.getStatus());
kylinApiCameraDevicesVo.setCreatedAt(source.getCreatedAt());
kylinApiCameraDevicesVo.setUpdatedAt(source.getUpdatedAt());
return kylinApiCameraDevicesVo;
}
}
......@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @author jiangxiulong
* @since 2022-01-10
*/
public interface IKylinCameraRecordService extends IService<KylinCameraRecord> {
public interface IKylinCameraRecordService {
}
package com.liquidnet.service.kylin.service;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.entity.KylinCamera;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 人流量排队检测摄像头表 服务类
......@@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @author jiangxiulong
* @since 2022-01-10
*/
public interface IKylinCameraService extends IService<KylinCamera> {
public interface IKylinCameraService {
List<KylinApiCameraDevicesVo> cameraList(String fieldId, Integer siteType);
}
package com.liquidnet.service.kylin.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.service.impl.KylinCameraServiceImpl;
import com.liquidnet.service.kylin.utils.ObjectUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 人流量排队检测摄像头表 前端控制器
......@@ -13,8 +26,32 @@ import org.springframework.web.bind.annotation.RestController;
* @author jiangxiulong
* @since 2022-01-10
*/
@Api(tags = "人体检测")
@RestController
@RequestMapping("/camera")
@Slf4j
public class KylinCameraController {
@Autowired
private KylinCameraServiceImpl cameraService;
@GetMapping("list")
@ApiOperation("场地摄像头列表")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "fieldId", value = "场地ID", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "siteType", value = "地点类型 1卫生间 2。。。"),
})
public ResponseDto<List<KylinApiCameraDevicesVo>> cameraList(
@RequestParam() String fieldId,
@RequestParam(defaultValue = "0") Integer siteType
) {
try {
List<KylinApiCameraDevicesVo> result = cameraService.cameraList(fieldId, siteType);
return ResponseDto.success(result);
} catch (Exception e) {
log.error("场地摄像头列表Error", e);
return ResponseDto.success(ObjectUtil.getKylinApiCameraDevicesVoArrayList());
}
}
}
......@@ -15,6 +15,6 @@ import org.springframework.stereotype.Service;
* @since 2022-01-10
*/
@Service
public class KylinCameraRecordServiceImpl extends ServiceImpl<KylinCameraRecordMapper, KylinCameraRecord> implements IKylinCameraRecordService {
public class KylinCameraRecordServiceImpl implements IKylinCameraRecordService {
}
package com.liquidnet.service.kylin.service.impl;
import com.liquidnet.service.kylin.entity.KylinCamera;
import com.liquidnet.service.kylin.mapper.KylinCameraMapper;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.service.IKylinCameraService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.kylin.utils.DataUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 人流量排队检测摄像头表 服务实现类
......@@ -15,6 +17,14 @@ import org.springframework.stereotype.Service;
* @since 2022-01-10
*/
@Service
public class KylinCameraServiceImpl extends ServiceImpl<KylinCameraMapper, KylinCamera> implements IKylinCameraService {
public class KylinCameraServiceImpl implements IKylinCameraService {
@Autowired
private DataUtils dataUtils;
@Override
public List<KylinApiCameraDevicesVo> cameraList(String fieldId, Integer siteType) {
List<KylinApiCameraDevicesVo> list = dataUtils.getCameraDevices(fieldId);
return list;
}
}
......@@ -7,6 +7,7 @@ import com.liquidnet.commons.lang.util.IPUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundPoundage;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundPoundageAll;
......@@ -851,4 +852,13 @@ public class DataUtils {
redisUtil.uLock(redisKey);
}
public List<KylinApiCameraDevicesVo> getCameraDevices(String fieldId) {
String redisKey = KylinRedisConst.CAMERA_DEVICES.concat(fieldId);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return ObjectUtil.getKylinApiCameraDevicesVoArrayList();
} else {
return (List<KylinApiCameraDevicesVo>) obj;
}
}
}
......@@ -2,6 +2,7 @@ package com.liquidnet.service.kylin.utils;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundPoundage;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
......@@ -30,6 +31,7 @@ public class ObjectUtil {
private static final ArrayList<AdamEntersVo> arrayListObject = new ArrayList<>();
private static final ArrayList<OrderRefundPoundage> orderRefundPoundageArrayList = new ArrayList<>();
private static final ArrayList<KylinOrderCoupons> kylinOrderCouponsArrayList = new ArrayList<>();
private static final ArrayList<KylinApiCameraDevicesVo> kylinApiCameraDevicesVoArrayList = new ArrayList<>();
public static ArrayList<KylinStationPerformanceVo> getKylinStationPerformanceVoArrayList() {
......@@ -91,4 +93,8 @@ public class ObjectUtil {
public static ArrayList<KylinOrderCoupons> getKylinOrderCouponsArrayList() {
return (ArrayList<KylinOrderCoupons>) kylinOrderCouponsArrayList.clone();
}
public static ArrayList<KylinApiCameraDevicesVo> getKylinApiCameraDevicesVoArrayList() {
return (ArrayList<KylinApiCameraDevicesVo>) kylinApiCameraDevicesVoArrayList.clone();
}
}
......@@ -20,11 +20,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.dto.vo.KylinCameraDevicesVo;
import com.liquidnet.service.kylin.entity.KylinCamera;
import com.liquidnet.service.kylin.entity.KylinCameraRecord;
import com.liquidnet.service.kylin.mapper.KylinCameraMapper;
import com.liquidnet.service.kylin.mapper.KylinCameraRecordMapper;
import com.liquidnet.service.platform.utils.DataUtils;
import com.liquidnet.service.platform.utils.ObjectUtil;
import com.liquidnet.service.platform.utils.ViapiFileUtilAdvance;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -37,7 +40,9 @@ import org.springframework.web.bind.annotation.*;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
......@@ -63,6 +68,9 @@ public class KylinCameraController {
@Autowired
private KylinCameraRecordMapper recordMapper;
@Autowired
private DataUtils dataUtils;
@PostMapping(value = "callBack", produces = "application/xml;charset=UTF-8")
@ApiOperation("截图回调")
public String callBack(
......@@ -109,6 +117,8 @@ public class KylinCameraController {
List<KylinCameraDevicesVo> kylinCameraDevicesVos = configure.readValue(JsonUtils.toJson(devices), new TypeReference<List<KylinCameraDevicesVo>>() {
});
// 删除的设备没处理 回调或者人工 或者delAll 删除的时候清掉人数
List<String> fieldIds = new ArrayList<>();
for (KylinCameraDevicesVo devicesVo : kylinCameraDevicesVos) {
String gbId = devicesVo.getGbId();
KylinCamera kylinCamera = cameraMapper.selectOne(
......@@ -120,6 +130,7 @@ public class KylinCameraController {
JsonNode jsonNode = JsonUtils.fromJson(devicesVo.getDescription(), JsonNode.class);
int siteType = jsonNode.get("siteType").asInt();
String fieldId = jsonNode.get("fieldId").asText();
fieldIds.add(fieldId);
camera.setSiteType(siteType);
camera.setFieldId(fieldId);
if (null == kylinCamera) {
......@@ -134,7 +145,20 @@ public class KylinCameraController {
Wrappers.lambdaUpdate(KylinCamera.class).eq(KylinCamera::getGbId, gbId)
);
}
}
List<String> fieldIdsNew = fieldIds.stream().distinct().collect(Collectors.toList());
for (String fieldId : fieldIdsNew) {
List<KylinCamera> cameraList = cameraMapper.selectList(
Wrappers.lambdaQuery(KylinCamera.class)
.eq(KylinCamera::getFieldId, fieldId)
);
ArrayList<KylinApiCameraDevicesVo> kylinApiCameraDevicesVoArrayList = ObjectUtil.getKylinApiCameraDevicesVoArrayList();
for (KylinCamera kylinCamera : cameraList) {
KylinApiCameraDevicesVo kylinApiCameraDevicesVo = KylinApiCameraDevicesVo.getNew().copy(kylinCamera);
kylinApiCameraDevicesVoArrayList.add(kylinApiCameraDevicesVo);
}
dataUtils.setCameraDevices(fieldId, kylinApiCameraDevicesVoArrayList);
}
return ResponseDto.success();
......@@ -153,7 +177,7 @@ public class KylinCameraController {
.eq(KylinCamera::getStatus, "on")
);
long startTime2 = System.currentTimeMillis();
log.info("人体识别-查询设备列表->耗时:{}",(startTime2 - startTime1)+"毫秒");
log.info("人体识别-查询设备列表->耗时:{}", (startTime2 - startTime1) + "毫秒");
if (!CollectionUtils.isEmpty(cameraList)) {
for (KylinCamera kylinCamera : cameraList) {
try {
......@@ -161,7 +185,7 @@ public class KylinCameraController {
ViapiFileUtilAdvance fileUtils = ViapiFileUtilAdvance.getInstance(accessKeyId, accessKeySecret, "cn-beijing");
String ossTempFileUrl = fileUtils.upload(inputStream);
long startTime3 = System.currentTimeMillis();
log.info("人体识别-upload->耗时:{}",(startTime3 - startTime2)+"毫秒");
log.info("人体识别-upload->耗时:{}", (startTime3 - startTime2) + "毫秒");
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
......@@ -169,19 +193,20 @@ public class KylinCameraController {
request.setImageURL(ossTempFileUrl);
DetectPedestrianResponse response = client.getAcsResponse(request);
long startTime4 = System.currentTimeMillis();
log.info("人体识别-client->耗时:{}",(startTime4 - startTime3)+"毫秒");
log.info("人体识别-client->耗时:{}", (startTime4 - startTime3) + "毫秒");
List<DetectPedestrianResponse.Data.Element> elementList = response.getData().getElements();
if (!CollectionUtils.isEmpty(elementList)) {
long count = elementList.stream().filter(r -> r.getScore() > 0.5).count();
KylinCameraRecord cameraRecord = KylinCameraRecord.getNew();
cameraRecord.setCameraRecordId(IDGenerator.nextSnowId());
cameraRecord.setCameraId(kylinCamera.getCameraId());
cameraRecord.setPersonNum((int) count);
recordMapper.insert(cameraRecord);
}
dataUtils.setCameraDevicePersonNum(kylinCamera.getCameraId(), count);
long startTime5 = System.currentTimeMillis();
log.info("人体识别-MapperInsert->耗时:{}",(startTime5 - startTime4)+"毫秒");
log.info("人体识别-MapperInsert->耗时:{}", (startTime5 - startTime4) + "毫秒");
} catch (Exception e) {
log.error("获取设备列表Exception:[msg={}, e={}]", e.getMessage(), e);
}
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.dto.vo.KylinTimePerformanceVo;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressRouteVo;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressVo;
......@@ -437,4 +438,14 @@ public class DataUtils {
return sweetAppletUsersVo;
}
}
public void setCameraDevices(String fieldId, ArrayList<KylinApiCameraDevicesVo> kylinApiCameraDevicesVoArrayList) {
String redisKey = KylinRedisConst.CAMERA_DEVICES.concat(fieldId);
redisDataSourceUtil.getRedisKylinUtil().set(redisKey, kylinApiCameraDevicesVoArrayList);
}
public void setCameraDevicePersonNum(String cameraId, long count) {
String redisKey = KylinRedisConst.CAMERA_DEVICES_PERSON_NUM.concat(cameraId);
redisDataSourceUtil.getRedisKylinUtil().set(redisKey, count);
}
}
......@@ -5,6 +5,7 @@ import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.candy.entity.CandyCommonCoupon;
import com.liquidnet.service.candy.entity.CandyCouponCode;
import com.liquidnet.service.candy.entity.CandyUserCoupon;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import com.mongodb.BasicDBObject;
......@@ -59,6 +60,7 @@ public class ObjectUtil {
private static final PagedResult<AdamDisposedVo> adamDisposedVoPagedResult = new PagedResult<>();
private static final PagedResult<AdamDisposedUserVo> adamDisposedUserVoPagedResult = new PagedResult<>();
private static final ArrayList<KylinOrderCoupons> kylinOrderCouponsArrayList = new ArrayList<>();
private static final ArrayList<KylinApiCameraDevicesVo> kylinApiCameraDevicesVoArrayList = new ArrayList<>();
public static ArrayList<AdamTagParentVo> getAdamTagParentVoArrayList() {
return (ArrayList<AdamTagParentVo>) adamTagParentVoArrayList.clone();
......@@ -119,4 +121,8 @@ public class ObjectUtil {
public static ArrayList<KylinOrderCoupons> getKylinOrderCouponsArrayList() {
return (ArrayList<KylinOrderCoupons>) kylinOrderCouponsArrayList.clone();
}
public static ArrayList<KylinApiCameraDevicesVo> getKylinApiCameraDevicesVoArrayList() {
return (ArrayList<KylinApiCameraDevicesVo>) kylinApiCameraDevicesVoArrayList.clone();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment