长庆项目11.06

This commit is contained in:
ovo 2024-11-06 10:08:43 +08:00
parent 139718fc34
commit b08a36222b
19 changed files with 607 additions and 54 deletions

View File

@ -320,6 +320,37 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<!--
1. 加密后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描
2. 方法体被清空后,反编译只能看到方法名和注解,看不到方法体的具体内容
3. 加密后的项目需要设置javaagent来启动,启动过程中解密class,完全内存解密,不留下任何解密后的文件
4. 启动加密后的jar,生成xxx-encrypted.jar,这个就是加密后的jar文件,加密后不可直接执行
5. 无密码启动方式,java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
6. 有密码启动方式,java -javaagent:xxx-encrypted.jar='-pwd= 密码' -jar xxx-encrypted.jar
-->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<password>#</password><!-- #表示启动时不需要密码,事实上对于代码混淆来说,这个密码没什么用,它只是一个启动密码 -->
<excludes>org.spring</excludes>
<packages>net.shapelight</packages><!-- 加密的包名,多个包用逗号分开 -->
<cfgfiles>application.yml,application-dev.yml</cfgfiles><!-- 加密的配置文件,多个包用逗号分开 -->
<libjars>hutool-all.jar</libjars> <!-- jar包lib下面要加密的jar依赖文件,多个包用逗号分开 -->
<!--<code>xxxxx</code> &lt;!&ndash; 指定机器启动,机器码 不绑定机器码 就注释掉此项 &ndash;&gt;-->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 跳过单元测试 --> <!-- 跳过单元测试 -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -345,6 +376,9 @@
</configuration> </configuration>
<!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 --> <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>

View File

@ -32,8 +32,8 @@ import javax.annotation.PostConstruct;
@EnableFeignClients @EnableFeignClients
//@MapperScan("net.shapelight.modules.sys.dao") //@MapperScan("net.shapelight.modules.sys.dao")
public class AdminApplication { public class AdminApplication {
/* @Autowired @Autowired
CxFeignClient cxFeignClient;*/ CxFeignClient cxFeignClient;
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args); SpringApplication.run(AdminApplication.class, args);
@ -61,11 +61,11 @@ public class AdminApplication {
// }); // });
} }
/*@PostConstruct @PostConstruct
void init() throws Exception { void init() throws Exception {
SslUtils.ignoreSsl(); SslUtils.ignoreSsl();
String res = cxFeignClient.getToken("5bb50ad0cc40e10565089c35aa61e7f3","k9?8bCqaQ*R1e2Wx0f65AzY4^]LDp@_Z"); String res = cxFeignClient.getToken("5bb50ad0cc40e10565089c35aa61e7f3","k9?8bCqaQ*R1e2Wx0f65AzY4^]LDp@_Z");
CxFeignConfig.token = res; CxFeignConfig.token = res;
}*/ }
} }

View File

@ -33,10 +33,8 @@ public class FaceEngineFactory extends BasePooledObjectFactory<FaceEngine> {
@Override @Override
public FaceEngine create() { public FaceEngine create() {
FaceEngine faceEngine = new FaceEngine(ArcFaceAutoConfiguration.CACHE_LIB_FOLDER); FaceEngine faceEngine = new FaceEngine(ArcFaceAutoConfiguration.CACHE_LIB_FOLDER);
/* FaceEngine faceEngine = new FaceEngine("/softTemp/jar/82K111TPM121XK4H.dat");*/
// FaceEngine faceEngine = new FaceEngine("/home/huangyifang/gb/咸阳师范/ArcSoft_ArcFacePro_linux_java_V4.1/libs/LINUX64/"); // FaceEngine faceEngine = new FaceEngine("/home/huangyifang/gb/咸阳师范/ArcSoft_ArcFacePro_linux_java_V4.1/libs/LINUX64/");
int activeCode; int activeCode;
if (StringUtils.isNotEmpty(activeFile)) { if (StringUtils.isNotEmpty(activeFile)) {

View File

@ -331,25 +331,28 @@ public class RtspFrameGrabber {
params.put("personnelId", tenPerson.getOpenId()); params.put("personnelId", tenPerson.getOpenId());
params.put("personnelCardId", tenPerson.getIdCard()); params.put("personnelCardId", tenPerson.getIdCard());
params.put("personnelType", personnelTypeMap.get(tenPerson.getPersonType())); params.put("personnelType", personnelTypeMap.get(tenPerson.getPersonType()));
params.put("dictSex", tenPerson.getGender() == 0 ? "" : ""); params.put("dictSex", tenPerson.getGender() == 0 ? "" : "");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
params.put("watchVideoTime", sdf.format(System.currentTimeMillis())); params.put("watchVideoTime", sdf.format(System.currentTimeMillis()));
if(tenPerson.getIsWatchSafeVideo() != 1){
tenPerson.setIsWatchSafeVideo(faceVideoVo.getIsHeadOnView() == 0 ? 2 : 1);
}
tenPerson.setIsWatchSafeVideo(faceVideoVo.getIsHeadOnView() == 0 ? 2 : 1);
//tenPerson.setIsWatchSafeVideo();
tenPersonService.updateById(tenPerson); tenPersonService.updateById(tenPerson);
System.out.println("params = " + params); System.out.println("params = " + params);
if(faceVideoVo.getIsHeadOnView() == 1){ if(faceVideoVo.getIsHeadOnView() == 1){
/* JSONObject jsonObject = feignClient.savePmWatchVideoRecord(params); JSONObject jsonObject = feignClient.savePmWatchVideoRecord(params);
if (jsonObject.getBool("success") != null && jsonObject.getBool("success")) { if (jsonObject.getBool("success") != null && jsonObject.getBool("success")) {
personService.update(new LambdaUpdateWrapper<TenPersonEntity>() personService.update(new LambdaUpdateWrapper<TenPersonEntity>()
.set(TenPersonEntity::getIsWatchSafeVideo, 1) .set(TenPersonEntity::getIsWatchSafeVideo, 1)
.eq(TenPersonEntity::getPersonId, userCompareInfo.getFaceId())); .eq(TenPersonEntity::getPersonId, userCompareInfo.getFaceId()));
}*/ }
} }
} }

View File

@ -340,6 +340,8 @@ public class HttpApiController {
JSONObject dataJson = jsonContent.getJSONObject("data"); JSONObject dataJson = jsonContent.getJSONObject("data");
Long uid = dataJson.getLong("uid"); Long uid = dataJson.getLong("uid");
System.out.println("uid = " + uid);
TenCellEntity cellEntity = tenCellService.getById(deviceEntity.getCellId()); TenCellEntity cellEntity = tenCellService.getById(deviceEntity.getCellId());
TenPersonEntity p = tenPersonService.getById(uid,cellEntity.getCellId()); TenPersonEntity p = tenPersonService.getById(uid,cellEntity.getCellId());
@ -877,9 +879,24 @@ public class HttpApiController {
params.put("personnelCardId", memberEntity.getIdCard()); params.put("personnelCardId", memberEntity.getIdCard());
params.put("personnelType",memberEntity.getPersonType()); Integer type = null;
params.put("entryOrExit",(deviceEntity.getGateFlag()+1) == 1); //1进2出 if (memberEntity.getPersonType() == 5001){
type = 1;
}
if (memberEntity.getPersonType() == 5000){
type = 2;
}
if (memberEntity.getPersonType() == 5002){
type = 3;
}
if (memberEntity.getPersonType() == 5005){
type = 4;
}
params.put("personnelType",type);
params.put("entryOrExit", deviceEntity.getGateFlag() + 1); //1进2出
SimpleDateFormat sfm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat sfm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@ -890,12 +907,12 @@ public class HttpApiController {
System.out.println("params = " + params); System.out.println("params = " + params);
/* cn.hutool.json.JSONObject jsonObject = cxFeignClient.savePmEntryExitRecord(params); cn.hutool.json.JSONObject jsonObject = cxFeignClient.savePmEntryExitRecord(params);
if(jsonObject.getBool("success")!=null && jsonObject.getBool("success")){ if(jsonObject.getBool("success")!=null && jsonObject.getBool("success")){
log.debug("同步进出场记录成功"); log.debug("同步进出场记录成功");
}else { }else {
log.debug("同步进出场记录失败"+"姓名:"+memberEntity.getName()+",errorMessage"+jsonObject.getStr("message")); log.debug("同步进出场记录失败"+"姓名:"+memberEntity.getName()+",errorMessage"+jsonObject.getStr("message"));
}*/ }
return R.ok(); return R.ok();
} }

View File

@ -1,28 +1,36 @@
package net.shapelight.modules.iCq.controller; package net.shapelight.modules.iCq.controller.demo;
import cn.hutool.json.JSONObject;
import com.arcsoft.face.ActiveDeviceInfo; import com.arcsoft.face.ActiveDeviceInfo;
import com.arcsoft.face.FaceEngine; import com.arcsoft.face.FaceEngine;
import com.arcsoft.face.enums.ErrorInfo; import com.arcsoft.face.Rect;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.minio.MinioClient; import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.shapelight.common.config.GlobalValue; import net.shapelight.common.config.GlobalValue;
import net.shapelight.common.config.MinioConfig;
import net.shapelight.common.utils.R; import net.shapelight.common.utils.R;
import net.shapelight.modules.iCq.dal.mysql.enter.CqEnterConfigCellMapper; import net.shapelight.common.utils.UUIDUtil;
import net.shapelight.modules.iCq.dal.mysql.enter.CqEnterConfigMapper; import net.shapelight.modules.face.rtsp.RtspFrameGrabber;
import net.shapelight.modules.iCq.dal.mysql.enter.CqEnterConfigTypeMapper; import net.shapelight.modules.iCq.controller.video.vo.FaceVideoVo;
import net.shapelight.modules.iCq.service.enter.CqEnterServiceImpl; import net.shapelight.modules.iCq.service.enter.CqEnterServiceImpl;
import net.shapelight.modules.iCq.utils.DemoUtil;
import net.shapelight.modules.job.task.PersonSynchronousTask; import net.shapelight.modules.job.task.PersonSynchronousTask;
import net.shapelight.modules.ten.dao.TenCellDao; import net.shapelight.modules.ten.dao.TenCellDao;
import net.shapelight.modules.ten.entity.TenCellEntity; import net.shapelight.modules.ten.dao.TenPersonDao;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import net.shapelight.modules.face.factory.FaceEngineFactory; import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@RestController @RestController
@ -33,6 +41,8 @@ public class DemoController {
private final CqEnterServiceImpl cqEnterService; private final CqEnterServiceImpl cqEnterService;
private final TenPersonDao tenPersonDao;
@Autowired @Autowired
private PersonSynchronousTask task; private PersonSynchronousTask task;
@ -43,6 +53,13 @@ public class DemoController {
@Autowired @Autowired
private GlobalValue globalValue; private GlobalValue globalValue;
@Autowired
private RtspFrameGrabber rtspFrameGrabber;
private final MinioConfig minioConfig;
private final MinioClient minioClient;
@GetMapping("/save1") @GetMapping("/save1")
public void saveSupplier(String type){ public void saveSupplier(String type){
/* System.out.println("测试开始"); /* System.out.println("测试开始");
@ -178,6 +195,93 @@ public class DemoController {
} }
/* @PostMapping("/drawRectangleOnImage")
public R DrawRectangleOnImage(@RequestParam("image") MultipartFile image, @RequestParam String cellId) {
List<FaceVideoVo> recognition = rtspFrameGrabber.recognition(image, cellId);
List<Rect> rects = new ArrayList<>();
for (FaceVideoVo faceVideoVo : recognition) {
rects.add(faceVideoVo.getRect());
}
draw(recognition.get(0).getImageUrl(), rects);
System.out.println("recognition = " + recognition);
return R.ok();
}*/
/* private String draw(String imageUrl, List<Rect> rectList) {
try {
// URL 读取图片
BufferedImage image = ImageIO.read(new URL(globalValue.getMinioEndpoint() + "/" +
globalValue.getMinioBucketName() + "/" + imageUrl));
// 获取绘图上下文
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.RED); // 设置框的颜色
g2d.setStroke(new BasicStroke(3)); // 设置框的线条宽度
// 遍历每个矩形框并绘制
for (Rect rect : rectList) {
int left = rect.left;
int top = rect.top;
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
g2d.drawRect(left, top, width, height);
}
// 释放资源
g2d.dispose();
// BufferedImage 转换为 InputStream 以便上传
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", os);
InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
// 设置文件目录和名称
String catalogue = "temp/";
String extension = "jpg"; // 假设是 JPG 格式
String fileName = catalogue + "t_" + UUIDUtil.uuid() + "." + extension;
// 上传文件到 MinIO
PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(), -1);
putObjectOptions.setContentType("image/jpeg");
minioClient.putObject(
minioConfig.getBucketName(), fileName, inputStream, putObjectOptions);
inputStream.close();
System.out.println("矩形框已绘制并上传到 MinIO文件路径" + globalValue.getMinioEndpoint() + "/" +
globalValue.getMinioBucketName() + "/" + fileName);
return fileName;
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}*/
/*@GetMapping("/testUtil")
public R testUtil(){
return R.ok().put("data", DemoUtil.demo());
}*/
@GetMapping("/temp")
public R temp(){
tenPersonDao.insertTemp("111");
return R.ok();
}
} }

View File

@ -0,0 +1,21 @@
package net.shapelight.modules.iCq.controller.demo.vo;
import com.arcsoft.face.Rect;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DrawVo {
private String imageUrl;
private List<Rect> rectList;
}

View File

@ -1,25 +1,33 @@
package net.shapelight.modules.iCq.controller.video; package net.shapelight.modules.iCq.controller.video;
import com.arcsoft.face.Rect;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.shapelight.common.config.GlobalValue;
import net.shapelight.common.config.MinioConfig;
import net.shapelight.common.utils.R; import net.shapelight.common.utils.R;
import net.shapelight.modules.face.dto.FaceRecognitionResDTO; import net.shapelight.common.utils.UUIDUtil;
import net.shapelight.modules.face.entity.UserCompareInfo;
import net.shapelight.modules.face.rtsp.RtspFrameGrabber; import net.shapelight.modules.face.rtsp.RtspFrameGrabber;
import net.shapelight.modules.iCq.controller.video.dto.UpdateVideoDto; import net.shapelight.modules.iCq.controller.video.dto.UpdateVideoDto;
import net.shapelight.modules.iCq.controller.video.dto.UploadVideoDto; import net.shapelight.modules.iCq.controller.video.dto.UploadVideoDto;
import net.shapelight.modules.iCq.controller.video.vo.FaceVideoVo; import net.shapelight.modules.iCq.controller.video.vo.FaceVideoVo;
import net.shapelight.modules.iCq.dal.dataobject.video.TenSafeVideoEntity;
import net.shapelight.modules.iCq.dal.mysql.video.CqFileMapper;
import net.shapelight.modules.iCq.dal.mysql.video.CqSafeVideoMapper;
import net.shapelight.modules.iCq.service.video.CqSafeVideoServiceImpl; import net.shapelight.modules.iCq.service.video.CqSafeVideoServiceImpl;
import net.shapelight.modules.ten.dao.TenCellDao; import net.shapelight.modules.iCq.utils.DrawUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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 javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -38,6 +46,14 @@ public class CqSafeVideoController {
@Autowired @Autowired
private RtspFrameGrabber rtspFrameGrabber; private RtspFrameGrabber rtspFrameGrabber;
@Autowired
private GlobalValue globalValue;
private final MinioConfig minioConfig;
private final MinioClient minioClient;
private final List<FaceVideoVo> list = new ArrayList<>(); private final List<FaceVideoVo> list = new ArrayList<>();
@ -84,7 +100,7 @@ public class CqSafeVideoController {
} }
} }
@PutMapping("/update") @PostMapping("/update")
@ApiOperation(value = "更新视频接口") @ApiOperation(value = "更新视频接口")
public R update(@RequestBody UpdateVideoDto updateVideoDto, public R update(@RequestBody UpdateVideoDto updateVideoDto,
@RequestHeader(value = "X-HTTP-Method-Override", required = false) String methodOverride) { @RequestHeader(value = "X-HTTP-Method-Override", required = false) String methodOverride) {
@ -122,27 +138,112 @@ public class CqSafeVideoController {
} }
System.out.println("list = " + list); System.out.println("list = " + list);
List<Rect> rects = new ArrayList<>();
for (FaceVideoVo faceVideoVo : faceVideoVos) {
rects.add(faceVideoVo.getRect());
}
String drawUrl = null;
try {
drawUrl = DrawUtils.draw(faceVideoVos.get(0).getImageUrl(), rects);
} catch (IndexOutOfBoundsException e) {
System.out.println(e);
}
if (isEnd == 1){ if (isEnd == 1){
List<FaceVideoVo> listTemp = new ArrayList<>(list); List<FaceVideoVo> listTemp = new ArrayList<>(list);
list.clear(); list.clear();
return R.ok().put("data", listTemp); return R.ok().put("data", listTemp).put("drawUrl", drawUrl);
} }
return R.ok().put("data", list); return R.ok().put("data", list).put("drawUrl", drawUrl);
} }
@PostMapping("/face/recognition") @PostMapping("/face/recognition")
public R aWatchStart(@RequestParam("image") MultipartFile image, @RequestParam String cellId) { public R aWatchStart(@RequestParam("image") MultipartFile image, @RequestParam String cellId) {
List<FaceVideoVo> recognition = rtspFrameGrabber.recognition(image, cellId); List<FaceVideoVo> recognition = rtspFrameGrabber.recognition(image, cellId);
for (FaceVideoVo faceVideoVo : recognition) { for (FaceVideoVo faceVideoVo : recognition) {
System.out.println(faceVideoVo.getImageUrl()); System.out.println(faceVideoVo.getImageUrl());
} }
return R.ok().put("data", recognition); List<Rect> rects = new ArrayList<>();
for (FaceVideoVo faceVideoVo : recognition) {
rects.add(faceVideoVo.getRect());
}
String drawUrl = null;
try {
drawUrl = DrawUtils.draw(recognition.get(0).getImageUrl(), rects);
} catch (IndexOutOfBoundsException e) {
System.out.println(e);
}
return R.ok().put("data", recognition).put("drawUrl", drawUrl);
} }
/*private String draw(String imageUrl, List<Rect> rectList) {
try {
// URL 读取图片
BufferedImage image = ImageIO.read(new URL(globalValue.getMinioEndpoint() + "/" +
globalValue.getMinioBucketName() + "/" + imageUrl));
// 获取绘图上下文
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.RED); // 设置框的颜色
g2d.setStroke(new BasicStroke(3)); // 设置框的线条宽度
// 遍历每个矩形框并绘制
for (Rect rect : rectList) {
int left = rect.left;
int top = rect.top;
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
g2d.drawRect(left, top, width, height);
}
// 释放资源
g2d.dispose();
// BufferedImage 转换为 InputStream 以便上传
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", os);
InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
// 设置文件目录和名称
String catalogue = "temp/";
String extension = "jpg"; // 假设是 JPG 格式
String fileName = catalogue + "t_" + UUIDUtil.uuid() + "." + extension;
// 上传文件到 MinIO
PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(), -1);
putObjectOptions.setContentType("image/jpeg");
minioClient.putObject(
minioConfig.getBucketName(), fileName, inputStream, putObjectOptions);
inputStream.close();
System.out.println("矩形框已绘制并上传到 MinIO文件路径" + globalValue.getMinioEndpoint() + "/" +
globalValue.getMinioBucketName() + "/" + fileName);
return fileName;
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}*/
} }

View File

@ -36,6 +36,11 @@ public class FaceVideoVo {
*/ */
private Rect rect; private Rect rect;
/**
* 绘制后图片url
*/
private String imageWithRectangle;
} }

View File

@ -0,0 +1,4 @@
package net.shapelight.modules.iCq.dal.dataobject.personTemp;
public class TenPersonSyncTempEntity {
}

View File

@ -0,0 +1,24 @@
package net.shapelight.modules.iCq.dal.mysql.personTemp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TenPersonSyncTempMapper {
@Insert("INSERT INTO ten_person_sync_temp (open_id) VALUES (#{openId});")
public void insertTemp(String openId);
@Delete("DELETE FROM ten_person_sync_temp;")
void removeAll();
@Delete("DELETE FROM ten_person WHERE open_id NOT IN (SELECT open_id FROM ten_person_sync_temp);")
void removeDeletedPerson();
@Delete("DELETE FROM ten_person_sync_836266616957173761 WHERE person_id NOT IN (SELECT person_id from ten_person WHERE open_id in (SELECT open_id FROM ten_person_sync_temp));")
void removeDeletedPersonSync();
}

View File

@ -0,0 +1,90 @@
package net.shapelight.modules.iCq.utils;
import com.arcsoft.face.Rect;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import net.shapelight.common.config.GlobalValue;
import net.shapelight.common.config.MinioConfig;
import net.shapelight.common.utils.UUIDUtil;
import org.springframework.stereotype.Component;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
@Component
public class DrawUtils {
private static GlobalValue globalValue;
private static MinioClient minioClient;
private static MinioConfig minioConfig;
public DrawUtils(GlobalValue globalValue, MinioClient minioClient, MinioConfig minioConfig) {
DrawUtils.globalValue = globalValue;
DrawUtils.minioClient = minioClient;
DrawUtils.minioConfig = minioConfig;
}
public static String draw(String imageUrl, List<Rect> rectList) {
try {
// URL 读取图片
BufferedImage image = ImageIO.read(new URL(globalValue.getMinioEndpoint() + "/" +
globalValue.getMinioBucketName() + "/" + imageUrl));
// 获取绘图上下文
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.RED); // 设置框的颜色
g2d.setStroke(new BasicStroke(3)); // 设置框的线条宽度
// 遍历每个矩形框并绘制
for (Rect rect : rectList) {
int left = rect.left;
int top = rect.top;
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
g2d.drawRect(left, top, width, height);
}
// 释放资源
g2d.dispose();
// BufferedImage 转换为 InputStream 以便上传
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", os);
InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
// 设置文件目录和名称
String catalogue = "temp/";
String extension = "jpg"; // 假设是 JPG 格式
String fileName = catalogue + "t_" + UUIDUtil.uuid() + "." + extension;
// 上传文件到 MinIO
PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(), -1);
putObjectOptions.setContentType("image/jpeg");
minioClient.putObject(
minioConfig.getBucketName(), fileName, inputStream, putObjectOptions);
inputStream.close();
System.out.println("矩形框已绘制并上传到 MinIO文件路径" + globalValue.getMinioEndpoint() + "/" +
globalValue.getMinioBucketName() + "/" + fileName);
return fileName;
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}
}

View File

@ -56,9 +56,13 @@ public class DbBakTask implements ITask {
fileDir.setWritable(true,false); fileDir.setWritable(true,false);
} }
String mysqlLocation = "SHOW VARIABLES LIKE 'basedir';";
//String cmd = "mysqldump -u"+ dbUsername +" -p"+dbPassword +" "+ dbName + " -r " + path; //String cmd = "mysqldump -u"+ dbUsername +" -p"+dbPassword +" "+ dbName + " -r " + path;
//mysqldump -h172.17.0.1 -P3306 -ugb -pgb site_db_docker -r /opt/sl-site/db_bak/13.sql //mysqldump -h172.17.0.1 -P3306 -ugb -pgb site_db_docker -r /opt/sl-site/db_bak/13.sql
String cmd = "mysqldump -h"+dbHost+" -P"+dbPort+" -u"+ dbUsername +" -p"+dbPassword +" --set-charset=UTF8 "+ dbName; String cmd = "mysqldump -h"+dbHost+" -P"+dbPort+" -u"+ dbUsername +" -p"+dbPassword +" --set-charset=UTF8 "+ dbName;
/*cmd = cmd + mysqlLocation + "\bin";*/
PrintWriter printWriter = null; PrintWriter printWriter = null;
BufferedReader bufferedReader = null; BufferedReader bufferedReader = null;
try { try {

View File

@ -23,6 +23,7 @@ import net.shapelight.modules.face.service.FaceEngineService;
import net.shapelight.modules.face.util.UserInfo; import net.shapelight.modules.face.util.UserInfo;
import net.shapelight.modules.face.util.UserRamGroup; import net.shapelight.modules.face.util.UserRamGroup;
import net.shapelight.modules.feignClient.CxFeignClient; import net.shapelight.modules.feignClient.CxFeignClient;
import net.shapelight.modules.iCq.dal.mysql.personTemp.TenPersonSyncTempMapper;
import net.shapelight.modules.nettyapi.service.ServerApiService; import net.shapelight.modules.nettyapi.service.ServerApiService;
import net.shapelight.modules.sys.controller.AbstractController; import net.shapelight.modules.sys.controller.AbstractController;
import net.shapelight.modules.ten.entity.*; import net.shapelight.modules.ten.entity.*;
@ -70,6 +71,9 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
@Autowired @Autowired
private ServerApiService serverApiService; private ServerApiService serverApiService;
@Autowired
private TenPersonSyncTempMapper tenPersonSyncTempMapper;
@Override @Override
public void run(String params) { public void run(String params) {
@ -78,6 +82,8 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
//getPmInternalPersonnelList("Contractor"); //getPmInternalPersonnelList("Contractor");
tenPersonSyncTempMapper.removeAll();
try { try {
getPmInternalPersonnelList("Person"); getPmInternalPersonnelList("Person");
} catch (Exception e) { } catch (Exception e) {
@ -99,6 +105,12 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
System.err.println("Error while fetching personnel list for Supplier: " + e.getMessage()); System.err.println("Error while fetching personnel list for Supplier: " + e.getMessage());
} }
tenPersonSyncTempMapper.removeDeletedPerson();
tenPersonSyncTempMapper.removeDeletedPersonSync();
} }
private void getPmInternalPersonnelList(String type) { private void getPmInternalPersonnelList(String type) {
@ -107,7 +119,7 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
int pageIndex = 1; int pageIndex = 1;
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("pageIndex", pageIndex); params.put("pageIndex", pageIndex);
params.put("pageSize", 1000); params.put("pageSize", 20);
/* params.put("orgName", item.getName());*/ /* params.put("orgName", item.getName());*/
/*params.put("orgId", item.getCellId());*/ /*params.put("orgId", item.getCellId());*/
params.put("orgId", item.getOrgId()); params.put("orgId", item.getOrgId());
@ -148,7 +160,7 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
} }
if (json.getBool("success") != null && json.getBool("success")) { if (json.getBool("success") != null && json.getBool("success")) {
JSONObject data = json.getJSONObject("data"); JSONObject data = json.getJSONObject("data");
System.out.println("cssssssssssssssssssssss" + data); /*System.out.println("cssssssssssssssssssssss" + data);*/
JSONArray dataList = data.getJSONArray("list"); JSONArray dataList = data.getJSONArray("list");
List<JSONObject> list1 = dataList.toList(JSONObject.class); List<JSONObject> list1 = dataList.toList(JSONObject.class);
@ -191,6 +203,10 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
} }
} }
}); });
} }
@ -438,8 +454,8 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
TenPersonEntity tenPerson = new TenPersonEntity(); TenPersonEntity tenPerson = new TenPersonEntity();
Date now = new Date(); Date now = new Date();
long id = new SnowflakeIdWorker().nextId(); /* long id = new SnowflakeIdWorker().nextId();
tenPerson.setPersonId(id); tenPerson.setPersonId(id);*/
tenPerson.setUuid(UUIDUtil.uuid()); tenPerson.setUuid(UUIDUtil.uuid());
//tenPerson.setTenantId(cellEntity.getTenantId()); //tenPerson.setTenantId(cellEntity.getTenantId());
tenPerson.setCreateBy("sync"); tenPerson.setCreateBy("sync");
@ -478,14 +494,20 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
tenPerson.setName(person.getStr("contractorName")); tenPerson.setName(person.getStr("contractorName"));
} }
if (person.getStr("personnelName") != null){ if (person.getStr("personnelName") != null){
tenPerson.setName(person.getStr("personnelName")); tenPerson.setName(person.getStr("personnelName"));
} }
tenPerson.setGender(person.getInt("dictSex") != null ? person.getInt("dictSex") : 0); tenPerson.setGender(person.getInt("dictSex") != null ? person.getInt("dictSex") : 0);
tenPerson.setMobile(person.getStr("mobile") != null ? person.getStr("mobile") : null); tenPerson.setMobile(person.getStr("mobile") != null ? person.getStr("mobile") : null);
tenPerson.setIdCard(person.getStr("personnelCardId") != null ? person.getStr("personnelCardId") : null); if (person.getStr("personnelCardId") != null) {
tenPerson.setIdCard(person.getStr("personnelCardId"));
}
if (person.getStr("contractorCardId") != null) {
tenPerson.setIdCard(person.getStr("contractorCardId"));
}
if (person.getStr("supplierCardId") != null) {
tenPerson.setIdCard(person.getStr("supplierCardId"));
}
tenPerson.setNation(person.getStr("dictNation") != null ? Integer.parseInt(person.getStr("dictNation")) : 1); tenPerson.setNation(person.getStr("dictNation") != null ? Integer.parseInt(person.getStr("dictNation")) : 1);
tenPerson.setCellId(cellEntity.getCellId()); tenPerson.setCellId(cellEntity.getCellId());
@ -514,15 +536,29 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
tenPerson.setLiveStart(sfm.parse(person.getStr("enterValidPeriod"))); tenPerson.setLiveStart(sfm.parse(person.getStr("enterValidPeriod")));
} else if (person.getStr("validPeriodSta") != null) { } else if (person.getStr("validPeriodSta") != null) {
tenPerson.setLiveStart(sfm.parse(person.getStr("validPeriodSta"))); tenPerson.setLiveStart(sfm.parse(person.getStr("validPeriodSta")));
} else if(person.getStr("enterValidPeriod") == null){
tenPerson.setLiveStart(sfm.parse("1900-01-01 00:00:00"));
} else if (person.getStr("validPeriodSta") == null){
tenPerson.setLiveStart(sfm.parse("1900-01-01 00:00:00"));
} }
if (person.getStr("enterValidPeriodEnd") != null) { if (person.getStr("enterValidPeriodEnd") != null) {
tenPerson.setLiveEnd(sfm.parse(person.getStr("enterValidPeriodEnd"))); tenPerson.setLiveEnd(sfm.parse(person.getStr("enterValidPeriodEnd")));
} else if (person.getStr("validPeriodEnd") != null) { } else if (person.getStr("validPeriodEnd") != null) {
tenPerson.setLiveEnd(sfm.parse(person.getStr("validPeriodEnd"))); tenPerson.setLiveEnd(sfm.parse(person.getStr("validPeriodEnd")));
} else if (person.getStr("enterValidPeriodEnd") == null){
tenPerson.setLiveEnd(sfm.parse("2200-01-01 00:00:00"));
} else if (person.getStr("validPeriodEnd") == null){
tenPerson.setLiveEnd(sfm.parse("2200-01-01 00:00:00"));
} }
} catch (ParseException e) { } catch (ParseException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
if (person.getStr("isEnterSulfurArea") != null) { if (person.getStr("isEnterSulfurArea") != null) {
tenPerson.setIsEnterSulfurArea(person.getStr("isEnterSulfurArea").equals("") ? 1 : 0); tenPerson.setIsEnterSulfurArea(person.getStr("isEnterSulfurArea").equals("") ? 1 : 0);
} }
@ -669,6 +705,8 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
personTrain.setIsQualified(contractorTrain.getStr("isQualified").equals("") ? 1 : 0); personTrain.setIsQualified(contractorTrain.getStr("isQualified").equals("") ? 1 : 0);
} }
if (contractorTrain.getStr("trainStartDate") != null) { if (contractorTrain.getStr("trainStartDate") != null) {
try { try {
personTrain.setTrainStartDate(sfm1.parse(contractorTrain.getStr("trainStartDate"))); personTrain.setTrainStartDate(sfm1.parse(contractorTrain.getStr("trainStartDate")));
@ -730,6 +768,31 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
tenPerson.setIsWatchSafeVideo(0); tenPerson.setIsWatchSafeVideo(0);
} }
long id;
if(tenPersonService.getOne(new QueryWrapper<TenPersonEntity>()
.eq("open_id", tenPerson.getOpenId())) != null) {
//MyBatis-Plus会优先使用 personId 作为主键因为它更具体地定义了主键的生成策略
/*tenPersonService.removeById(tenPersonService.getOne(new QueryWrapper<TenPersonEntity>()
.eq("open_id", tenPerson.getOpenId())).getPersonId());*/
id = tenPersonService.getOne(new QueryWrapper<TenPersonEntity>()
.eq("open_id", tenPerson.getOpenId())).getPersonId();
tenPerson.setPersonId(id);
//tenPersonService.updateTenPersonByOpenId(tenPerson);
//System.out.println("更新成功" + tenPerson);
}else {
id = new SnowflakeIdWorker().nextId();
tenPerson.setPersonId(id);
//tenPersonService.saveTenPerson(tenPerson);
// System.out.println("新增成功" + tenPerson);
}
if (person.getStr("attachment") != null) { if (person.getStr("attachment") != null) {
try { try {
//保存原始图片 //保存原始图片
@ -784,6 +847,11 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
} }
} }
}*/ }*/
UserInfo userInfo = new UserInfo(); UserInfo userInfo = new UserInfo();
userInfo.setFaceId(tenPerson.getPersonId().toString()); userInfo.setFaceId(tenPerson.getPersonId().toString());
userInfo.setName(tenPerson.getName()); userInfo.setName(tenPerson.getName());
@ -802,14 +870,20 @@ public class PersonSynchronousTask extends AbstractController implements ITask {
} }
} }
if(tenPersonService.getOne(new QueryWrapper<TenPersonEntity>() if(tenPersonService.getOne(new QueryWrapper<TenPersonEntity>()
.eq("open_id", tenPerson.getOpenId())) != null) { .eq("open_id", tenPerson.getOpenId())) != null) {
//MyBatis-Plus会优先使用 personId 作为主键因为它更具体地定义了主键的生成策略
tenPersonService.removeById(tenPersonService.getOne(new QueryWrapper<TenPersonEntity>() tenPersonService.updateTenPersonByOpenId(tenPerson);
.eq("open_id", tenPerson.getOpenId())).getPersonId());
System.out.println("更新成功" + tenPerson);
}else {
tenPersonService.saveTenPerson(tenPerson);
System.out.println("新增成功" + tenPerson);
} }
tenPersonService.saveTenPerson(tenPerson);
System.out.println("新增成功" + tenPerson);
tenPersonSyncTempMapper.insertTemp(tenPerson.getOpenId());
return ""; return "";
} }
} }

View File

@ -10,10 +10,12 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import cn.hutool.json.JSONObject;
import com.alibaba.excel.EasyExcelFactory; import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import io.minio.MinioClient; import io.minio.MinioClient;
import io.minio.PutObjectOptions; import io.minio.PutObjectOptions;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -586,7 +588,16 @@ public class TenPersonController extends AbstractController {
params.put("attachment", "data:image/jpeg;base64," + base64); params.put("attachment", "data:image/jpeg;base64," + base64);
System.out.println("params = " + params); System.out.println("params = " + params);
// cxFeignClient.savePmVisitorPersonnel(params); JSONObject jsonObject = cxFeignClient.savePmVisitorPersonnel(params);
if(jsonObject.getStr("data") != null){
String openId = jsonObject.getStr("data");
// id
tenPerson.setOpenId(openId);
tenPersonService.update(tenPerson,
new UpdateWrapper<TenPersonEntity>().eq("person_id", id));
//tenPersonService.updateTenPersonById(tenPerson);
}
} }
return R.ok(); return R.ok();
} }

View File

@ -137,4 +137,6 @@ public interface TenPersonDao extends BaseMapper<TenPersonEntity>{
List<TenDeptPersonCount> findDeptCount(@Param("tenantId")String tenantId); List<TenDeptPersonCount> findDeptCount(@Param("tenantId")String tenantId);
int updateWatchSafeVideo(@Param("personId")Long personId,@Param("cellId")Long cellId); int updateWatchSafeVideo(@Param("personId")Long personId,@Param("cellId")Long cellId);
void insertTemp(String openId);
} }

View File

@ -165,5 +165,8 @@ public interface TenPersonService extends IService<TenPersonEntity> {
String saveOrUpdateByField(TenPersonEntity entity,String fieldName); String saveOrUpdateByField(TenPersonEntity entity,String fieldName);
void updateTenPersonByOpenId(TenPersonEntity tenPerson);
void insertTemp(String openId);
} }

View File

@ -7,6 +7,7 @@ import com.arcsoft.face.FaceInfo;
import com.arcsoft.face.enums.ExtractType; import com.arcsoft.face.enums.ExtractType;
import com.arcsoft.face.toolkit.ImageFactory; import com.arcsoft.face.toolkit.ImageFactory;
import com.arcsoft.face.toolkit.ImageInfo; import com.arcsoft.face.toolkit.ImageInfo;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.minio.MinioClient; import io.minio.MinioClient;
import io.minio.PutObjectOptions; import io.minio.PutObjectOptions;
@ -29,6 +30,7 @@ import net.shapelight.modules.face.service.FaceEngineService;
import net.shapelight.modules.face.util.Base64Util; import net.shapelight.modules.face.util.Base64Util;
import net.shapelight.modules.face.util.UserInfo; import net.shapelight.modules.face.util.UserInfo;
import net.shapelight.modules.face.util.UserRamGroup; import net.shapelight.modules.face.util.UserRamGroup;
import net.shapelight.modules.iCq.dal.mysql.personTemp.TenPersonSyncTempMapper;
import net.shapelight.modules.nettyapi.service.ServerApiService; import net.shapelight.modules.nettyapi.service.ServerApiService;
import net.shapelight.modules.ten.controller.TenUserController; import net.shapelight.modules.ten.controller.TenUserController;
import net.shapelight.modules.ten.entity.*; import net.shapelight.modules.ten.entity.*;
@ -111,6 +113,9 @@ public class TenPersonServiceImpl extends ServiceImpl<TenPersonDao,TenPersonEnti
@Value("${global.minio.bucketName}") @Value("${global.minio.bucketName}")
private String bucketName; private String bucketName;
private TenPersonSyncTempMapper tenPersonSyncTempMapper;
@Override @Override
public PageUtils queryPage(Map<String, Object> params) { public PageUtils queryPage(Map<String, Object> params) {
@ -395,6 +400,9 @@ public class TenPersonServiceImpl extends ServiceImpl<TenPersonDao,TenPersonEnti
InputStream tempInputStream = minioClient.getObject(minioConfig.getBucketName(), tempOrgImageFile); InputStream tempInputStream = minioClient.getObject(minioConfig.getBucketName(), tempOrgImageFile);
//----------------算法检测---------------------------------------------- //----------------算法检测----------------------------------------------
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
int length; int length;
while ((length = tempInputStream.read(buffer)) != -1) { while ((length = tempInputStream.read(buffer)) != -1) {
@ -2780,4 +2788,48 @@ public class TenPersonServiceImpl extends ServiceImpl<TenPersonDao,TenPersonEnti
return "update"; return "update";
} }
} }
@Override
public void updateTenPersonByOpenId(TenPersonEntity tenPerson) {
UpdateWrapper<TenPersonEntity> updateWrapper = new UpdateWrapper<>();
// 根据某个字段设置更新条件比如根据 id 更新
updateWrapper.eq("open_id", tenPerson.getOrgId());
tenPersonDao.update(tenPerson, updateWrapper);
//发送设备通知
List<TenDeviceVo> devList = tenDeviceService.findByCellId(tenPerson.getCellId());
//状态是0正常发送推送
if (tenPerson.getStatus() == Constant.PESON_SUATUS_NOMOR) {
for (TenDeviceVo dev : devList) {
//添加到同步表下发设备通知
TenPersonSyncEntity syncEntity = new TenPersonSyncEntity();
syncEntity.setPersonId(tenPerson.getPersonId());
syncEntity.setTenantId(tenPerson.getTenantId());
syncEntity.setDeviceSn(dev.getSn());
syncEntity.setDeviceId(dev.getDeviceId());
syncEntity.setState(1);
syncEntity.setLastUpdateTime(tenPerson.getLastUpdateTime());
tenPersonSyncService.insert(syncEntity);
//下发通知
List<TenPersonOperationVo> list = new ArrayList<>();
TenPersonOperationVo vo = new TenPersonOperationVo();
vo.setUid(syncEntity.getPersonId());
vo.setOperation(1);
vo.setLast_update_stamp(syncEntity.getLastUpdateTime());
list.add(vo);
serverApiService.personOperation(dev.getSn(), list);
}
}
}
@Override
public void insertTemp(String openId) {
tenPersonSyncTempMapper.insertTemp(openId);
}
} }

View File

@ -539,6 +539,12 @@
</insert> </insert>
<insert id="insertTemp">
INSERT INTO ten_person_sync_temp (open_id) VALUES (#{openId});
</insert>
<update id="updateById" parameterType="net.shapelight.modules.ten.entity.TenPersonEntity"> <update id="updateById" parameterType="net.shapelight.modules.ten.entity.TenPersonEntity">
update ten_person update ten_person
<set> <set>