From 7bdd9ff0728c0a3353580962fe6ec9fcd72e025d Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Sun, 27 Jul 2025 17:10:30 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CapitalApplicationController.java | 4 +- .../dromara/property/domain/CapitalInfo.java | 2 +- .../domain/bo/CapitalApplicationBo.java | 2 +- .../property/domain/bo/CapitalInfoBo.java | 2 +- .../domain/vo/CapitalApplicationVo.java | 6 ++- .../property/domain/vo/CapitalInfoVo.java | 2 +- .../impl/CapitalApplicationServiceImpl.java | 48 +++++++++++-------- 7 files changed, 38 insertions(+), 28 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.java index aa7da89..30ea5c8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.java @@ -40,7 +40,7 @@ public class CapitalApplicationController extends BaseController { /** * 查询资产申请列表 */ - @SaCheckPermission("domain:application:list") + // @SaCheckPermission("domain:application:list") @GetMapping("/list") public TableDataInfo list(CapitalApplicationBo bo, PageQuery pageQuery) { return capitalApplicationService.queryPageList(bo, pageQuery); @@ -72,7 +72,7 @@ public class CapitalApplicationController extends BaseController { /** * 新增资产申请 */ - @SaCheckPermission("domain:application:add") + // @SaCheckPermission("domain:application:add") @Log(title = "资产申请", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.java index 9494338..e606735 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.java @@ -36,7 +36,7 @@ public class CapitalInfo extends TenantEntity { /** * 资产类型 */ - private String capitalType; + private Long capitalType; /** * 规格 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java index f710537..1964d3e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java @@ -95,7 +95,7 @@ public class CapitalApplicationBo extends BaseEntity { * 申请时间 */ private Date applicationTime; - @NotEmpty(message = "资产不能为空", groups = { AddGroup.class, EditGroup.class }) + private List capitalInfoBolist; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java index 13a502b..d8960ec 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java @@ -37,7 +37,7 @@ public class CapitalInfoBo extends BaseEntity { * 资产类型 */ @NotBlank(message = "资产类型不能为空", groups = { AddGroup.class, EditGroup.class }) - private String capitalType; + private Long capitalType; /** * 规格 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java index 420776b..f340fcd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java @@ -14,7 +14,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -131,5 +131,9 @@ public class CapitalApplicationVo implements Serializable { @ExcelProperty(value = "搜索值") private String searchValue; + /** + * 资产信息 + */ + private List capitalInfoVoList; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java index a7ca24f..53e2fa8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java @@ -45,7 +45,7 @@ public class CapitalInfoVo implements Serializable { * 资产类型 */ @ExcelProperty(value = "资产类型") - private String capitalType; + private Long capitalType; /** * 规格 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java index 60eecb0..ed58c69 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.property.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -11,7 +12,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.*; -import org.dromara.property.domain.vo.CostItemsVo; +import org.dromara.property.domain.vo.CapitalInfoVo; import org.dromara.property.mapper.*; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.CapitalApplicationBo; @@ -19,10 +20,7 @@ import org.dromara.property.domain.vo.CapitalApplicationVo; import org.dromara.property.service.ICapitalApplicationService; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 资产申请Service业务层处理 @@ -86,16 +84,20 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService if (CollUtil.isNotEmpty(suppliersList)) { Suppliers suppliers = suppliersList.stream() .filter(vo -> vo.getId() != null && vo.getId().equals(capitalApplicationVo.getSupplier())).findFirst().orElse(null); - capitalApplicationVo.setSupplierName(suppliers.getSuppliersName()); + capitalApplicationVo.setSupplierName(ObjectUtil.isNotEmpty(suppliers)?suppliers.getSuppliersName():null); } if (CollUtil.isNotEmpty(residentPeopleList)) { ResidentPerson residentPerson = residentPeopleList.stream() .filter(vo -> vo.getId() != null && vo.getId().equals(capitalApplicationVo.getApplicat())).findFirst().orElse(null); - capitalApplicationVo.setApplicatName(residentPerson.getUserName()); + capitalApplicationVo.setApplicatName(ObjectUtil.isNotEmpty(residentPerson)?residentPerson.getUserName():null); ResidentPerson residentPersons = residentPeopleList.stream() .filter(vo -> vo.getId() != null && vo.getId().equals(capitalApplicationVo.getAudit())).findFirst().orElse(null); - capitalApplicationVo.setAuditName(residentPersons.getUserName()); + capitalApplicationVo.setAuditName(ObjectUtil.isNotEmpty(residentPersons)?residentPersons.getUserName():null); } + LambdaQueryWrapper capitalInfoWrapper = new LambdaQueryWrapper<>(); + capitalInfoWrapper.eq(CapitalInfo::getCapitalApplicationId,capitalApplicationVo.getId()); + List capitalInfoVoList = capitalMapper.selectVoList(capitalInfoWrapper); + capitalApplicationVo.setCapitalInfoVoList(capitalInfoVoList); } /** @@ -137,6 +139,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(CapitalApplicationBo bo) { CapitalApplication add = MapstructUtils.convert(bo, CapitalApplication.class); + validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); @@ -145,7 +148,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService CapitalInfo capitalInfo = MapstructUtils.convert(s, CapitalInfo.class); capitalMapper.insert(capitalInfo); //validCapitalInfoBefore(add,capitalInfo); - validEntityBeforeSave(add); + }); } return flag; @@ -162,16 +165,19 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService public Boolean updateByBo(CapitalApplicationBo bo) { CapitalApplication update = MapstructUtils.convert(bo, CapitalApplication.class); validEntityBeforeUpdate(update); - bo.getCapitalInfoBolist().stream().forEach(s -> { - CapitalInfo capitalInfo = MapstructUtils.convert(s, CapitalInfo.class); - capitalMapper.deleteById(capitalInfo); - capitalMapper.insert(capitalInfo); - //TODO 做一些数据校验,如唯一约束 - CapitalApplication capitalApplication = baseMapper.selectById(bo.getId()); - if (bo.getState().equals("1") && !bo.getState().equals(capitalApplication.getState())) { - validCapitalInfoBefore(update, capitalInfo); - } - }); + if(CollUtil.isNotEmpty(bo.getCapitalInfoBolist())){ + bo.getCapitalInfoBolist().stream().forEach(s -> { + CapitalInfo capitalInfo = MapstructUtils.convert(s, CapitalInfo.class); + capitalMapper.deleteById(capitalInfo); + capitalMapper.insert(capitalInfo); + //TODO 做一些数据校验,如唯一约束 + CapitalApplication capitalApplication = baseMapper.selectById(bo.getId()); + if (bo.getState().equals("1") && !bo.getState().equals(capitalApplication.getState())) { + validCapitalInfoBefore(update, capitalInfo); + } + }); + } + return baseMapper.updateById(update) > 0; } @@ -186,7 +192,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService List assets = assetsMapper.selectList(assetQueryWrapper); if (assets.isEmpty()) { Asset asset = new Asset(); - asset.setModel(capitalInfo.getCapitalType()); + asset.setModel(capitalInfo.getCapitalType().toString()); asset.setName(capitalInfo.getCapitalName()); asset.setSpecs(capitalInfo.getSpec()); asset.setSpecs(capitalInfo.getSpec()); @@ -214,7 +220,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService * 保存前的数据校验 */ private void validEntityBeforeSave(CapitalApplication entity) { - + entity.setState("0"); } /** From 1a900ad3db9d155c1863bea8ef2211b6bf1cc103 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sun, 27 Jul 2025 19:46:18 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat(sis):=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E4=B8=8A=E4=B8=8B=E6=96=87=E7=99=BB=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/config/timer/AuthTimer.java | 99 ++++++++++--------- .../runner/HikDeviceApplicationRunner.java | 16 ++- 2 files changed, 66 insertions(+), 49 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java index 04f08c8..17b466e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java @@ -1,5 +1,7 @@ package org.dromara.sis.config.timer; +import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; @@ -9,12 +11,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.constant.CodePrefixConstants; -import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.property.api.RemoteResidentPersonService; import org.dromara.property.api.domain.vo.RemoteResidentPersonVo; import org.dromara.resource.api.RemoteFileService; import org.dromara.sis.api.domain.RemotePersonAuth; -import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.vo.*; import org.dromara.sis.sdk.e8.E8PlatformApi; import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; @@ -26,15 +26,12 @@ import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.ISisAuthGroupRefService; import org.dromara.sis.service.ISisAuthRecordService; import org.dromara.sis.service.ISisPersonLibImgService; -import org.dromara.sis.service.impl.SisPersonLibImgServiceImpl; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; -import java.util.ArrayList; -import java.util.Base64; -import java.util.Collection; -import java.util.List; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; /** * @author lsm @@ -63,47 +60,55 @@ public class AuthTimer { /** * 每两分钟执行一次 */ -// @Scheduled(cron = "0 */1 * * * ?") + @Scheduled(cron = "0 */2 * * * ?") public void autoAuth() { - List unAuthPerson = remoteResidentPersonService.queryUnAuthPerson(); -// if (CollUtil.isNotEmpty(unAuthPerson)) { -// -// try { -// for (RemoteResidentPersonVo person : unAuthPerson) { -// log.info("开始定时授权:{}", person.getId()); -// -// // 判断是否已存在授权 -// SisAuthRecordVo authRecord = sisAuthRecordService.queryByGroupIdAndPersonId(person.getAuthGroupId(), person.getId()); -// if (ObjectUtil.isEmpty(authRecord)) { -// // 无授权记录时,补录 -// this.syncAuthRecord(person); -// } -// -// // 读取人像 -// byte[] imgByte = remoteFileService.downloadToByteArray(Long.parseLong(person.getOssId())); -// if (imgByte == null) continue; -// -// // 写入华为盒子 -// Long huaweiId = syncHuaweiBox(person, imgByte); -// if (huaweiId == null) continue; -// -// // 更新人像信息huaweiBoxId -// Boolean update = sisPersonLibImgService.updateByPersonId(person.getId(), huaweiId); -// if (!update) continue; -// -// // 同步E8平台 -// Long e8Id = syncE8Plat(person, imgByte); -// if (e8Id == null) continue; -// -// // 更新入驻员工E8平台id -// remoteResidentPersonService.updateE8Id(person.getId(), e8Id); -// -// } -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// -// } + AtomicReference> unAuthPersonRef = new AtomicReference<>(new ArrayList<>()); + // 需要先设置模拟上下文 + SaTokenContextMockUtil.setMockContext(() -> { + // 模拟登录 + StpUtil.login(-8); // 模拟登录 + unAuthPersonRef.set(remoteResidentPersonService.queryUnAuthPerson()); + }); + + List unAuthPerson = unAuthPersonRef.get(); + if (CollUtil.isNotEmpty(unAuthPerson)) { + try { + for (RemoteResidentPersonVo person : unAuthPerson) { + log.info("开始定时授权:{}", person.getId()); + + // 判断是否已存在授权 + SisAuthRecordVo authRecord = sisAuthRecordService.queryByGroupIdAndPersonId(person.getAuthGroupId(), person.getId()); + if (ObjectUtil.isEmpty(authRecord)) { + // 无授权记录时,补录 + this.syncAuthRecord(person); + } + + // 读取人像 + byte[] imgByte = remoteFileService.downloadToByteArray(Long.parseLong(person.getOssId())); + if (imgByte == null) continue; + + // 写入华为盒子 + Long huaweiId = syncHuaweiBox(person, imgByte); + if (huaweiId == null) continue; + + // 更新人像信息huaweiBoxId + Boolean update = sisPersonLibImgService.updateByPersonId(person.getId(), huaweiId); + if (!update) continue; + + // 同步E8平台 + Long e8Id = syncE8Plat(person, imgByte); + if (e8Id == null) continue; + + // 更新入驻员工E8平台id + remoteResidentPersonService.updateE8Id(person.getId(), e8Id); + + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } else { + log.info("无待授权人员"); + } } private void syncAuthRecord(RemoteResidentPersonVo person) { diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java index 8cfb4fa..c756bb4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java @@ -1,5 +1,7 @@ package org.dromara.sis.runner; +import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -20,6 +22,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; @Slf4j @Component @@ -40,7 +43,7 @@ public class HikDeviceApplicationRunner implements ApplicationRunner { // 现在查询全部,后面要更具需要查询指定厂商的设备 HikDeviceApplicationRunner runner = SpringUtils.getAopProxy(this); // 梯控登录 -// runner.hikElevatorInfoLogin(); + runner.hikElevatorInfoLogin(); // 网络摄像头登录 runner.hikNetCameraLogin(); } @@ -52,8 +55,17 @@ public class HikDeviceApplicationRunner implements ApplicationRunner { sisElevatorInfoVos.forEach(item -> { // 执行设备登录操作 HikApiService.getInstance().login(item.getControlIp(), item.getControlPort().shortValue(), item.getControlAccount(), item.getControlPwd()); + + AtomicReference> floorInfoRef = new AtomicReference<>(); + // 模拟上下文 + SaTokenContextMockUtil.setMockContext(() -> { + // 模拟登录 + StpUtil.login(-8); + floorInfoRef.set(remoteFloorService.queryByUnitId(item.getUnitId())); + }); + // 根据单元ID获取楼层信息 - List floorInfo = remoteFloorService.queryByUnitId(item.getUnitId()); + List floorInfo = floorInfoRef.get(); // 下发权限 for (int i = 0; i < floorInfo.size(); i++) { From 041db8c4358a0e3cc53b512aca2f991deaa49826 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sun, 27 Jul 2025 19:47:05 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat(sis):=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E4=B8=8A=E4=B8=8B=E6=96=87=E7=99=BB=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/sis/config/timer/AuthTimer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java index 17b466e..fe841f3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java @@ -145,7 +145,7 @@ public class AuthTimer { return pId; } - private Long syncE8Plat(RemoteResidentPersonVo vo, byte[] imgByte) throws Exception { + private Long syncE8Plat(RemoteResidentPersonVo vo, byte[] imgByte) { log.info("e8平台上传照片"); String e8ImgUrl = e8PlatformApi.uploadFace(imgByte); From 56dcc609d1c1e0444997540fcb549e5394cd0a12 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sun, 27 Jul 2025 19:53:57 +0800 Subject: [PATCH 4/4] refactor(sis): 1 --- .../java/org/dromara/sis/runner/HikDeviceApplicationRunner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java index c756bb4..4a9cf27 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java @@ -43,7 +43,7 @@ public class HikDeviceApplicationRunner implements ApplicationRunner { // 现在查询全部,后面要更具需要查询指定厂商的设备 HikDeviceApplicationRunner runner = SpringUtils.getAopProxy(this); // 梯控登录 - runner.hikElevatorInfoLogin(); +// runner.hikElevatorInfoLogin(); // 网络摄像头登录 runner.hikNetCameraLogin(); }