diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlDeviceController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlDeviceController.java index 844638a..6c0bc6c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlDeviceController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlDeviceController.java @@ -46,6 +46,12 @@ public class SisAccessControlDeviceController extends BaseController { return sisAccessControlDeviceService.queryPageList(bo, pageQuery); } + @GetMapping("/list/{factoryNo}") + public R> queryListByFactoryNo(@PathVariable("factoryNo") String factoryNo) { + return R.ok(sisAccessControlDeviceService.queryListByFactoryNo(factoryNo)); + } + + /** * 导出门禁设备列表 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceRef.java index fc8e17c..ebb9fb2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceRef.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceRef.java @@ -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 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceRefBo.java index 03173a4..68c9d89 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceRefBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceRefBo.java @@ -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; /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibBo.java index da5bb5a..6768106 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibBo.java @@ -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 eqpIds; + /** * 人员库描述 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceRefVo.java index a82dee5..166019f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceRefVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceRefVo.java @@ -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 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java index 5b1007e..5b2f338 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java @@ -182,7 +182,7 @@ public interface UnViewAiBoxApi { * @param libName 工服库名称 * @return 是否添加成功 */ - Integer addWorkClothesLib(UvSystemInfo systemInfo, String libName); + AddLibResult addWorkClothesLib(UvSystemInfo systemInfo, String libName); /** * 修改工服库信息 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java index d44f41d..4434119 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java @@ -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 request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_LIB_ADD, params, Integer.class); + UniViewResult request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_LIB_ADD, params, AddLibResult.class); return request.result(); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlDeviceService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlDeviceService.java index 306ebf4..8e3bf7b 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlDeviceService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlDeviceService.java @@ -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 ids, Boolean isValid); + + /** + * 根据factoryNo 查询设备列表 + * + * @param factoryNo 厂商编号 + * @return 返回设备列表 + */ + List queryListByFactoryNo(String factoryNo); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibDeviceRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibDeviceRefService.java index f9c95cf..b077bbd 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibDeviceRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibDeviceRefService.java @@ -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 ids, Boolean isValid); + + List queryByIds(Collection ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlDeviceServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlDeviceServiceImpl.java index eea0619..11400bd 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlDeviceServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlDeviceServiceImpl.java @@ -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 queryListByFactoryNo(String factoryNo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAccessControlDevice::getFactoryNo, factoryNo); + return baseMapper.selectVoList(lqw); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibDeviceRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibDeviceRefServiceImpl.java index 3dff6b5..33684bf 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibDeviceRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibDeviceRefServiceImpl.java @@ -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 params = bo.getParams(); LambdaQueryWrapper 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 ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibServiceImpl.java index bae0bd7..021f3cb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibServiceImpl.java @@ -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 ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - } + // 查询当前库是否绑定 + sisLibDeviceRefService.queryByIds(ids); return baseMapper.deleteByIds(ids) > 0; } }