Commit b663562e authored by 赵啸非's avatar 赵啸非

添加服务追踪

parent 723f86a1
package com.mortals.xhx.daemon.task;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.framework.utils.ServletUtils;
import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.hik.face.model.req.img.ImgReq;
import com.mortals.xhx.module.hik.face.service.IHikFaceService;
import com.mortals.xhx.module.realtime.model.RealtimeDataflowEntity;
import com.mortals.xhx.module.realtime.model.RealtimeDataflowQuery;
import com.mortals.xhx.module.realtime.model.RealtimeDataflowStatEntity;
import com.mortals.xhx.module.realtime.model.RealtimeDataflowStatQuery;
import com.mortals.xhx.module.realtime.service.RealtimeDataflowService;
import com.mortals.xhx.module.realtime.service.RealtimeDataflowStatService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import static java.util.stream.Collectors.toList;
/**
* 人流图片下载
*/
@Slf4j
//@Service("RealTimeDownloadImgTask")
public class RealTimeDownloadImgTaskImpl implements ITaskExcuteService {
@Autowired
private RealtimeDataflowService realtimeDataflowService;
@Autowired
private IHikFaceService faceService;
@Autowired
private UploadService uploadService;
@Override
public void excuteTask(ITask task) throws AppException {
donwnloadSnap();
}
private void donwnloadSnap() {
//下载最近一天的抓拍数据
RealtimeDataflowQuery realtimeDataflowQuery = new RealtimeDataflowQuery();
realtimeDataflowQuery.setDetectTimeStart(DateUtil.yesterday().toStringDefaultTimeZone());
realtimeDataflowQuery.setDetectTimeEnd(DateUtil.formatDateTime(new Date()));
PageInfo pageInfo = new PageInfo();
pageInfo.setPrePageResult(50);
List<RealtimeDataflowEntity> updateList = realtimeDataflowService.find(realtimeDataflowQuery, pageInfo, null).getList()
.parallelStream()
.filter(f -> !ObjectUtils.isEmpty(f.getPicUri()))
.filter(f -> ObjectUtils.isEmpty(f.getPicture()))
.map(item -> {
ImgReq imgReq = new ImgReq();
imgReq.setUrl(item.getPicUri());
Rest<String> rest = faceService.downloadPicture(imgReq);
if (YesNoEnum.YES.getValue() == rest.getCode()) {
byte[] bytes = Base64.decode(rest.getData());
if (!ObjectUtils.isEmpty(bytes)) {
InputStream inputStream = new ByteArrayInputStream(bytes);
MultipartFile file = ServletUtils.getMultipartFile(inputStream, "snap.jpg");
String filePath = uploadService.saveFileUpload(file, "file/fileupload/snap/" + DateUtil.today(), null);
item.setPicture(filePath);
item.setUpdateTime(new Date());
item.setUpdateUserId(1L);
item.setUpdateUserName("system");
log.info("item:{},picPath:{}",item.getId(),item.getPicture());
return item;
}
}
return null;
}).filter(f -> f != null).collect(toList());
log.info("更新图片列表:{}", updateList.size());
if (!ObjectUtils.isEmpty(updateList)) {
realtimeDataflowService.update(updateList, null);
}
}
@Override
public void stopTask(ITask task) throws AppException {
}
public static void main(String[] args) {
// 获取当前时间的小时数
int hour = DateUtil.hour(new Date(), true);
// 获取当前时间所在小时的开始时间和结束时间
Date startTime = DateUtil.beginOfHour(new Date());
Date endTime = DateUtil.endOfHour(new Date());
// 格式化时间为指定格式
String startTimeStr = DateUtil.format(startTime, "yyyy-MM-dd HH:00:00");
String endTimeStr = DateUtil.format(endTime, "yyyy-MM-dd HH:59:59");
// 输出结果
System.out.println("当前时间所在小时的开始时间:" + startTimeStr);
System.out.println("当前时间所在小时的结束时间:" + endTimeStr);
}
}
...@@ -59,16 +59,62 @@ public class SyncRegisterUserTaskImpl implements ITaskExcuteService { ...@@ -59,16 +59,62 @@ public class SyncRegisterUserTaskImpl implements ITaskExcuteService {
@Override @Override
public void excuteTask(ITask task) throws AppException { public void excuteTask(ITask task) throws AppException {
log.info("同步注册用户任务"); log.info("同步注册用户任务");
//syncRegisterUsers(); syncRegisterUsers();
syncRegisterUsersTotal(); //syncRegisterUsersTotal();
log.info("同步注册用户任务完成"); log.info("同步注册用户任务完成");
log.info("同步注册用户照片任务"); log.info("同步注册用户照片任务");
syncRegisterUsersPhotos(); syncRegisterPhotoUsers();
log.info("同步注册用户任务照片完成"); log.info("同步注册用户任务照片完成");
} }
private void syncRegisterPhotoUsers() {
String registerPath = "/inter/Actuary/peoplePhotoList";
String url = host + registerPath;
Map<String, Object> params = new HashMap<>();
params.put("page", 1);
params.put("size", 10000);
String respJson = HttpUtil.get(url, params);
Rest<RegisterDataInfo> rest = JSON.parseObject(respJson, new TypeReference<Rest<RegisterDataInfo>>() {
});
if (rest.getCode() == YesNoEnum.YES.getValue()) {
List<DataItem> userList = rest.getData().getData();
log.info("注册用户有照片数量:{}", userList.size());
for (DataItem user : userList) {
//判断是否本地已存在 不存在
if (ObjectUtils.isEmpty(user.getIdcardIDCardNo())) {
continue;
}
PersonEntity personServiceExtCache = personService.getExtCache(user.getIdcardIDCardNo());
if(ObjectUtils.isEmpty(personServiceExtCache)){
log.info("用户不存在,idcard:{}",user.getIdcardIDCardNo());
continue;
}
//判断是否有图片地址
if(ObjectUtils.isEmpty(personServiceExtCache.getSourcePhotoUri())){
PersonEntity personEntity = new PersonEntity();
personEntity.setId(personServiceExtCache.getCreateUserId());
personEntity.setSourcePhotoUri(user.getIdcardDataPhotoFileName());
//直接下载更新到本地
String downUrl = url + personEntity.getSourcePhotoUri();
// String downUrl = "http://192.168.0.98:11078/file/fileupload/1679215657433.jpg";
log.info("downUrl:{}", downUrl);
byte[] bytes = HttpUtil.downloadBytes(downUrl);
if (bytes.length > 0) {
InputStream inputStream = new ByteArrayInputStream(bytes);
MultipartFile file = getMultipartFile(inputStream, "photo.jpg");
String filePath = uploadService.saveFileUpload(file, "file/fileupload/photo", null);
personEntity.setPhoto(filePath);
personService.update(personEntity);
}
}
}
}
}
private void syncRegisterUsersTotal() { private void syncRegisterUsersTotal() {
log.info("同步注册用户全量更新"); log.info("同步注册用户全量更新");
...@@ -191,8 +237,6 @@ public class SyncRegisterUserTaskImpl implements ITaskExcuteService { ...@@ -191,8 +237,6 @@ public class SyncRegisterUserTaskImpl implements ITaskExcuteService {
if (!ObjectUtils.isEmpty(newPerson.getSourcePhotoUri()) && !newPerson.getSourcePhotoUri().equals(oldPerson.getSourcePhotoUri())) { if (!ObjectUtils.isEmpty(newPerson.getSourcePhotoUri()) && !newPerson.getSourcePhotoUri().equals(oldPerson.getSourcePhotoUri())) {
return false; return false;
} }
return true; return true;
} }
......
package com.mortals.xhx.module.realtime.web; package com.mortals.xhx.module.realtime.web;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
...@@ -8,51 +9,56 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -8,51 +9,56 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.realtime.model.RealtimeDataflowEntity; import com.mortals.xhx.module.realtime.model.RealtimeDataflowEntity;
import com.mortals.xhx.module.realtime.service.RealtimeDataflowService; import com.mortals.xhx.module.realtime.service.RealtimeDataflowService;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import java.util.Arrays; import java.util.Arrays;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*; import static com.mortals.framework.ap.SysConstains.*;
/** /**
* * 人员发现记录
* 人员发现记录 *
* * @author zxfei
* @author zxfei * @date 2023-04-09
* @date 2023-04-09 */
*/
@RestController @RestController
@RequestMapping("realtime/dataflow") @RequestMapping("realtime/dataflow")
public class RealtimeDataflowController extends BaseCRUDJsonBodyMappingController<RealtimeDataflowService,RealtimeDataflowEntity,Long> { public class RealtimeDataflowController extends BaseCRUDJsonBodyMappingController<RealtimeDataflowService, RealtimeDataflowEntity, Long> {
@Autowired @Autowired
private ParamService paramService; private ParamService paramService;
public RealtimeDataflowController(){ public RealtimeDataflowController() {
super.setModuleDesc( "人员发现记录"); super.setModuleDesc("人员发现记录");
} }
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "isBooking", paramService.getParamBySecondOrganize("RealtimeDataflow","isBooking")); this.addDict(model, "isBooking", paramService.getParamBySecondOrganize("RealtimeDataflow", "isBooking"));
super.init(model, context); super.init(model, context);
} }
@Override @Override
protected void doListBefore(RealtimeDataflowEntity query, Map<String, Object> model, Context context) throws AppException { protected void doListBefore(RealtimeDataflowEntity query, Map<String, Object> model, Context context) throws AppException {
query.setOrderField("createTime"); query.setOrderColList(Arrays.asList(new OrderCol("createTime", OrderCol.DESCENDING)));
query.setOrderKind(OrderCol.DESCENDING);
super.doListBefore(query, model, context); super.doListBefore(query, model, context);
} }
} }
\ No newline at end of file
...@@ -56,7 +56,6 @@ hystrix: ...@@ -56,7 +56,6 @@ hystrix:
isolation: isolation:
thread: thread:
timeoutInMilliseconds: 60000 timeoutInMilliseconds: 60000
sms: sms:
smsSendUrl: @profiles.sms.smsSendUrl@ smsSendUrl: @profiles.sms.smsSendUrl@
apiId: @profiles.sms.apiId@ apiId: @profiles.sms.apiId@
......
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