feat(sis):

- 人像库操作与宇视平台同步操作(新增,删除),关联表同步写入/删除
- 人像图片与宇视平台同步操作(新增,删除),关联表同步写入/删除,可选同步至E8平台
- 关联关系改为id关联
This commit is contained in:
2025-06-27 23:13:34 +08:00
parent a585a1be26
commit 3deaea69bb
20 changed files with 307 additions and 112 deletions

View File

@@ -4,10 +4,15 @@ public interface CodePrefixConstants {
/** /**
* 人像库编码前缀 * 人像库编码前缀
*/ */
String PERSONLIB_CODE_PREFIX = "100"; String PERSON_LIB_CODE_PREFIX = "100";
/** /**
* 门禁设备编码前缀 * 门禁设备编码前缀
*/ */
String SIS_DEVICE_CODE_PREFIX = "101"; String SIS_DEVICE_CODE_PREFIX = "101";
/**
* 门禁设备编码前缀
*/
String PERSON_LIB_IMAGE_CODE_PREFIX = "102";
} }

View File

@@ -75,7 +75,7 @@ public class SisPersonLibController extends BaseController {
@SaCheckPermission("sis:personLib:add") @SaCheckPermission("sis:personLib:add")
@Log(title = "人像库", businessType = BusinessType.INSERT) @Log(title = "人像库", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping("add")
public R<Void> add(@Validated(AddGroup.class) @RequestBody SisPersonLibBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody SisPersonLibBo bo) {
return toAjax(tbPersonLibService.insertByBo(bo)); return toAjax(tbPersonLibService.insertByBo(bo));
} }
@@ -98,7 +98,7 @@ public class SisPersonLibController extends BaseController {
*/ */
@SaCheckPermission("sis:personLib:remove") @SaCheckPermission("sis:personLib:remove")
@Log(title = "人像库", businessType = BusinessType.DELETE) @Log(title = "人像库", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("del/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) { @PathVariable("ids") Long[] ids) {
return toAjax(tbPersonLibService.deleteWithValidByIds(List.of(ids), true)); return toAjax(tbPersonLibService.deleteWithValidByIds(List.of(ids), true));

View File

@@ -27,7 +27,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
* 前端访问路由地址为:/sis/personLibImg * 前端访问路由地址为:/sis/personLibImg
* *
* @author mocheng * @author mocheng
* @date 2025-06-24 * @since 2025-06-24
*/ */
@Validated @Validated
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -65,7 +65,7 @@ public class SisPersonLibImgController extends BaseController {
@SaCheckPermission("sis:personLibImg:query") @SaCheckPermission("sis:personLibImg:query")
@GetMapping("/{id}") @GetMapping("/{id}")
public R<SisPersonLibImgVo> getInfo(@NotNull(message = "主键不能为空") public R<SisPersonLibImgVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) { @PathVariable("id") Long id) {
return R.ok(tbPersonLibImgService.queryById(id)); return R.ok(tbPersonLibImgService.queryById(id));
} }
@@ -75,7 +75,7 @@ public class SisPersonLibImgController extends BaseController {
@SaCheckPermission("sis:personLibImg:add") @SaCheckPermission("sis:personLibImg:add")
@Log(title = "人像信息", businessType = BusinessType.INSERT) @Log(title = "人像信息", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping("add")
public R<Void> add(@Validated(AddGroup.class) @RequestBody SisPersonLibImgBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody SisPersonLibImgBo bo) {
return toAjax(tbPersonLibImgService.insertByBo(bo)); return toAjax(tbPersonLibImgService.insertByBo(bo));
} }
@@ -98,7 +98,7 @@ public class SisPersonLibImgController extends BaseController {
*/ */
@SaCheckPermission("sis:personLibImg:remove") @SaCheckPermission("sis:personLibImg:remove")
@Log(title = "人像信息", businessType = BusinessType.DELETE) @Log(title = "人像信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("del/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) { @PathVariable("ids") Long[] ids) {
return toAjax(tbPersonLibImgService.deleteWithValidByIds(List.of(ids), true)); return toAjax(tbPersonLibImgService.deleteWithValidByIds(List.of(ids), true));

View File

@@ -28,19 +28,19 @@ public class SisLibDeviceImgRef extends TenantEntity {
private Long id; private Long id;
/** /**
* 库编码 * 库Id
*/ */
private String libCode; private Long libId;
/** /**
* 图片编码 * 图片Id
*/ */
private String imgCode; private Long imgId;
/** /**
* 设备编码 * 设备Id
*/ */
private String eqpCode; private Long eqpId;
/** /**
* 设备库id * 设备库id
@@ -52,4 +52,9 @@ public class SisLibDeviceImgRef extends TenantEntity {
*/ */
private Long eqpLibImgId; private Long eqpLibImgId;
/**
* e8图片地址
*/
private String eqpLibImgUrl;
} }

View File

@@ -28,19 +28,19 @@ public class SisLibDeviceRef extends TenantEntity {
private Long id; private Long id;
/** /**
* 人员库编码 * 库Id
*/ */
private String libCode; private Long libId;
/** /**
* 设备编码 * 设备Id
*/ */
private String eqpCode; private Long eqpId;
/** /**
* 设备上的库id * 设备上的库id
*/ */
private Long eqpLibCode; private Long eqpLibId;
/** /**
* 第三方设备库添加状态 1: 成功2失败 * 第三方设备库添加状态 1: 成功2失败

View File

@@ -31,7 +31,7 @@ public class SisPersonLibImg extends TenantEntity {
/** /**
* 人员库编码 * 人员库编码
*/ */
private String libCode; private Long libId;
/** /**
* 人像名称 * 人像名称
@@ -49,8 +49,7 @@ public class SisPersonLibImg extends TenantEntity {
private String imgUrl; private String imgUrl;
/** /**
* 性别 1 * 性别 1 2女 99未说明
2女 99未说明
*/ */
private Long sex; private Long sex;
@@ -65,9 +64,7 @@ public class SisPersonLibImg extends TenantEntity {
private String tel; private String tel;
/** /**
* 证件类型 * 证件类型 1身份证 2护照3行驶证 99其它
1身份证 2护照
3行驶证 99其它
*/ */
private Long certificateType; private Long certificateType;

View File

@@ -13,7 +13,7 @@ import jakarta.validation.constraints.*;
* 系统图片和设备图片的关联业务对象 tb_lib_device_img_ref * 系统图片和设备图片的关联业务对象 tb_lib_device_img_ref
* *
* @author mocheng * @author mocheng
* @date 2025-06-24 * @since 2025-06-24
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@@ -29,20 +29,20 @@ public class SisLibDeviceImgRefBo extends BaseEntity {
/** /**
* 库编码 * 库编码
*/ */
@NotBlank(message = "编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "Id不能为空", groups = { AddGroup.class, EditGroup.class })
private String libCode; private Long libId;
/** /**
* 图片编码 * 图片Id
*/ */
@NotBlank(message = "图片编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "图片Id不能为空", groups = { AddGroup.class, EditGroup.class })
private String imgCode; private Long imgId;
/** /**
* 设备编码 * 设备编码
*/ */
@NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "设备Id不能为空", groups = { AddGroup.class, EditGroup.class })
private String eqpCode; private Long eqpId;
/** /**
* 设备库id * 设备库id
@@ -56,6 +56,11 @@ public class SisLibDeviceImgRefBo extends BaseEntity {
@NotNull(message = "设备库图片id不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "设备库图片id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long eqpLibImgId; private Long eqpLibImgId;
/**
* e8图片地址
*/
private String eqpLibImgUrl;
/** /**
* 创建人id * 创建人id
*/ */
@@ -66,10 +71,5 @@ public class SisLibDeviceImgRefBo extends BaseEntity {
*/ */
private Long updateById; private Long updateById;
/**
* 搜索值
*/
private String searchValue;
} }

View File

@@ -29,20 +29,20 @@ public class SisLibDeviceRefBo extends BaseEntity {
/** /**
* 人员库编码 * 人员库编码
*/ */
@NotBlank(message = "人员库编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "库Id不能为空", groups = { AddGroup.class, EditGroup.class })
private String libCode; private Long libId;
/** /**
* 设备编码 * 设备编码
*/ */
@NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "设备Id不能为空", groups = { AddGroup.class, EditGroup.class })
private String eqpCode; private Long eqpId;
/** /**
* 设备上的库id * 设备上的库id
*/ */
@NotNull(message = "设备上的库id不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "设备上的库id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long eqpLibCode; private Long eqpLibId;
/** /**
* 第三方设备库添加状态 1: 成功2失败 * 第三方设备库添加状态 1: 成功2失败
@@ -59,11 +59,4 @@ public class SisLibDeviceRefBo extends BaseEntity {
* 更新人id * 更新人id
*/ */
private Long updateById; private Long updateById;
/**
* 搜索值
*/
private String searchValue;
} }

View File

@@ -16,7 +16,7 @@ import org.dromara.sis.domain.SisPersonLib;
* 人像库业务对象 tb_person_lib * 人像库业务对象 tb_person_lib
* *
* @author mocheng * @author mocheng
* @date 2025-06-24 * @since 2025-06-24
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@@ -53,11 +53,15 @@ public class SisPersonLibBo extends BaseEntity {
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "libType", other = "sis_lib_type") @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "libType", other = "sis_lib_type")
private String libTypeName; private String libTypeName;
/** /**
* 库的业务类型 1: 门禁库2: 黑名单库 * 库的业务类型 1: 门禁库2: 黑名单库
*/ */
private Long busiType = 1L; private Long busiType = 1L;
/**
* 门禁设备id
*/
private Long eqbId;
} }

View File

@@ -23,19 +23,19 @@ public class SisPersonLibImgBo extends BaseEntity {
/** /**
* 主键id * 主键id
*/ */
@NotNull(message = "主键id不能为空", groups = { EditGroup.class }) @NotNull(message = "主键id不能为空", groups = {EditGroup.class})
private Long id; private Long id;
/** /**
* 人员库编码 * 人员库编码
*/ */
@NotBlank(message = "员库编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "像库Id不能为空", groups = {AddGroup.class, EditGroup.class})
private String libCode; private Long libId;
/** /**
* 人像名称 * 人像名称
*/ */
@NotBlank(message = "人像名称不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "人像名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String imgName; private String imgName;
/** /**
@@ -46,12 +46,11 @@ public class SisPersonLibImgBo extends BaseEntity {
/** /**
* 图片的存储地址 * 图片的存储地址
*/ */
@NotBlank(message = "图片的存储地址不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "图片的存储地址不能为空", groups = {AddGroup.class, EditGroup.class})
private String imgUrl; private String imgUrl;
/** /**
* 性别 1 * 性别 12女 99未说明
2女 99未说明
*/ */
private Long sex; private Long sex;
@@ -66,9 +65,7 @@ public class SisPersonLibImgBo extends BaseEntity {
private String tel; private String tel;
/** /**
* 证件类型 * 证件类型、1身份证 2护照、3行驶证 99其它
1身份证 2护照
3行驶证 99其它
*/ */
private Long certificateType; private Long certificateType;
@@ -97,5 +94,10 @@ public class SisPersonLibImgBo extends BaseEntity {
*/ */
private String searchValue; private String searchValue;
/**
* 是否同步到E8
*/
private Boolean isSyncE8;
} }

View File

@@ -33,20 +33,20 @@ public class SisLibDeviceImgRefVo implements Serializable {
/** /**
* 库编码 * 库编码
*/ */
@ExcelProperty(value = "编码") @ExcelProperty(value = "Id")
private String libCode; private Long libId;
/** /**
* 图片编码 * 图片编码
*/ */
@ExcelProperty(value = "图片编码") @ExcelProperty(value = "图片Id")
private String imgCode; private Long imgId;
/** /**
* 设备编码 * 设备编码
*/ */
@ExcelProperty(value = "设备编码") @ExcelProperty(value = "设备id")
private String eqpCode; private Long eqpId;
/** /**
* 设备库id * 设备库id
@@ -60,6 +60,12 @@ public class SisLibDeviceImgRefVo implements Serializable {
@ExcelProperty(value = "设备库图片id") @ExcelProperty(value = "设备库图片id")
private Long eqpLibImgId; private Long eqpLibImgId;
/**
* e8图片地址
*/
@ExcelProperty(value = "e8图片地址")
private String eqpLibImgUrl;
/** /**
* 创建人id * 创建人id
*/ */
@@ -72,11 +78,5 @@ public class SisLibDeviceImgRefVo implements Serializable {
@ExcelProperty(value = "更新人id") @ExcelProperty(value = "更新人id")
private Long updateById; private Long updateById;
/**
* 搜索值
*/
@ExcelProperty(value = "搜索值")
private String searchValue;
} }

View File

@@ -33,20 +33,20 @@ public class SisLibDeviceRefVo implements Serializable {
/** /**
* 人员库编码 * 人员库编码
*/ */
@ExcelProperty(value = "人员库编码") @ExcelProperty(value = "库Id")
private String libCode; private Long libId;
/** /**
* 设备编码 * 设备编码
*/ */
@ExcelProperty(value = "设备编码") @ExcelProperty(value = "设备Id")
private String eqpCode; private Long eqpId;
/** /**
* 设备上的库id * 设备上的库id
*/ */
@ExcelProperty(value = "设备上的库id") @ExcelProperty(value = "设备上的库id")
private Long eqpLibCode; private Long eqpLibId;
/** /**
* 第三方设备库添加状态 1: 成功2失败 * 第三方设备库添加状态 1: 成功2失败
@@ -66,11 +66,4 @@ public class SisLibDeviceRefVo implements Serializable {
@ExcelProperty(value = "更新人id") @ExcelProperty(value = "更新人id")
private Long updateById; private Long updateById;
/**
* 搜索值
*/
@ExcelProperty(value = "搜索值")
private String searchValue;
} }

View File

@@ -34,8 +34,8 @@ public class SisPersonLibImgVo implements Serializable {
/** /**
* 人员库编码 * 人员库编码
*/ */
@ExcelProperty(value = "人员库编码") @ExcelProperty(value = "人员库Id")
private String libCode; private String libId;
/** /**
* 人像名称 * 人像名称

View File

@@ -259,9 +259,9 @@ public class UvModel {
*/ */
private Integer lib_id; private Integer lib_id;
/** /**
* 性别 * 性别 1男2女 99未说明
*/ */
private String sex; private Integer sex;
/** /**
* 邮件 * 邮件
*/ */
@@ -275,7 +275,7 @@ public class UvModel {
* 证件类型 * 证件类型
* 1身份证 2护照 3行驶证 99其它 * 1身份证 2护照 3行驶证 99其它
*/ */
private String certificate_type; private Integer certificate_type;
/** /**
* 证件号码 * 证件号码
*/ */

View File

@@ -12,7 +12,7 @@ import java.util.List;
* 系统图片和设备图片的关联Service接口 * 系统图片和设备图片的关联Service接口
* *
* @author mocheng * @author mocheng
* @date 2025-06-24 * @since 2025-06-24
*/ */
public interface ISisLibDeviceImgRefService { public interface ISisLibDeviceImgRefService {
@@ -65,4 +65,12 @@ public interface ISisLibDeviceImgRefService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据系统图片id列表获取设备图片列表
*
* @param imgIds 系统图片id列表
* @return 设备图片列表
*/
List<SisLibDeviceImgRefVo> queryListByImgIds(Collection<Long> imgIds);
} }

View File

@@ -12,7 +12,7 @@ import java.util.List;
* 系统库与设备库的关联Service接口 * 系统库与设备库的关联Service接口
* *
* @author mocheng * @author mocheng
* @date 2025-06-24 * @since 2025-06-24
*/ */
public interface ISisLibDeviceRefService { public interface ISisLibDeviceRefService {
@@ -65,4 +65,12 @@ public interface ISisLibDeviceRefService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据系统库id列表获取设备库列表
*
* @param LibIds 系统图片id列表
* @return 设备库列表
*/
List<SisLibDeviceRefVo> queryListByLibId(Collection<Long> LibIds);
} }

View File

@@ -40,7 +40,7 @@ public class SisLibDeviceImgRefServiceImpl implements ISisLibDeviceImgRefService
* @return 系统图片和设备图片的关联 * @return 系统图片和设备图片的关联
*/ */
@Override @Override
public SisLibDeviceImgRefVo queryById(Long id){ public SisLibDeviceImgRefVo queryById(Long id) {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
@@ -74,12 +74,11 @@ public class SisLibDeviceImgRefServiceImpl implements ISisLibDeviceImgRefService
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SisLibDeviceImgRef> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SisLibDeviceImgRef> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(SisLibDeviceImgRef::getId); lqw.orderByAsc(SisLibDeviceImgRef::getId);
lqw.eq(StringUtils.isNotBlank(bo.getLibCode()), SisLibDeviceImgRef::getLibCode, bo.getLibCode()); lqw.eq(bo.getLibId() != null, SisLibDeviceImgRef::getLibId, bo.getLibId());
lqw.eq(StringUtils.isNotBlank(bo.getImgCode()), SisLibDeviceImgRef::getImgCode, bo.getImgCode()); lqw.eq(bo.getImgId() != null, SisLibDeviceImgRef::getImgId, bo.getImgId());
lqw.eq(StringUtils.isNotBlank(bo.getEqpCode()), SisLibDeviceImgRef::getEqpCode, bo.getEqpCode()); lqw.eq(bo.getEqpId() != null, SisLibDeviceImgRef::getEqpId, bo.getEqpId());
lqw.eq(bo.getEqpLibId() != null, SisLibDeviceImgRef::getEqpLibId, bo.getEqpLibId()); lqw.eq(bo.getEqpLibId() != null, SisLibDeviceImgRef::getEqpLibId, bo.getEqpLibId());
lqw.eq(bo.getEqpLibImgId() != null, SisLibDeviceImgRef::getEqpLibImgId, bo.getEqpLibImgId()); lqw.eq(bo.getEqpLibImgId() != null, SisLibDeviceImgRef::getEqpLibImgId, bo.getEqpLibImgId());
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), SisLibDeviceImgRef::getSearchValue, bo.getSearchValue());
return lqw; return lqw;
} }
@@ -116,7 +115,7 @@ public class SisLibDeviceImgRefServiceImpl implements ISisLibDeviceImgRefService
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(SisLibDeviceImgRef entity){ private void validEntityBeforeSave(SisLibDeviceImgRef entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
} }
@@ -129,9 +128,22 @@ public class SisLibDeviceImgRefServiceImpl implements ISisLibDeviceImgRefService
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
/**
* 根据系统图片id列表获取设备图片列表
*
* @param imgIds 系统图片id列表
* @return 设备图片列表
*/
@Override
public List<SisLibDeviceImgRefVo> queryListByImgIds(Collection<Long> imgIds){
LambdaQueryWrapper<SisLibDeviceImgRef> lqw = Wrappers.lambdaQuery();
lqw.in(SisLibDeviceImgRef::getImgId, imgIds);
return baseMapper.selectVoList(lqw);
}
} }

View File

@@ -40,7 +40,7 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
* @return 系统库与设备库的关联 * @return 系统库与设备库的关联
*/ */
@Override @Override
public SisLibDeviceRefVo queryById(Long id){ public SisLibDeviceRefVo queryById(Long id) {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
@@ -74,9 +74,9 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SisLibDeviceRef> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SisLibDeviceRef> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(SisLibDeviceRef::getId); lqw.orderByAsc(SisLibDeviceRef::getId);
lqw.eq(StringUtils.isNotBlank(bo.getLibCode()), SisLibDeviceRef::getLibCode, bo.getLibCode()); lqw.eq(bo.getLibId() != null, SisLibDeviceRef::getLibId, bo.getLibId());
lqw.eq(StringUtils.isNotBlank(bo.getEqpCode()), SisLibDeviceRef::getEqpCode, bo.getEqpCode()); lqw.eq(bo.getEqpId() != null, SisLibDeviceRef::getEqpId, bo.getEqpId());
lqw.eq(bo.getEqpLibCode() != null, SisLibDeviceRef::getEqpLibCode, bo.getEqpLibCode()); lqw.eq(bo.getEqpLibId() != null, SisLibDeviceRef::getEqpLibId, bo.getEqpLibId());
lqw.eq(bo.getEqpLibState() != null, SisLibDeviceRef::getEqpLibState, bo.getEqpLibState()); lqw.eq(bo.getEqpLibState() != null, SisLibDeviceRef::getEqpLibState, bo.getEqpLibState());
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), SisLibDeviceRef::getSearchValue, bo.getSearchValue()); lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), SisLibDeviceRef::getSearchValue, bo.getSearchValue());
return lqw; return lqw;
@@ -115,7 +115,7 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(SisLibDeviceRef entity){ private void validEntityBeforeSave(SisLibDeviceRef entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
} }
@@ -128,9 +128,21 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
/**
* 根据系统库id列表获取设备库列表
*
* @param LibIds 系统图片id列表
* @return 设备库列表
*/
public List<SisLibDeviceRefVo> queryListByLibId(Collection<Long> LibIds){
LambdaQueryWrapper<SisLibDeviceRef> lqw = Wrappers.lambdaQuery();
lqw.in(SisLibDeviceRef::getLibId, LibIds);
return baseMapper.selectVoList(lqw);
}
} }

View File

@@ -1,5 +1,7 @@
package org.dromara.sis.service.impl; package org.dromara.sis.service.impl;
import cn.hutool.core.util.IdUtil;
import org.dromara.common.core.constant.CodePrefixConstants;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,6 +11,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.sis.domain.bo.SisLibDeviceImgRefBo;
import org.dromara.sis.domain.bo.SisLibDeviceRefBo;
import org.dromara.sis.domain.vo.SisLibDeviceImgRefVo;
import org.dromara.sis.domain.vo.SisLibDeviceRefVo;
import org.dromara.sis.sdk.e8.VoucherControlService;
import org.dromara.sis.sdk.unview.model.UvModel;
import org.dromara.sis.sdk.unview.service.UnViewAiBoxApiService;
import org.dromara.sis.service.ISisLibDeviceImgRefService;
import org.dromara.sis.service.ISisLibDeviceRefService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo;
import org.dromara.sis.domain.vo.SisPersonLibImgVo; import org.dromara.sis.domain.vo.SisPersonLibImgVo;
@@ -16,6 +27,9 @@ import org.dromara.sis.domain.SisPersonLibImg;
import org.dromara.sis.mapper.SisPersonLibImgMapper; import org.dromara.sis.mapper.SisPersonLibImgMapper;
import org.dromara.sis.service.ISisPersonLibImgService; import org.dromara.sis.service.ISisPersonLibImgService;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
@@ -32,6 +46,10 @@ import java.util.Collection;
public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
private final SisPersonLibImgMapper baseMapper; private final SisPersonLibImgMapper baseMapper;
private final VoucherControlService vouchService;
private final UnViewAiBoxApiService unViewAiBoxApiService;
private final ISisLibDeviceRefService libDeviceRefService;
private final ISisLibDeviceImgRefService libDeviceImgRefService;
/** /**
* 查询人像信息 * 查询人像信息
@@ -40,7 +58,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
* @return 人像信息 * @return 人像信息
*/ */
@Override @Override
public SisPersonLibImgVo queryById(Long id){ public SisPersonLibImgVo queryById(Long id) {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
@@ -74,7 +92,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SisPersonLibImg> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SisPersonLibImg> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(SisPersonLibImg::getId); lqw.orderByAsc(SisPersonLibImg::getId);
lqw.eq(StringUtils.isNotBlank(bo.getLibCode()), SisPersonLibImg::getLibCode, bo.getLibCode()); lqw.eq(bo.getLibId() != null, SisPersonLibImg::getLibId, bo.getLibId());
lqw.like(StringUtils.isNotBlank(bo.getImgName()), SisPersonLibImg::getImgName, bo.getImgName()); lqw.like(StringUtils.isNotBlank(bo.getImgName()), SisPersonLibImg::getImgName, bo.getImgName());
lqw.eq(StringUtils.isNotBlank(bo.getImgCode()), SisPersonLibImg::getImgCode, bo.getImgCode()); lqw.eq(StringUtils.isNotBlank(bo.getImgCode()), SisPersonLibImg::getImgCode, bo.getImgCode());
lqw.eq(StringUtils.isNotBlank(bo.getImgUrl()), SisPersonLibImg::getImgUrl, bo.getImgUrl()); lqw.eq(StringUtils.isNotBlank(bo.getImgUrl()), SisPersonLibImg::getImgUrl, bo.getImgUrl());
@@ -97,10 +115,80 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
@Override @Override
public Boolean insertByBo(SisPersonLibImgBo bo) { public Boolean insertByBo(SisPersonLibImgBo bo) {
SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class); SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class);
// 生成编码
add.setImgCode(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr());
validEntityBeforeSave(add); validEntityBeforeSave(add);
long eqp_id;
long eqp_lib_id;
Integer eqp_lib_img_id;
String eqp_lib_img_url = "";
try {
// 根据图片路径读取图片
byte[] imageByte = Files.readAllBytes(Paths.get(bo.getImgUrl()));
// TODO 新增E8人像
if (bo.getIsSyncE8()) {
// 调用e8人像上传接口
String url = vouchService.uploadFace(imageByte);
if (url == null) return false;
eqp_lib_img_url = url;
}
// TODO 同步到宇视人像照片
// 查询系统库与设备库的关联表 获取设备库Id
SisLibDeviceRefBo libDeviceRefBo = new SisLibDeviceRefBo();
libDeviceRefBo.setLibId(bo.getLibId());
List<SisLibDeviceRefVo> libDeviceRefVos = libDeviceRefService.queryList(libDeviceRefBo);
if (libDeviceRefVos.isEmpty()) return false;
eqp_id = libDeviceRefVos.get(0).getEqpId();
eqp_lib_id = libDeviceRefVos.get(0).getEqpLibId();
// 宇视鉴权信息
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
systemInfo.setAccount("admin");
systemInfo.setPassword("nc123456.");
systemInfo.setIp("47.109.37.87");
systemInfo.setPort(4001);
// 宇视添加人像
UvModel.AddPersonParams addPersonParams = new UvModel.AddPersonParams();
addPersonParams.setPerson_name(bo.getImgName());
addPersonParams.setImage_base64(Base64.getEncoder().encodeToString(imageByte));
addPersonParams.setLib_id(Math.toIntExact(eqp_lib_id));
addPersonParams.setSex(Math.toIntExact(bo.getSex()));
addPersonParams.setEmail(bo.getEmail());
addPersonParams.setTel(bo.getTel());
addPersonParams.setCertificate_type(Math.toIntExact(bo.getCertificateType()));
addPersonParams.setCertificate_no(bo.getCertificateNo());
addPersonParams.setBirth_date(bo.getBirthDate());
// 发起请求获取响应
UvModel.AddPersonResult addPersonResult = unViewAiBoxApiService.addPerson(systemInfo, addPersonParams);
if (addPersonResult == null) return false;
eqp_lib_img_id = addPersonResult.getPerson_id();
} catch (Exception e) {
return false;
}
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
//TODO 写入关联表
SisLibDeviceImgRefBo ref = new SisLibDeviceImgRefBo();
ref.setLibId(bo.getLibId());
ref.setImgId(add.getId());
ref.setEqpId(eqp_id);
ref.setEqpLibId(eqp_lib_id);
ref.setEqpLibImgId(eqp_lib_img_id.longValue());
// E8
if(bo.getIsSyncE8()){
ref.setEqpLibImgUrl(eqp_lib_img_url);
}
libDeviceImgRefService.insertByBo(ref);
} }
return flag; return flag;
} }
@@ -121,7 +209,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(SisPersonLibImg entity){ private void validEntityBeforeSave(SisPersonLibImg entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
} }
@@ -134,8 +222,25 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
List<SisLibDeviceImgRefVo> list = libDeviceImgRefService.queryListByImgIds(ids);
if(list.isEmpty()) return false;
Collection<Long> refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList();
Integer[] refImgIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibImgId).map(Long::intValue).toArray(Integer[]::new);
// 宇视鉴权信息
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
systemInfo.setAccount("admin");
systemInfo.setPassword("nc123456.");
systemInfo.setIp("47.109.37.87");
systemInfo.setPort(4001);
Boolean unViewFlag = unViewAiBoxApiService.batchDeletePerson(systemInfo, refImgIds);
if (!unViewFlag) return false;
Boolean refFlag = libDeviceImgRefService.deleteWithValidByIds(refIds, true);
if (!refFlag) return false;
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }

View File

@@ -12,9 +12,14 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.domain.SisPersonLib; import org.dromara.sis.domain.SisPersonLib;
import org.dromara.sis.domain.bo.SisLibDeviceRefBo;
import org.dromara.sis.domain.bo.SisPersonLibBo; import org.dromara.sis.domain.bo.SisPersonLibBo;
import org.dromara.sis.domain.vo.SisAccessControlDeviceVo;
import org.dromara.sis.domain.vo.SisLibDeviceRefVo;
import org.dromara.sis.domain.vo.SisPersonLibVo; import org.dromara.sis.domain.vo.SisPersonLibVo;
import org.dromara.sis.mapper.SisPersonLibMapper; import org.dromara.sis.mapper.SisPersonLibMapper;
import org.dromara.sis.sdk.unview.model.UvModel;
import org.dromara.sis.sdk.unview.service.UnViewAiBoxApiService;
import org.dromara.sis.service.ISisPersonLibService; import org.dromara.sis.service.ISisPersonLibService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -26,7 +31,7 @@ import java.util.Map;
* 人像库Service业务层处理 * 人像库Service业务层处理
* *
* @author mocheng * @author mocheng
* @date 2025-06-24 * @since 2025-06-24
*/ */
@Slf4j @Slf4j
@Service @Service
@@ -34,6 +39,9 @@ import java.util.Map;
public class SisPersonLibServiceImpl implements ISisPersonLibService { public class SisPersonLibServiceImpl implements ISisPersonLibService {
private final SisPersonLibMapper baseMapper; private final SisPersonLibMapper baseMapper;
private final UnViewAiBoxApiService unViewAiBoxApiService;
private final SisLibDeviceRefServiceImpl libDeviceRefService;
private final SisAccessControlDeviceServiceImpl accessControlDeviceService;
/** /**
* 查询人像库 * 查询人像库
@@ -95,13 +103,38 @@ public class SisPersonLibServiceImpl implements ISisPersonLibService {
public Boolean insertByBo(SisPersonLibBo bo) { public Boolean insertByBo(SisPersonLibBo bo) {
SisPersonLib add = MapstructUtils.convert(bo, SisPersonLib.class); SisPersonLib add = MapstructUtils.convert(bo, SisPersonLib.class);
// 生成库编码 // 生成库编码
add.setLibCode(CodePrefixConstants.PERSONLIB_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); add.setLibCode(CodePrefixConstants.PERSON_LIB_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr());
validEntityBeforeSave(add); validEntityBeforeSave(add);
long eqp_lib_id = 0L;
// TODO 同步到宇视人像库
if (bo.getEqbId() != null) {
SisAccessControlDeviceVo accessControlDevice = accessControlDeviceService.queryById(bo.getEqbId());
if (accessControlDevice == null) return false;
// 同步到宇视盒子
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
systemInfo.setAccount(accessControlDevice.getEqpAccount());
systemInfo.setPassword(accessControlDevice.getEqpPwd());
systemInfo.setIp(accessControlDevice.getEqpIp());
systemInfo.setPort(Math.toIntExact(accessControlDevice.getEqpPort()));
UvModel.AddLibResult resp = unViewAiBoxApiService.addPersonLib(systemInfo, add.getLibName());
if (resp == null) return false;
eqp_lib_id = resp.getLib_id().longValue();
}
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
//TODO 写入设备关联库 //TODO 写入设备关联库
SisLibDeviceRefBo libDeviceRefBo = new SisLibDeviceRefBo();
libDeviceRefBo.setLibId(add.getId());
libDeviceRefBo.setEqpId(bo.getEqbId());
libDeviceRefBo.setEqpLibId(eqp_lib_id);
libDeviceRefBo.setEqpLibState(1L);
libDeviceRefService.insertByBo(libDeviceRefBo);
} }
return flag; return flag;
@@ -138,6 +171,24 @@ public class SisPersonLibServiceImpl implements ISisPersonLibService {
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) { if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
List<SisLibDeviceRefVo> list = libDeviceRefService.queryListByLibId(ids);
if(list.isEmpty()) return false;
Collection<Long> refIds = list.stream().map(SisLibDeviceRefVo::getId).toList();
Integer[] refLibIds = list.stream().map(SisLibDeviceRefVo::getEqpLibId).map(Long::intValue).toArray(Integer[]::new);
// 宇视鉴权信息
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
systemInfo.setAccount("admin");
systemInfo.setPassword("nc123456.");
systemInfo.setIp("47.109.37.87");
systemInfo.setPort(4001);
boolean unViewFlag = unViewAiBoxApiService.deletePersonLib(systemInfo, refLibIds);
if (!unViewFlag) return false;
Boolean refFlag = libDeviceRefService.deleteWithValidByIds(refIds, true);
if (!refFlag) return false;
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }