人像库完成
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

This commit is contained in:
lxj 2025-06-27 17:13:01 +08:00
parent c7446fde32
commit 56b40bd5ad
12 changed files with 136 additions and 52 deletions

View File

@ -46,6 +46,12 @@ public class SisAccessControlDeviceController extends BaseController {
return sisAccessControlDeviceService.queryPageList(bo, pageQuery);
}
@GetMapping("/list/{factoryNo}")
public R<List<SisAccessControlDeviceVo>> queryListByFactoryNo(@PathVariable("factoryNo") String factoryNo) {
return R.ok(sisAccessControlDeviceService.queryListByFactoryNo(factoryNo));
}
/**
* 导出门禁设备列表
*/

View File

@ -1,9 +1,10 @@
package org.dromara.sis.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
@ -30,12 +31,12 @@ public class SisLibDeviceRef extends TenantEntity {
/**
* 人员库编码
*/
private String libCode;
private Long libId;
/**
* 设备编码
*/
private String eqpCode;
private Long eqpId;
/**
* 设备上的库id

View File

@ -1,13 +1,14 @@
package org.dromara.sis.domain.bo;
import org.dromara.sis.domain.SisLibDeviceRef;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.sis.domain.SisLibDeviceRef;
/**
* 系统库与设备库的关联业务对象 tb_lib_device_ref
@ -23,31 +24,31 @@ public class SisLibDeviceRefBo extends BaseEntity {
/**
* 主键id
*/
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
@NotNull(message = "主键id不能为空", groups = {EditGroup.class})
private Long id;
/**
* 人员库编码
*/
@NotBlank(message = "人员库编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String libCode;
@NotBlank(message = "人员库id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long libId;
/**
* 设备编码
*/
@NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String eqpCode;
@NotBlank(message = "设备id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long eqpId;
/**
* 设备上的库id
*/
@NotNull(message = "设备上的库id不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "设备上的库id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long eqpLibCode;
/**
* 第三方设备库添加状态 1: 成功2失败
*/
@NotNull(message = "第三方设备库添加状态 1: 成功2失败不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "第三方设备库添加状态 1: 成功2失败不能为空", groups = {AddGroup.class, EditGroup.class})
private Long eqpLibState;
/**

View File

@ -12,6 +12,8 @@ import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.sis.domain.SisPersonLib;
import java.util.List;
/**
* 人像库业务对象 tb_person_lib
*
@ -37,6 +39,12 @@ public class SisPersonLibBo extends BaseEntity {
@NotBlank(message = "人员库名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String libName;
/**
* 设备编码需要同步创建到设备中
*/
@NotBlank(message = "人像设备不能为空", groups = {AddGroup.class, EditGroup.class})
private List<Long> eqpIds;
/**
* 人员库描述
*/

View File

@ -1,10 +1,10 @@
package org.dromara.sis.domain.vo;
import org.dromara.sis.domain.SisLibDeviceRef;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.sis.domain.SisLibDeviceRef;
import java.io.Serial;
import java.io.Serializable;
@ -31,16 +31,16 @@ public class SisLibDeviceRefVo implements Serializable {
private Long id;
/**
* 人员库编码
* 人员库id
*/
@ExcelProperty(value = "人员库编码")
private String libCode;
@ExcelProperty(value = "人员库id")
private Long libId;
/**
* 设备编码
* 设备表id
*/
@ExcelProperty(value = "设备编码")
private String eqpCode;
@ExcelProperty(value = "设备表id")
private Long eqpId;
/**
* 设备上的库id

View File

@ -182,7 +182,7 @@ public interface UnViewAiBoxApi {
* @param libName 工服库名称
* @return 是否添加成功
*/
Integer addWorkClothesLib(UvSystemInfo systemInfo, String libName);
AddLibResult addWorkClothesLib(UvSystemInfo systemInfo, String libName);
/**
* 修改工服库信息

View File

@ -164,10 +164,10 @@ public class UnViewAiBoxApiService implements UnViewAiBoxApi {
}
/*---------------------------------------------------------------- 工服库 ---------------------------------------------------------------------------*/
public Integer addWorkClothesLib(UvSystemInfo uvSystemInfo, String libName) {
public AddLibResult addWorkClothesLib(UvSystemInfo uvSystemInfo, String libName) {
JSONObject params = new JSONObject();
params.put("lib_name", libName);
UniViewResult<Integer> request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_LIB_ADD, params, Integer.class);
UniViewResult<AddLibResult> request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_LIB_ADD, params, AddLibResult.class);
return request.result();
}

View File

@ -1,10 +1,9 @@
package org.dromara.sis.service;
import org.dromara.sis.domain.SisAccessControlDevice;
import org.dromara.sis.domain.vo.SisAccessControlDeviceVo;
import org.dromara.sis.domain.bo.SisAccessControlDeviceBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.domain.bo.SisAccessControlDeviceBo;
import org.dromara.sis.domain.vo.SisAccessControlDeviceVo;
import java.util.Collection;
import java.util.List;
@ -66,4 +65,12 @@ public interface ISisAccessControlDeviceService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据factoryNo 查询设备列表
*
* @param factoryNo 厂商编号
* @return 返回设备列表
*/
List<SisAccessControlDeviceVo> queryListByFactoryNo(String factoryNo);
}

View File

@ -1,5 +1,6 @@
package org.dromara.sis.service;
import org.dromara.sis.domain.SisLibDeviceRef;
import org.dromara.sis.domain.vo.SisLibDeviceRefVo;
import org.dromara.sis.domain.bo.SisLibDeviceRefBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -49,6 +50,14 @@ public interface ISisLibDeviceRefService {
*/
Boolean insertByBo(SisLibDeviceRefBo bo);
/**
* 新增系统库与设备库的关联
*
* @param ref 系统库与设备库的关联
* @return 是否新增成功
*/
Boolean insert(SisLibDeviceRef ref);
/**
* 修改系统库与设备库的关联
*
@ -65,4 +74,6 @@ public interface ISisLibDeviceRefService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<SisLibDeviceRefVo> queryByIds(Collection<Long> ids);
}

View File

@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.CodePrefixConstants;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.MapstructUtils;
@ -143,4 +142,11 @@ public class SisAccessControlDeviceServiceImpl implements ISisAccessControlDevic
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public List<SisAccessControlDeviceVo> queryListByFactoryNo(String factoryNo) {
LambdaQueryWrapper<SisAccessControlDevice> lqw = Wrappers.lambdaQuery();
lqw.eq(SisAccessControlDevice::getFactoryNo, factoryNo);
return baseMapper.selectVoList(lqw);
}
}

View File

@ -1,24 +1,24 @@
package org.dromara.sis.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.domain.SisLibDeviceRef;
import org.dromara.sis.domain.bo.SisLibDeviceRefBo;
import org.dromara.sis.domain.vo.SisLibDeviceRefVo;
import org.dromara.sis.domain.SisLibDeviceRef;
import org.dromara.sis.mapper.SisLibDeviceRefMapper;
import org.dromara.sis.service.ISisLibDeviceRefService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 系统库与设备库的关联Service业务层处理
@ -40,7 +40,7 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
* @return 系统库与设备库的关联
*/
@Override
public SisLibDeviceRefVo queryById(Long id){
public SisLibDeviceRefVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@ -74,8 +74,8 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SisLibDeviceRef> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(SisLibDeviceRef::getId);
lqw.eq(StringUtils.isNotBlank(bo.getLibCode()), SisLibDeviceRef::getLibCode, bo.getLibCode());
lqw.eq(StringUtils.isNotBlank(bo.getEqpCode()), SisLibDeviceRef::getEqpCode, bo.getEqpCode());
lqw.eq(bo.getLibId() !=null, SisLibDeviceRef::getLibId, bo.getLibId());
lqw.eq(bo.getEqpId() !=null, SisLibDeviceRef::getEqpId, bo.getEqpId());
lqw.eq(bo.getEqpLibCode() != null, SisLibDeviceRef::getEqpLibCode, bo.getEqpLibCode());
lqw.eq(bo.getEqpLibState() != null, SisLibDeviceRef::getEqpLibState, bo.getEqpLibState());
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), SisLibDeviceRef::getSearchValue, bo.getSearchValue());
@ -99,6 +99,11 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
return flag;
}
@Override
public Boolean insert(SisLibDeviceRef ref) {
return baseMapper.insert(ref) > 0;
}
/**
* 修改系统库与设备库的关联
*
@ -115,7 +120,7 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SisLibDeviceRef entity){
private void validEntityBeforeSave(SisLibDeviceRef entity) {
//TODO 做一些数据校验,如唯一约束
}
@ -128,7 +133,7 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;

View File

@ -1,5 +1,6 @@
package org.dromara.sis.service.impl;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -11,12 +12,19 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.domain.SisLibDeviceRef;
import org.dromara.sis.domain.SisPersonLib;
import org.dromara.sis.domain.bo.SisPersonLibBo;
import org.dromara.sis.domain.vo.SisAccessControlDeviceVo;
import org.dromara.sis.domain.vo.SisPersonLibVo;
import org.dromara.sis.mapper.SisPersonLibMapper;
import org.dromara.sis.sdk.unview.UnViewAiBoxApi;
import org.dromara.sis.sdk.unview.model.UvModel;
import org.dromara.sis.service.ISisAccessControlDeviceService;
import org.dromara.sis.service.ISisLibDeviceRefService;
import org.dromara.sis.service.ISisPersonLibService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
@ -34,6 +42,10 @@ import java.util.Map;
public class SisPersonLibServiceImpl implements ISisPersonLibService {
private final SisPersonLibMapper baseMapper;
private final ISisLibDeviceRefService sisLibDeviceRefService;
private final ISisAccessControlDeviceService sisAccessControlDeviceService;
private final UnViewAiBoxApi unViewAiBoxApi;
/**
* 查询人像库
@ -91,18 +103,46 @@ public class SisPersonLibServiceImpl implements ISisPersonLibService {
* @param bo 人像库
* @return 是否新增成功
*/
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean insertByBo(SisPersonLibBo bo) {
SisPersonLib add = MapstructUtils.convert(bo, SisPersonLib.class);
// 生成库编码
Assert.notNull(add, "数据处理失败");
add.setLibCode(CodePrefixConstants.PERSONLIB_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr());
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
log.info("库[{}]开始写入系统result={}", add.getLibCode(), flag);
if (flag) {
bo.setId(add.getId());
//TODO 写入设备关联库
for (Long eqpId : bo.getEqpIds()) {
// 查询设备信息
SisAccessControlDeviceVo sisAccessControlDeviceVo = sisAccessControlDeviceService.queryById(eqpId);
Assert.notNull(sisAccessControlDeviceVo, "门禁控制设备不存在id=" + eqpId);
log.info("准备写入门禁设备code={}", sisAccessControlDeviceVo.getEqpNo());
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
systemInfo.setAccount(sisAccessControlDeviceVo.getEqpAccount());
systemInfo.setPassword(sisAccessControlDeviceVo.getEqpPwd());
systemInfo.setIp(sisAccessControlDeviceVo.getEqpIp());
systemInfo.setPort(systemInfo.getPort());
// libType =1 人像库否则工服库
Integer outLibCode = null;
if (bo.getLibType() == 1) {
UvModel.AddLibResult addLibResult = unViewAiBoxApi.addPersonLib(systemInfo, bo.getLibName());
outLibCode = addLibResult.getLib_id();
} else {
UvModel.AddLibResult addLibResult = unViewAiBoxApi.addWorkClothesLib(systemInfo, bo.getLibName());
outLibCode = addLibResult.getLib_id();
}
log.info("宇视建库完成libId = {}", outLibCode);
Assert.notNull(outLibCode, "写入宇视盒子失败");
SisLibDeviceRef ref = new SisLibDeviceRef();
ref.setLibId(add.getId());
ref.setEqpId(sisAccessControlDeviceVo.getId());
ref.setEqpLibCode(Long.valueOf(outLibCode));
ref.setEqpLibState(1L);
Boolean insert = sisLibDeviceRefService.insert(ref);
Assert.isTrue(insert, "写入库关联关系表失败!");
log.info("同步建库完成!");
}
}
return flag;
}
@ -136,9 +176,8 @@ public class SisPersonLibServiceImpl implements ISisPersonLibService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
// 查询当前库是否绑定
sisLibDeviceRefService.queryByIds(ids);
return baseMapper.deleteByIds(ids) > 0;
}
}