From 59fae9cb2190f5563fc8014496b6395e201470e3 Mon Sep 17 00:00:00 2001 From: pengjie <17373303529@163.com> Date: Mon, 9 Jun 2025 18:55:32 +0800 Subject: [PATCH 1/7] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xmgl/modules/safetyhat/entity/SafetyHatData.java | 8 ++++++++ .../safetyhat/mapper/xml/SafetyHatDataMapper.xml | 4 ++-- .../mapper/xml/VehiclePositionDevMapper.xml | 2 +- .../service/impl/VehiclePositionDevServiceImpl.java | 10 ++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/SafetyHatData.java b/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/SafetyHatData.java index 9ed714cc0..3826e9b2f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/SafetyHatData.java +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/SafetyHatData.java @@ -113,6 +113,14 @@ public class SafetyHatData implements Serializable { @TableField(exist = false) private java.lang.String workerName; + /** + * 人脸照片 + */ + @Excel(name = "人脸照片", width = 15) + @ApiModelProperty(value = "人脸照片") + @TableField(exist = false) + private java.lang.String fieldAcquisitionUrl; + /** * 企业名称 */ diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml index 117482f74..455ce8a5a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml @@ -25,8 +25,8 @@ - select * from (select vpd.id, vpd.project_sn, vpd.dev_sn, vpd.type, vpd.heartbeat_time, vpd.fence_id, CONCAT(IFNULL(vpd.enterprise_name, ''), IFNULL(en.enterprise_name, '')) enterpriseName, + select * from (select vpd.id, vpd.enterprise_ids, vpd.project_sn, vpd.dev_sn, vpd.type, vpd.heartbeat_time, vpd.fence_id, CONCAT(IFNULL(vpd.enterprise_name, ''), IFNULL(en.enterprise_name, '')) enterpriseName, CONCAT(IFNULL(vpd.number_plate, ''), IFNULL(ci.car_number, '')) numberPlate, CONCAT(IFNULL(vpd.car_type, ''), IFNULL(ct.car_type_name, '')) carType, CONCAT(IFNULL(vpd.driver, ''), IFNULL(wi.worker_name, '')) driver, diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java index 3ab1658f8..77c9d8285 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java @@ -18,6 +18,8 @@ import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev; import com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo; import com.zhgd.xmgl.modules.vehicleposition.mapper.*; import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDevService; +import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; +import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper; import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.RefUtil; import org.apache.commons.collections.MapUtils; @@ -46,6 +48,8 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl queryPageList(HashMap paramMap) { @@ -127,8 +131,14 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl dealList(List list) { + List enterpriseInfos = enterpriseInfoMapper.selectList(null); for (VehiclePositionDev dev : list) { dev.setOnline(dev.getHeartbeatTime() != null && DateUtil.between(dev.getHeartbeatTime(), new Date(), DateUnit.MINUTE) < 30 ? 1 : 0); + List collect = enterpriseInfos.stream().filter(e -> StringUtils.isNotBlank(dev.getEnterpriseIds()) + && Arrays.asList(dev.getEnterpriseIds().split(",")).contains(e.getId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setEnterpriseName(collect.stream().map(c -> c.getEnterpriseName()).collect(Collectors.joining(","))); + } } return list; } From 9820582762c3980f0081544587d79ea1066e9f5c Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Mon, 15 Dec 2025 10:12:06 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=9C=BA=E5=9C=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=94=B9=E6=88=90https?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/zhgd/xmgl/call/JcCall.java | 10 +++---- .../zhgd/xmgl/call/util/jc/JcHttpUtil.java | 26 ++++++++++++++++++- .../xmgl/call/util/jc/JcHttpUtilTest.java | 26 +++++++++++++++++++ 3 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 src/test/java/com/zhgd/xmgl/call/util/jc/JcHttpUtilTest.java diff --git a/src/main/java/com/zhgd/xmgl/call/JcCall.java b/src/main/java/com/zhgd/xmgl/call/JcCall.java index a644d7fa3..d737869ba 100644 --- a/src/main/java/com/zhgd/xmgl/call/JcCall.java +++ b/src/main/java/com/zhgd/xmgl/call/JcCall.java @@ -8,6 +8,8 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; import com.zhgd.jeecg.common.mybatis.EntityMap; +import com.zhgd.xmgl.call.util.jc.AESUtil; +import com.zhgd.xmgl.call.util.jc.JcHttpUtil; import com.zhgd.xmgl.modules.electrical.entity.ElectricalData; import com.zhgd.xmgl.modules.electrical.entity.ElectricalDev; import com.zhgd.xmgl.modules.environment.entity.DustNoiseData; @@ -21,8 +23,6 @@ import com.zhgd.xmgl.modules.worker.service.IWorkerCertificateService; import com.zhgd.xmgl.modules.worker.service.IWorkerTypeService; import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl; import com.zhgd.xmgl.util.*; -import com.zhgd.xmgl.call.util.jc.AESUtil; -import com.zhgd.xmgl.call.util.jc.JcHttpUtil; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.apache.commons.lang3.StringUtils; @@ -105,7 +105,7 @@ public class JcCall { form.setPhone(AESUtil.Encrypt(workerInfo.getPhoneNumber(), AESUtil.SECRET)); } if (StrUtil.isNotBlank(workerInfo.getIdCardUpPhotoUrl())) { - form.setHeadImg(PathUtil.getServerUrl() + "/image/" + workerInfo.getIdCardUpPhotoUrl()); + form.setHeadImg(JcHttpUtil.replaceUrlToHttps(FileUtils.getOnlineUrl(workerInfo.getIdCardUpPhotoUrl()))); } form.setNation(workerInfo.getNation()); form.setIdcardType(1); @@ -139,7 +139,7 @@ public class JcCall { JcHttpUtil.UserSyncRequest.CertificateInfo certificateInfo = new JcHttpUtil.UserSyncRequest.CertificateInfo(); if (StrUtil.isNotBlank(o.get("photoUrl"))) { try { - certificateInfo.setCertificate(FileUtils.getOnlineUrl(o.get("photoUrl"))); + certificateInfo.setCertificate(JcHttpUtil.replaceUrlToHttps(FileUtils.getOnlineUrl(o.get("photoUrl")))); } catch (Exception e) { e.printStackTrace(); } @@ -243,7 +243,7 @@ public class JcCall { form.setDeviceName(ufaceDev.getDevName()); } form.setDirection(Objects.equals(workerAttendance.getPassType(), 2) ? 0 : 1); - form.setPhotoUrl(FileUtils.getOnlineUrl(workerAttendance.getImageUrl())); + form.setPhotoUrl(JcHttpUtil.replaceUrlToHttps(FileUtils.getOnlineUrl(workerAttendance.getImageUrl()))); form.setShowTime(workerAttendance.getCreateTime()); form.setIdcardNo(AESUtil.Encrypt(workerInfo.getIdCard(), AESUtil.SECRET)); form.setCreateDate(DateUtil.now()); diff --git a/src/main/java/com/zhgd/xmgl/call/util/jc/JcHttpUtil.java b/src/main/java/com/zhgd/xmgl/call/util/jc/JcHttpUtil.java index 795fac701..651a2e655 100644 --- a/src/main/java/com/zhgd/xmgl/call/util/jc/JcHttpUtil.java +++ b/src/main/java/com/zhgd/xmgl/call/util/jc/JcHttpUtil.java @@ -1,11 +1,13 @@ package com.zhgd.xmgl.call.util.jc; +import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import com.gexin.fastjson.JSON; import com.zhgd.xmgl.util.EnvironmentUtil; import lombok.Data; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; @@ -34,6 +36,7 @@ public class JcHttpUtil { */ public static String jcAllPush; public static EnvironmentUtil environmentUtil; + private static String jcHttpsUrl; public static String getJcProjectId() { return jcProjectId; @@ -191,6 +194,28 @@ public class JcHttpUtil { log.info("机场项目推送考勤记录,rs:{}", result); } + public static String getJcHttpsUrl() { + return jcHttpsUrl; + } + + @Value("${jcHttpsUrl:https://jc.zhgdyun.com:12112}") + public void setJcHttpsUrl(String jcHttpsUrl) { + JcHttpUtil.jcHttpsUrl = jcHttpsUrl; + } + + /** + * 替换成https + * + * @param onlineUrl + * @return + */ + public static String replaceUrlToHttps(String onlineUrl) { + if (StrUtil.isBlank(onlineUrl)) { + return null; + } + return StringUtils.replace(onlineUrl, "http://101.43.164.214:11111", getJcHttpsUrl()); + } + @Data public static class DustDataSyncRequest { private String projectId; @@ -638,7 +663,6 @@ public class JcHttpUtil { } } - /** * 配电数据同步接口请求参数 */ diff --git a/src/test/java/com/zhgd/xmgl/call/util/jc/JcHttpUtilTest.java b/src/test/java/com/zhgd/xmgl/call/util/jc/JcHttpUtilTest.java new file mode 100644 index 000000000..d8f0bc063 --- /dev/null +++ b/src/test/java/com/zhgd/xmgl/call/util/jc/JcHttpUtilTest.java @@ -0,0 +1,26 @@ +package com.zhgd.xmgl.call.util.jc; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mockStatic; + +@ExtendWith(MockitoExtension.class) +class JcHttpUtilTest { + + @Test + void replaceUrlToHttps() { + try (MockedStatic mockedStatic = mockStatic(JcHttpUtil.class);) { + mockedStatic.when(() -> JcHttpUtil.getJcHttpsUrl()).thenReturn("https://jc.zhgdyun.com:12112"); + mockedStatic.when(() -> JcHttpUtil.replaceUrlToHttps(any())).thenCallRealMethod(); + String expectedUrl = "https://jc.zhgdyun.com:12112/image/693b60ba45fca3742d953f19.jpg"; + String actualUrl = JcHttpUtil.replaceUrlToHttps("http://101.43.164.214:11111/image/693b60ba45fca3742d953f19.jpg"); + // 验证结果 + assertEquals(expectedUrl, actualUrl); + } + } +} From bdd64e1a89e540946a47a4adf99b46777e9f5db4 Mon Sep 17 00:00:00 2001 From: pengjie <17373303529@163.com> Date: Tue, 16 Dec 2025 09:27:39 +0800 Subject: [PATCH 3/7] =?UTF-8?q?APP=E8=B0=83=E6=95=B4+ICC=20AI=E9=A2=84?= =?UTF-8?q?=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../netty/tcp/handler/TcpNettyHandler.java | 4 + .../zhgd/netty/tcp/server/TcpNettyServer.java | 6 +- .../java/com/zhgd/xmgl/call/IccVideoCall.java | 70 +++++- .../xmgl/call/api/VideoItemManufacturer.java | 2 + .../AppComponentAuthController.java | 181 ++++++++++++++++ .../controller/AppComponentController.java | 202 ++++++++++++++++++ .../AppComponentUserController.java | 114 ++++++++++ .../controller/AppModuleUserController.java | 92 ++++++++ .../controller/CompanyController.java | 28 ++- .../ExternalCallBackController.java | 75 +++++++ .../controller/SystemUserController.java | 9 + .../basicdata/entity/AppComponent.java | 74 +++++++ .../basicdata/entity/AppComponentAuth.java | 86 ++++++++ .../basicdata/entity/AppComponentUser.java | 60 ++++++ .../basicdata/entity/AppModuleUser.java | 46 ++++ .../modules/basicdata/entity/BaseModule.java | 3 + .../entity/dto/AppComponentAuthDto.java | 22 ++ .../entity/vo/AppComponentAuthVo.java | 25 +++ .../entity/vo/CompanyProjectTreeVo.java | 31 +++ .../mapper/AppComponentAuthMapper.java | 23 ++ .../basicdata/mapper/AppComponentMapper.java | 19 ++ .../mapper/AppComponentUserMapper.java | 16 ++ .../basicdata/mapper/AppModuleUserMapper.java | 19 ++ .../basicdata/mapper/CompanyMapper.java | 4 + .../mapper/xml/AppComponentAuthMapper.xml | 10 + .../mapper/xml/AppComponentMapper.xml | 5 + .../mapper/xml/AppComponentUserMapper.xml | 5 + .../mapper/xml/AppModuleUserMapper.xml | 5 + .../basicdata/mapper/xml/CompanyMapper.xml | 38 ++++ .../service/IAppComponentAuthService.java | 25 +++ .../service/IAppComponentService.java | 14 ++ .../service/IAppComponentUserService.java | 20 ++ .../service/IAppModuleUserService.java | 26 +++ .../basicdata/service/ICompanyService.java | 10 + .../basicdata/service/ISystemUserService.java | 2 + .../impl/AppComponentAuthServiceImpl.java | 43 ++++ .../service/impl/AppComponentServiceImpl.java | 19 ++ .../impl/AppComponentUserServiceImpl.java | 103 +++++++++ .../impl/AppModuleUserServiceImpl.java | 65 ++++++ .../service/impl/CompanyServiceImpl.java | 142 ++++++++++++ .../service/impl/SystemUserServiceImpl.java | 6 + ...oMapper.xml => AppComponentUserMapper.xml} | 0 .../xmgl/modules/exam/entity/ExamTrain.java | 4 + .../exam/mapper/xml/ExamTrainMapper.xml | 2 +- .../project/controller/ProjectController.java | 7 + .../project/mapper/xml/ProjectMapper.xml | 3 + .../project/service/IProjectService.java | 2 + .../service/impl/ProjectServiceImpl.java | 26 +++ .../controller/VideoGroupController.java | 1 + .../video/controller/VideoItemController.java | 16 ++ .../service/impl/VideoGroupServiceImpl.java | 42 ++++ 51 files changed, 1841 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentAuthController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentUserController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppModuleUserController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponent.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentAuth.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentUser.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppModuleUser.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/dto/AppComponentAuthDto.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/AppComponentAuthVo.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/CompanyProjectTreeVo.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentAuthMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentUserMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppModuleUserMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentAuthMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentUserMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppModuleUserMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/IAppComponentAuthService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/IAppComponentService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/IAppComponentUserService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/IAppModuleUserService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/AppComponentAuthServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/AppComponentServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/AppComponentUserServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/AppModuleUserServiceImpl.java rename src/main/java/com/zhgd/xmgl/modules/elevator/mapper/xml/{ElevatorVideoMapper.xml => AppComponentUserMapper.xml} (100%) diff --git a/src/main/java/com/zhgd/netty/tcp/handler/TcpNettyHandler.java b/src/main/java/com/zhgd/netty/tcp/handler/TcpNettyHandler.java index 0f3df029e..3883ee2ef 100644 --- a/src/main/java/com/zhgd/netty/tcp/handler/TcpNettyHandler.java +++ b/src/main/java/com/zhgd/netty/tcp/handler/TcpNettyHandler.java @@ -50,6 +50,7 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler { String str = getString(bytes); str = str.trim(); log.info("tcp接收数据 >>> {} ", str); +// ctx.writeAndFlush(Unpooled.copiedBuffer("response message", CharsetUtil.UTF_8)); if (StringUtils.startsWith(str, HighFormworkSupport.TCP_DATA_PREFIX) && StringUtils.endsWith(str, HighFormworkSupport.TCP_DATA_END)) { log.info("高支模接收数据 >>> {} ", str); //接收高支模数据保存到mysql中 @@ -117,6 +118,7 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler { poisonousGasDevCurrentDataService.addDataFromTcp(hexString.trim()); } } + } private byte[] readBytes(Object msg) { @@ -164,6 +166,7 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler { public void channelReadComplete(ChannelHandlerContext ctx) { //刷新缓冲区,把消息发出去 ctx.flush(); + } @Override @@ -175,5 +178,6 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { log.info("channelActive:connect success!"); + ctx.writeAndFlush("欢迎连接 Netty 服务端!\n"); } } diff --git a/src/main/java/com/zhgd/netty/tcp/server/TcpNettyServer.java b/src/main/java/com/zhgd/netty/tcp/server/TcpNettyServer.java index d7bb05724..d6b0bab1b 100644 --- a/src/main/java/com/zhgd/netty/tcp/server/TcpNettyServer.java +++ b/src/main/java/com/zhgd/netty/tcp/server/TcpNettyServer.java @@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * @author chenws @@ -46,8 +48,8 @@ public class TcpNettyServer { protected void initChannel(SocketChannel socketChannel) throws Exception { //添加自定义处理器 socketChannel.pipeline() - //.addLast(new StringEncoder(StandardCharsets.UTF_8)) - //.addLast(new StringDecoder(Charset.forName("GBK"))) +// .addLast(new StringEncoder(StandardCharsets.UTF_8)) +// .addLast(new StringDecoder(Charset.forName("GBK"))) .addLast(tcpNettyHandler); } }); diff --git a/src/main/java/com/zhgd/xmgl/call/IccVideoCall.java b/src/main/java/com/zhgd/xmgl/call/IccVideoCall.java index 8f5f44180..a9ed2ce92 100644 --- a/src/main/java/com/zhgd/xmgl/call/IccVideoCall.java +++ b/src/main/java/com/zhgd/xmgl/call/IccVideoCall.java @@ -11,7 +11,9 @@ import com.dahuatech.hutool.http.Method; import com.dahuatech.hutool.json.JSONUtil; import com.dahuatech.icc.admin.enums.PlayBackFormatEnum; import com.dahuatech.icc.admin.enums.StreamTypeEnum; +import com.dahuatech.icc.config.OauthConfigUtil; import com.dahuatech.icc.exception.ClientException; +import com.dahuatech.icc.model.event.eventSubcribe.SubscribeRequest; import com.dahuatech.icc.model.video.ptzControl.OperateCameraRequest; import com.dahuatech.icc.model.video.ptzControl.OperateCameraRequest.Data; import com.dahuatech.icc.model.video.ptzControl.OperateCameraResponse; @@ -27,6 +29,7 @@ import com.dahuatech.icc.multiinone.admin.domain.RecordInfo; import com.dahuatech.icc.multiinone.admin.vo.*; import com.dahuatech.icc.oauth.http.IccClient; import com.dahuatech.icc.oauth.http.IccTokenResponse; +import com.dahuatech.icc.oauth.model.v202010.GeneralResponse; import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo; import com.dahuatech.icc.oauth.utils.HttpUtils; import com.zhgd.jeecg.common.execption.OpenAlertException; @@ -47,22 +50,24 @@ import model.v202207.talk.StopTalkResponse; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.io.File; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; @Slf4j @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class IccVideoCall implements VideoItemManufacturer { + + @Value("${serverUrl}") + private String serverUrl; + private ProjectVideoConfig config; @Lazy @Autowired @@ -321,6 +326,63 @@ public class IccVideoCall implements VideoItemManufacturer { return p; } + @Override + public void setIccSubscriptionByEvent(Map map) { + SubscribeRequest subscribeRequest = new SubscribeRequest(); + SubscribeRequest.Param param = new SubscribeRequest.Param(); + + SubscribeRequest.Param.Subsystem subsystem = new SubscribeRequest.Param.Subsystem(); + subsystem.setName(MapUtils.getString(map, "name")); + subsystem.setMagic(MapUtils.getString(map, "magic")); + param.setSubsystem(subsystem); + + List monitors = new ArrayList(); + SubscribeRequest.Param.Monitor monitor = new SubscribeRequest.Param.Monitor(); + //回调地址的接口代码可参考SubscribeCallBackController类中的receiveMsg方法 + monitor.setMonitor(serverUrl + "/xmgl/callBack/icc/subscribeCall"); + + Listevents = new ArrayList<>(); + SubscribeRequest.Param.Monitor.Event event = new SubscribeRequest.Param.Monitor.Event(); + //订阅报警事件,填alarm + event.setCategory("alarm"); + List authorities = new ArrayList(); + SubscribeRequest.Param.Monitor.Event.Authority authority=new SubscribeRequest.Param.Monitor.Event.Authority(); + + //若订阅指定报警类型可参考下列代码进行修改,若订阅所有报警类型,则把下列types相关代码删除即可 + String types1 = MapUtils.getString(map, "types"); + List types= new ArrayList<>(Arrays.asList(types1.split(","))); + authority.setTypes(types); + + //若订阅指定组织可参考下列代码进行修改,若订阅所有组织,则将下列orgs相关代码删除 +// Listorgs = new ArrayList<>(); +// orgs.add("001001"); +// orgs.add("001002"); +// authority.setOrgs(orgs); + + //若订阅指定设备和通道可参考下列代码进行修改,若订阅所有设备和通道,则将下列nodeCodes相关代码删除 +// ListnodeCodes=new ArrayList(); +// nodeCodes.add("1002511$7$0$0"); +// nodeCodes.add("1002509$7$0$0"); +// authority.setNodeCodes(nodeCodes); + + authorities.add(authority); + event.setAuthorities(authorities); + events.add(event); + monitor.setEvents(events); + monitors.add(monitor); + param.setMonitors(monitors); + subscribeRequest.setParam(param); + log.info("SubscribeDemo,subscribeAlarmEvent,request:{}", JSONUtil.toJsonStr(subscribeRequest)); + + OauthConfigUserPwdInfo config = OauthConfigUtil.getOauthConfig(); + try { + GeneralResponse response = HttpUtils.executeJson("/evo-apigw/evo-event/1.0.0/subscribe/mqinfo", subscribeRequest,null, Method.POST, config,GeneralResponse.class); + log.info("SubscribeDemo,subscribeAlarmEvent,response:{}", response.getResult()); + } catch (ClientException e) { + log.error(e.getErrMsg(), e); + } + } + /** * 对抓拍请求参数进行封装 * diff --git a/src/main/java/com/zhgd/xmgl/call/api/VideoItemManufacturer.java b/src/main/java/com/zhgd/xmgl/call/api/VideoItemManufacturer.java index c9e851ed6..55b703111 100644 --- a/src/main/java/com/zhgd/xmgl/call/api/VideoItemManufacturer.java +++ b/src/main/java/com/zhgd/xmgl/call/api/VideoItemManufacturer.java @@ -78,4 +78,6 @@ public interface VideoItemManufacturer { * @param map */ IPage manualHistoryCapture(Map map); + + void setIccSubscriptionByEvent(Map map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentAuthController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentAuthController.java new file mode 100644 index 000000000..cdbe404d9 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentAuthController.java @@ -0,0 +1,181 @@ +package com.zhgd.xmgl.modules.basicdata.controller; + +import com.zhgd.annotation.OperLog; +import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto; +import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo; +import com.zhgd.xmgl.util.PageUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.jeecg.common.util.oConvertUtils; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth; +import com.zhgd.xmgl.modules.basicdata.service.IAppComponentAuthService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import springfox.documentation.annotations.ApiIgnore; + + +/** + * @Title: Controller + * @Description: APP组件授权信息 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@RestController +@RequestMapping("/xmgl/appComponentAuth") +@Slf4j +@Api(tags = "APP组件授权信息管理") +public class AppComponentAuthController { + @Autowired + private IAppComponentAuthService appComponentAuthService; + + /** + * 分页列表查询 + * + * @return + */ + @OperLog(operModul = "APP组件授权信息管理", operType = "分页查询", operDesc = "分页列表查询APP组件授权信息信息") + @ApiOperation(value = " 分页列表查询APP组件授权信息信息", notes = "分页列表查询APP组件授权信息信息", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"), + }) + @PostMapping(value = "/page") + public Result> queryPageList(@ApiIgnore @RequestBody Map map) { + QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(AppComponentAuth.class, map); + Page page = PageUtil.getPage(map); + IPage pageList = appComponentAuthService.page(page, queryWrapper); + return Result.success(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @OperLog(operModul = "APP组件授权信息管理", operType = "列表查询", operDesc = "列表查询APP组件授权信息信息") + @ApiOperation(value = " 列表查询APP组件授权信息信息", notes = "列表查询APP组件授权信息信息", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "type", value = "类型(1:企业;2:项目)", paramType = "body", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "authType", value = "授权类型(1:企业;2:项目)", paramType = "body", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "sn", value = "企业/项目SN", paramType = "body", required = true, dataType = "Integer"), + }) + @PostMapping(value = "/list") + public Result> queryList(@ApiIgnore @RequestBody Map map) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(AppComponentAuth.class, map, "a."); + List list = appComponentAuthService.getList(queryWrapper); + return Result.success(list); + } + + + /** + * 添加 + * + * @param appComponentAuth + * @return + */ + @OperLog(operModul = "APP组件授权信息管理", operType = "新增", operDesc = "添加修改APP组件授权信息信息") + @ApiOperation(value = " 添加修改APP组件授权信息信息", notes = "添加修改APP组件授权信息信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody AppComponentAuthVo appComponentAuth) { + appComponentAuthService.saveInfo(appComponentAuth); + return Result.success("添加成功!"); + } + + /** + * 通过id删除 + * + * @return + */ + @OperLog(operModul = "APP组件授权信息管理", operType = "删除", operDesc = "删除APP组件授权信息信息") + @ApiOperation(value = "删除APP组件授权信息信息", notes = "删除APP组件授权信息信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "APP组件授权信息ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/delete") + public Result delete(@ApiIgnore @RequestBody AppComponentAuth appComponentAuth) { + Result result = new Result(); + AppComponentAuth appComponentAuthEntity = appComponentAuthService.getById(appComponentAuth.getId()); + if (appComponentAuthEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = appComponentAuthService.removeById(appComponentAuth.getId()); + if (ok) { + result.success("删除成功!"); + } else { + result.success("操作失败!"); + } + } + return result; + } + + /** + * 批量删除 + * + * @return + */ + @OperLog(operModul = "APP组件授权信息管理", operType = "批量删除", operDesc = "批量删除APP组件授权信息信息") + @ApiOperation(value = "批量删除APP组件授权信息信息", notes = "批量删除APP组件授权信息信息", httpMethod = "POST") + @ApiImplicitParam(name = "ids", value = "APP组件授权信息ID字符串", paramType = "body", required = true, dataType = "String") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@ApiIgnore @RequestBody Map map) { + Result result = new Result(); + String ids = MapUtils.getString(map, "ids"); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.appComponentAuthService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @return + */ + @OperLog(operModul = "APP组件授权信息管理", operType = "查询", operDesc = "通过id查询APP组件授权信息信息") + @ApiOperation(value = "通过id查询APP组件授权信息信息", notes = "通过id查询APP组件授权信息信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "APP组件授权信息ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/queryById") + public Result queryById(@ApiIgnore @RequestBody AppComponentAuth appComponentAuthVo) { + Result result = new Result(); + AppComponentAuth appComponentAuth = appComponentAuthService.getById(appComponentAuthVo.getId()); + if (appComponentAuth == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(appComponentAuth); + result.setSuccess(true); + } + return result; + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentController.java new file mode 100644 index 000000000..40c42e9ac --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentController.java @@ -0,0 +1,202 @@ +package com.zhgd.xmgl.modules.basicdata.controller; + +import com.zhgd.annotation.OperLog; +import com.zhgd.xmgl.util.PageUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.jeecg.common.util.oConvertUtils; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponent; +import com.zhgd.xmgl.modules.basicdata.service.IAppComponentService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import springfox.documentation.annotations.ApiIgnore; + + +/** + * @Title: Controller + * @Description: APP组件库 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@RestController +@RequestMapping("/xmgl/appComponent") +@Slf4j +@Api(tags = "APP组件库管理") +public class AppComponentController { + @Autowired + private IAppComponentService appComponentService; + + /** + * 分页列表查询 + * + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "分页查询", operDesc = "分页列表查询APP组件库信息") + @ApiOperation(value = " 分页列表查询APP组件库信息", notes = "分页列表查询APP组件库信息", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"), + }) + @PostMapping(value = "/page") + public Result> queryPageList(@ApiIgnore @RequestBody Map map) { + QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(AppComponent.class, map); + Page page = PageUtil.getPage(map); + IPage pageList = appComponentService.page(page, queryWrapper); + return Result.success(pageList); + } + + /** + * 列表查询 + * + * @param appComponent + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "列表查询", operDesc = "列表查询APP组件库信息") + @ApiOperation(value = " 列表查询APP组件库信息", notes = "列表查询APP组件库信息", httpMethod = "POST") + @PostMapping(value = "/list") + public Result> queryList(@RequestBody AppComponent appComponent) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appComponent); + List list = appComponentService.list(queryWrapper); + return Result.success(list); + } + + + /** + * 添加 + * + * @param appComponent + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "新增", operDesc = "添加APP组件库信息") + @ApiOperation(value = " 添加APP组件库信息", notes = "添加APP组件库信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody AppComponent appComponent) { + Result result = new Result(); + appComponentService.save(appComponent); + return Result.success("添加成功!"); + } + + /** + * 编辑 + * + * @param appComponent + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "修改", operDesc = "编辑APP组件库信息") + @ApiOperation(value = "编辑APP组件库信息", notes = "编辑APP组件库信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result edit(@RequestBody AppComponent appComponent) { + Result result = new Result(); + AppComponent appComponentEntity = appComponentService.getById(appComponent.getId()); + if (appComponentEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = appComponentService.updateById(appComponent); + if (ok) { + result.success("修改成功!"); + } else { + result.success("操作失败!"); + } + } + + return result; + } + + /** + * 通过id删除 + * + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "删除", operDesc = "删除APP组件库信息") + @ApiOperation(value = "删除APP组件库信息", notes = "删除APP组件库信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "APP组件库ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/delete") + public Result delete(@ApiIgnore @RequestBody AppComponent appComponent) { + Result result = new Result(); + AppComponent appComponentEntity = appComponentService.getById(appComponent.getId()); + if (appComponentEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = appComponentService.removeById(appComponent.getId()); + if (ok) { + result.success("删除成功!"); + } else { + result.success("操作失败!"); + } + } + return result; + } + + /** + * 批量删除 + * + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "批量删除", operDesc = "批量删除APP组件库信息") + @ApiOperation(value = "批量删除APP组件库信息", notes = "批量删除APP组件库信息", httpMethod = "POST") + @ApiImplicitParam(name = "ids", value = "APP组件库ID字符串", paramType = "body", required = true, dataType = "String") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@ApiIgnore @RequestBody Map map) { + Result result = new Result(); + String ids = MapUtils.getString(map, "ids"); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.appComponentService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @return + */ + @OperLog(operModul = "APP组件库管理", operType = "查询", operDesc = "通过id查询APP组件库信息") + @ApiOperation(value = "通过id查询APP组件库信息", notes = "通过id查询APP组件库信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "APP组件库ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/queryById") + public Result queryById(@ApiIgnore @RequestBody AppComponent appComponentVo) { + Result result = new Result(); + AppComponent appComponent = appComponentService.getById(appComponentVo.getId()); + if (appComponent == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(appComponent); + result.setSuccess(true); + } + return result; + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentUserController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentUserController.java new file mode 100644 index 000000000..c8118d115 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppComponentUserController.java @@ -0,0 +1,114 @@ +package com.zhgd.xmgl.modules.basicdata.controller; + +import com.zhgd.annotation.OperLog; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth; +import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto; +import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo; +import com.zhgd.xmgl.util.PageUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.jeecg.common.util.oConvertUtils; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentUser; +import com.zhgd.xmgl.modules.basicdata.service.IAppComponentUserService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import springfox.documentation.annotations.ApiIgnore; + + +/** + * @Title: Controller + * @Description: 用户自定义组件授权 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@RestController +@RequestMapping("/xmgl/appComponentUser") +@Slf4j +@Api(tags = "用户自定义组件授权管理") +public class AppComponentUserController { + @Autowired + private IAppComponentUserService appComponentUserService; + + /** + * 列表查询 + * + * @param appComponentUser + * @return + */ + @OperLog(operModul = "用户自定义组件授权管理", operType = "列表查询", operDesc = "获取当前用户的组件列表") + @ApiOperation(value = "获取当前用户的组件列表", notes = "获取当前用户的组件列表", httpMethod = "POST") + @PostMapping(value = "/getMyComponentList") + public Result> getMyComponentList(@RequestBody AppComponentUser appComponentUser) { + return Result.success(appComponentUserService.getMyComponentList(appComponentUser)); + } + + + /** + * 通过id删除 + * @return + */ + @OperLog(operModul = "用户自定义组件授权管理", operType = "删除", operDesc = "删除用户自定义组件授权信息") + @ApiOperation(value = "删除用户自定义组件授权信息", notes = "删除用户自定义组件授权信息" , httpMethod="POST") + @ApiImplicitParam(name = "id", value = "用户自定义组件授权ID", paramType = "body", required = true, dataType = "Integer") + @PostMapping(value = "/delete") + public Result delete(@ApiIgnore @RequestBody AppComponentUser appComponentUser) { + Result result = new Result(); + AppComponentUser appComponentUserEntity = appComponentUserService.getById(appComponentUser.getId()); + if(appComponentUserEntity == null) { + result.error500("未找到对应实体"); + }else { + boolean ok = appComponentUserService.removeById(appComponentUser.getId()); + if(ok) { + result.success("删除成功!"); + } else { + result.success("操作失败!"); + } + } + return result; + } + + /** + * 添加 + * + * @param appComponentUser + * @return + */ + @OperLog(operModul = "用户自定义组件授权管理", operType = "新增", operDesc = "添加用户自定义组件授权信息") + @ApiOperation(value = " 添加用户自定义组件授权信息", notes = "添加用户自定义组件授权信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody AppComponentUser appComponentUser) { + appComponentUserService.saveInfo(appComponentUser); + return Result.success("添加成功!"); + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppModuleUserController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppModuleUserController.java new file mode 100644 index 000000000..fc9fab2d3 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/AppModuleUserController.java @@ -0,0 +1,92 @@ +package com.zhgd.xmgl.modules.basicdata.controller; + +import com.zhgd.annotation.OperLog; +import com.zhgd.xmgl.modules.basicdata.entity.BaseModule; +import com.zhgd.xmgl.util.PageUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.jeecg.common.util.oConvertUtils; +import com.zhgd.xmgl.modules.basicdata.entity.AppModuleUser; +import com.zhgd.xmgl.modules.basicdata.service.IAppModuleUserService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import springfox.documentation.annotations.ApiIgnore; + + +/** + * @Title: Controller + * @Description: APP常用应用 + * @author: pengj + * @date: 2025-11-05 + * @version: V1.0 + */ +@RestController +@RequestMapping("/xmgl/appModuleUser") +@Slf4j +@Api(tags = "APP常用应用管理") +public class AppModuleUserController { + @Autowired + private IAppModuleUserService appModuleUserService; + + + /** + * 列表查询 + * + * @return + */ + @OperLog(operModul = "APP常用应用管理", operType = "列表查询", operDesc = "获取当前账号的APP常用应用信息") + @ApiOperation(value = " 获取当前账号的APP常用应用信息", notes = "获取当前账号的APP常用应用信息", httpMethod = "POST") + @GetMapping(value = "/list") + public Result> queryList() { + return Result.success(appModuleUserService.queryList()); + } + + + /** + * 编辑 + * @param + * @return + */ + @OperLog(operModul = "权限管理",operType = "编辑用户查看的模块",operDesc = "编辑用户查看的模块") + @ApiOperation(value = "编辑模块-用户关联信息", notes = "编辑模块-用户关联信息" , httpMethod="POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "人员账号Id", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "moduleIdStr", value = "模块ID,多个时逗号分割", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/edit") + public Result edit(@RequestBody Map map) { + appModuleUserService.editBaseModuleUser(map); + return Result.ok(); + } + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java index 6063017c9..9ef54483e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java @@ -8,6 +8,7 @@ import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.basicdata.entity.Company; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; +import com.zhgd.xmgl.modules.basicdata.entity.vo.CompanyProjectTreeVo; import com.zhgd.xmgl.modules.basicdata.entity.vo.GetOrgSnListVo; import com.zhgd.xmgl.modules.basicdata.service.ICompanyService; import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; @@ -20,10 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import java.util.HashMap; @@ -183,6 +181,13 @@ public class CompanyController { } + @ApiOperation(value = "获取企业项目树", notes = "获取企业项目树") + @GetMapping("/getCompanyProjectTree") + public Result> getCompanyProjectTree() { + return Result.success(companyService.getCompanyProjectTree()); + } + + /** * 接口新版废弃 * @@ -235,6 +240,7 @@ public class CompanyController { @ApiImplicitParam(name = "videoType", value = "查询类型,0无视频,1有视频", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "standardType", value = "是否查询标养室,0否,1是", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "projectType", value = "是否展示,0否,1是", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "bulidStatus", value = "项目状态", paramType = "body", required = true, dataType = "String"), }) @PostMapping("/getComapnyStatisticsList") @PreAuthorize("@perm.hasSnAccess(#map['sn'])") @@ -242,6 +248,20 @@ public class CompanyController { return Result.success(companyService.getCompanyStatisticsList(map)); } + @ApiOperation(value = "APP统计企业下项目各项目统计", notes = "APP统计企业下项目各项目统计") + @ApiImplicitParams({ + @ApiImplicitParam(name = "sn", value = "公司sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "videoType", value = "查询类型,0无视频,1有视频", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "standardType", value = "是否查询标养室,0否,1是", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "projectType", value = "是否展示,0否,1是", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "bulidStatus", value = "项目状态", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping("/getAppComapnyStatisticsList") + @PreAuthorize("@perm.hasSnAccess(#map['sn'])") + public Result> getAppComapnyStatisticsList(@RequestBody Map map) { + return Result.success(companyService.getAppCompanyStatisticsList(map)); + } + @ApiOperation(value = "供应商选择审批组织(所有企业)", notes = "供应商选择审批组织(所有企业)") @PostMapping("/getComapnyStatisticsListBySupplier") public Result> getComapnyStatisticsListBySupplier(@RequestBody Map map) { diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java index 302fefdbc..de695e640 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java @@ -3,12 +3,17 @@ package com.zhgd.xmgl.modules.basicdata.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.xuyanwu.spring.file.storage.FileInfo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.dahuatech.hutool.json.JSONObject; import com.dahuatech.icc.model.event.eventSubcribe.ReceiveMsgVO; import com.dahuatech.icc.oauth.model.v202010.GeneralResponse; import com.gexin.fastjson.JSON; import com.gexin.fastjson.TypeReference; +import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.xmgl.async.AsyncAiAnalyse; import com.zhgd.xmgl.async.AsyncProjectWork; import com.zhgd.xmgl.call.IccCarCall; import com.zhgd.xmgl.call.IccWorkerCall; @@ -17,12 +22,20 @@ import com.zhgd.xmgl.call.api.WorkerManufacturer; import com.zhgd.xmgl.call.factory.CarManufacturerFactory; import com.zhgd.xmgl.call.factory.WorkerManufacturerFactory; import com.zhgd.xmgl.call.util.IccHttpUtil; +import com.zhgd.xmgl.constant.Cts; import com.zhgd.xmgl.modules.car.entity.CarCamera; import com.zhgd.xmgl.modules.car.entity.CarInfo; import com.zhgd.xmgl.modules.car.entity.CarPassRecord; import com.zhgd.xmgl.modules.car.service.ICarCameraService; import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl; import com.zhgd.xmgl.modules.car.service.impl.CarPassRecordServiceImpl; +import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig; +import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper; +import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareAlarmRecord; +import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareRecord; +import com.zhgd.xmgl.modules.video.entity.VideoItem; +import com.zhgd.xmgl.modules.video.mapper.AiAnalyseHardWareAlarmRecordMapper; +import com.zhgd.xmgl.modules.video.mapper.AiAnalyseHardWareRecordMapper; import com.zhgd.xmgl.modules.worker.entity.UfaceDev; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.service.IUfaceDevService; @@ -32,9 +45,13 @@ import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl; import com.zhgd.xmgl.util.AsyncTaskUtil; +import com.zhgd.xmgl.util.MapUtil; +import com.zhgd.xmgl.util.MessageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Lazy; @@ -93,6 +110,21 @@ public class ExternalCallBackController { @Autowired @Lazy private IWorkerAttendanceService workerAttendanceService; + @Lazy + @Resource + private AiAnalyseHardWareAlarmRecordMapper aiAnalyseHardWareAlarmRecordMapper; + + @Lazy + @Resource + private AiAnalyseHardWareRecordMapper aiAnalyseHardWareRecordMapper; + + @Lazy + @Autowired + private AsyncAiAnalyse asyncAiAnalyse; + + @Lazy + @Autowired + private ProjectUfaceConfigMapper projectUfaceConfigMapper; @ApiOperation(value = "icc订阅回调接口", notes = "icc订阅回调接口", httpMethod = "POST") @PostMapping(value = "/icc/subscribeCall") @@ -124,6 +156,14 @@ public class ExternalCallBackController { log.info("实时刷卡记录推送事件:{}", param); saveWorkerAttendance(alarmRecordEventExt); } + } else { + JSONObject info = receiveMsgVO.getInfo(); + List alarms = new ArrayList<>(); + if (alarms.contains(MapUtils.getString(info, "alarmType"))) { + //AI算法推送事件 + log.info("AI算法推送事件:{}", param); + saveAIRecord(info); + } } } JSONObject jsonObjectRt = new JSONObject(); @@ -132,6 +172,41 @@ public class ExternalCallBackController { return jsonObjectRt; } + /** + * 保存icc门禁记录 + * + * @param obj + */ + private void saveAIRecord(JSONObject obj) { + log.info("调用AiAnalyseHardWareAlarmRecordServiceImpl#saveAiAnalyseHardWareAlarmRecord方法,参数为:{}", obj); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(AiAnalyseHardWareRecord::getHardwareId, MapUtils.getString(obj, "deviceCode")); + AiAnalyseHardWareRecord aiAnalyseHardWareRecord = aiAnalyseHardWareRecordMapper.selectOne(queryWrapper); + if (aiAnalyseHardWareRecord == null) { + throw new OpenAlertException(MessageUtil.get("EquipmentNumIncorrectErr")); + } + AiAnalyseHardWareAlarmRecord aiAnalyseHardWareAlarmRecord = new AiAnalyseHardWareAlarmRecord(); + aiAnalyseHardWareAlarmRecord.setCreateTime(MapUtils.getString(obj, "alarmDate")); + aiAnalyseHardWareAlarmRecord.setAlarmType(MapUtils.getInteger(obj, "alarmType")); + aiAnalyseHardWareAlarmRecord.setHardwareId(aiAnalyseHardWareRecord.getHardwareId()); + aiAnalyseHardWareAlarmRecord.setHardwareName(aiAnalyseHardWareRecord.getHardwareName()); + aiAnalyseHardWareAlarmRecord.setLocation(MapUtils.getString(obj, "deviceName")); + MapUtils.getString(obj, "deviceName"); + aiAnalyseHardWareAlarmRecord.setProjectSn(aiAnalyseHardWareRecord.getProjectSn()); + aiAnalyseHardWareAlarmRecord.setStatus(1); + try { + ProjectUfaceConfig projectUfaceConfig = projectUfaceConfigMapper.selectOne(Wrappers.lambdaQuery() + .eq(ProjectUfaceConfig::getProjectSn, aiAnalyseHardWareRecord.getProjectSn())); + File file = IccHttpUtil.downloadOssFile(MapUtils.getString(obj, "alarmPicture"), projectUfaceConfig); + aiAnalyseHardWareAlarmRecord.setImageUrl(Optional.ofNullable(file).map(File::getName).orElse(null)); + } catch (Exception e) { + log.error("icc回调AI预警下载图片失败", e); + } + aiAnalyseHardWareAlarmRecordMapper.insert(aiAnalyseHardWareAlarmRecord); + //将数据通过MQTT转发到前台 + asyncAiAnalyse.sendAiAnalyse(aiAnalyseHardWareAlarmRecord, Cts.PROJECT_LEVEL); + } + /** * 保存icc门禁记录 * diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java index 9671aa4d1..5c0ff3e17 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java @@ -190,6 +190,15 @@ public class SystemUserController { return Result.success(systemUserService.getProjectChildernSystemUserList(map)); } + @ApiOperation(value = "查找账号列表,根据sn", notes = "查找账号列表,根据sn", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "sn", required = true, value = "sn", paramType = "body"), + }) + @PostMapping(value = "/getSystemUserList") + public Result> getSystemUserList(@RequestBody Map map) { + return Result.success(systemUserService.getSystemUserList(map)); + } + @OperLog(operModul = "账号管理", operType = "分页查找项目子账号列表", operDesc = "分页查找项目子账号列表") @ApiOperation(value = "分页查找项目子账号列表", notes = "分页查找项目子账号列表", httpMethod = "POST") @ApiImplicitParams({ diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponent.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponent.java new file mode 100644 index 000000000..0ef6d2879 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponent.java @@ -0,0 +1,74 @@ +package com.zhgd.xmgl.modules.basicdata.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: APP组件库 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@Data +@TableName("app_component") +@ApiModel(value = "AppComponent实体类", description = "AppComponent") +public class AppComponent implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * APP组件授权ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "APP组件ID") + private Long id; + /** + * 组件名称 + */ + @Excel(name = "组件名称", width = 15) + @ApiModelProperty(value = "组件名称") + private String name; + /** + * 组件标识 + */ + @Excel(name = "组件标识", width = 15) + @ApiModelProperty(value = "组件标识") + private String code; + /** + * 描述 + */ + @Excel(name = "描述", width = 15) + @ApiModelProperty(value = "描述") + private String remark; + /** + * 组件类型(1:企业;2:项目) + */ + @Excel(name = "组件类型(1:企业;2:项目)", width = 15) + @ApiModelProperty(value = "组件类型(1:企业;2:项目)") + private String type; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private Date updateTime; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentAuth.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentAuth.java new file mode 100644 index 000000000..73dd3b8f1 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentAuth.java @@ -0,0 +1,86 @@ +package com.zhgd.xmgl.modules.basicdata.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: APP组件授权信息 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@Data +@TableName("app_component_auth") +@ApiModel(value = "AppComponentAuth实体类", description = "AppComponentAuth") +public class AppComponentAuth implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * APP组件ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "APP组件授权ID") + private Long id; + /** + * 组件自定义名称 + */ + @Excel(name = "组件自定义名称", width = 15) + @ApiModelProperty(value = "组件自定义名称") + private String customizeName; + /** + * 组件ID + */ + @Excel(name = "组件ID", width = 15) + @ApiModelProperty(value = "组件ID") + private Long componentId; + /** + * 排序 + */ + @Excel(name = "排序", width = 15) + @ApiModelProperty(value = "排序") + private Integer sort; + /** + * 企业/项目SN + */ + @Excel(name = "企业/项目SN", width = 15) + @ApiModelProperty(value = "企业/项目SN") + private String sn; + /** + * 类型(1:企业;2:项目) + */ + @Excel(name = "类型(1:企业;2:项目)", width = 15) + @ApiModelProperty(value = "类型(1:企业;2:项目)") + private Integer type; + /** + * 授权类型(1:企业;2:项目) + */ + @Excel(name = "授权类型(1:企业;2:项目)", width = 15) + @ApiModelProperty(value = "授权类型(1:企业;2:项目)") + private Integer authType; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private Date updateTime; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentUser.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentUser.java new file mode 100644 index 000000000..6d64d8749 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppComponentUser.java @@ -0,0 +1,60 @@ +package com.zhgd.xmgl.modules.basicdata.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 用户自定义组件授权 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@Data +@TableName("app_component_user") +@ApiModel(value = "appComponentUser实体类", description = "appComponentUser") +public class AppComponentUser implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户APP组件授权ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "用户APP组件授权ID") + private Long id; + /** + * 用户ID + */ + @Excel(name = "用户ID", width = 15) + @ApiModelProperty(value = "用户ID") + private Long userId; + /** + * 企业/项目SN + */ + @Excel(name = "企业/项目SN", width = 15) + @ApiModelProperty(value = "企业/项目SN") + private String sn; + /** + * 授权类型(1:企业;2:项目) + */ + @Excel(name = "授权类型(1:企业;2:项目)", width = 15) + @ApiModelProperty(value = "授权类型(1:企业;2:项目)") + private Integer type; + /** + * 组件ID(多个逗号隔开) + */ + @Excel(name = "组件ID(多个逗号隔开)", width = 15) + @ApiModelProperty(value = "组件ID(多个逗号隔开)") + private String componentId; + + @TableField(exist = false) + @ApiModelProperty(value = "当无个人组件时是否返回默认全部") + private Integer defaultFlag; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppModuleUser.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppModuleUser.java new file mode 100644 index 000000000..06cd6291e --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/AppModuleUser.java @@ -0,0 +1,46 @@ +package com.zhgd.xmgl.modules.basicdata.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: APP常用应用 + * @author: pengj + * @date: 2025-11-05 + * @version: V1.0 + */ +@Data +@TableName("app_module_user") +@ApiModel(value = "AppModuleUser实体类", description = "AppModuleUser") +public class AppModuleUser implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private Long id; + /** + * 人员ID + */ + @Excel(name = "人员ID", width = 15) + @ApiModelProperty(value = "人员ID") + private Long userId; + /** + * 模块ID + */ + @Excel(name = "模块ID", width = 15) + @ApiModelProperty(value = "模块ID") + private Long moduleId; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/BaseModule.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/BaseModule.java index 367150fad..63c34fb4d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/BaseModule.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/BaseModule.java @@ -95,6 +95,9 @@ public class BaseModule implements Serializable { @ApiModelProperty(value = "排序下标") private java.lang.String sortIndex; + @ApiModelProperty(value = "APP的logo路径") + private java.lang.String appLogo; + @TableField(exist = false) @ApiModelProperty(value = "模块所属菜单") private List menuList; diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/dto/AppComponentAuthDto.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/dto/AppComponentAuthDto.java new file mode 100644 index 000000000..9ea433606 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/dto/AppComponentAuthDto.java @@ -0,0 +1,22 @@ +package com.zhgd.xmgl.modules.basicdata.entity.dto; + +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth; +import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.util.List; + +@Data +public class AppComponentAuthDto extends AppComponentAuth { + + @ApiModelProperty(value = "组件名称") + private String name; + + @ApiModelProperty(value = "组件标识") + private String code; + + @ApiModelProperty(value = "描述") + private String remark; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/AppComponentAuthVo.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/AppComponentAuthVo.java new file mode 100644 index 000000000..41985f40d --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/AppComponentAuthVo.java @@ -0,0 +1,25 @@ +package com.zhgd.xmgl.modules.basicdata.entity.vo; + +import com.zhgd.xmgl.modules.basicdata.entity.AppComponent; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth; +import com.zhgd.xmgl.modules.basicdata.entity.dto.ScreenAuthDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class AppComponentAuthVo { + + @ApiModelProperty(value = "类型(1:企业;2:项目)") + private Integer type; + + @ApiModelProperty(value = "授权类型(1:企业;2:项目)") + private Integer authType; + + @ApiModelProperty(value = "对应唯一标识SN") + private String uniqueFlag; + + @ApiModelProperty(value = "组件信息") + List componentAuth; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/CompanyProjectTreeVo.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/CompanyProjectTreeVo.java new file mode 100644 index 000000000..ed1e393cc --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/vo/CompanyProjectTreeVo.java @@ -0,0 +1,31 @@ +package com.zhgd.xmgl.modules.basicdata.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class CompanyProjectTreeVo { + + @ApiModelProperty(value = "主键ID") + private Long id; + + @ApiModelProperty(value = "父ID") + private Long parentId; + + @ApiModelProperty(value = "唯一标识") + private String sn; + + @ApiModelProperty(value = "1总部,2区域,3城市,4项目部, 5项目") + private Integer type; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "顶级SN") + private String headquartersSn; + + @ApiModelProperty(value = "子级") + private List childrenList; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentAuthMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentAuthMapper.java new file mode 100644 index 000000000..746561f3c --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentAuthMapper.java @@ -0,0 +1,23 @@ +package com.zhgd.xmgl.modules.basicdata.mapper; + +import java.util.List; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: APP组件授权信息 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@Mapper +public interface AppComponentAuthMapper extends BaseMapper { + + List getList(@Param(Constants.WRAPPER) Wrapper wrapper); +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentMapper.java new file mode 100644 index 000000000..f6606c791 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentMapper.java @@ -0,0 +1,19 @@ +package com.zhgd.xmgl.modules.basicdata.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponent; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: APP组件库 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@Mapper +public interface AppComponentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentUserMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentUserMapper.java new file mode 100644 index 000000000..49ddac741 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppComponentUserMapper.java @@ -0,0 +1,16 @@ +package com.zhgd.xmgl.modules.basicdata.mapper; + +import org.apache.ibatis.annotations.Mapper; +import com.zhgd.xmgl.modules.basicdata.entity.AppComponentUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 用户自定义组件授权 + * @author: pengj + * @date: 2025-11-04 + * @version: V1.0 + */ +@Mapper +public interface AppComponentUserMapper extends BaseMapper { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppModuleUserMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppModuleUserMapper.java new file mode 100644 index 000000000..42a258350 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/AppModuleUserMapper.java @@ -0,0 +1,19 @@ +package com.zhgd.xmgl.modules.basicdata.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import com.zhgd.xmgl.modules.basicdata.entity.AppModuleUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: APP常用应用 + * @author: pengj + * @date: 2025-11-05 + * @version: V1.0 + */ +@Mapper +public interface AppModuleUserMapper extends BaseMapper { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java index 898038ce4..18c8f48b2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.wflow.bean.vo.OrgTreeVo; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.basicdata.entity.Company; +import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -30,6 +31,9 @@ public interface CompanyMapper extends BaseMapper { */ List selectCompanyPage(Page page, @Param("param") Map map); + + List getSystemUserList(Map map); + /** * 分层获取一级二级企业列表 * diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentAuthMapper.xml b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentAuthMapper.xml new file mode 100644 index 000000000..c1cd9e8dd --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentAuthMapper.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentMapper.xml b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentMapper.xml new file mode 100644 index 000000000..dd348d153 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentUserMapper.xml b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentUserMapper.xml new file mode 100644 index 000000000..0363e9529 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppComponentUserMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppModuleUserMapper.xml b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppModuleUserMapper.xml new file mode 100644 index 000000000..5533bf9d7 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/AppModuleUserMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/CompanyMapper.xml b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/CompanyMapper.xml index cb79daa69..d7194c808 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/CompanyMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/CompanyMapper.xml @@ -49,6 +49,44 @@ AND a.headquarters_sn = #{headquartersSn} + + - select * from (select et.*, s.name as subjectName, u.real_name createByName, cc.course_name courseName, pp.name paperName from exam_train et + select * from (select et.*, s.name as subjectName, u.real_name createByName, cc.course_name courseName, cc.cover_img coverImg, pp.name paperName from exam_train et left join exam_subject s on et.subject_id = s.id left join exam_course cc on et.course_id = cc.id left join exam_paper pp on et.exam_paper_id = pp.id diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java index b07f68278..7a6f1b063 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java @@ -481,5 +481,12 @@ public class ProjectController { return Result.success(projectService.getProjectExtendInfo(map)); } + @OperLog(operModul = "项目管理", operType = "查询", operDesc = "查询企业下所有项目的类型统计") + @ApiOperation(value = "查询企业下所有项目的类型统计", notes = "查询企业下所有项目的类型统计") + @ApiImplicitParam(name = "companySn", value = "企业SN", paramType = "query", required = true, dataType = "String") + @PostMapping("/getListGroupType") + public Result>> getListGroupType(@RequestBody Map map) { + return Result.success(projectService.getListGroupType(map)); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml b/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml index e957a2dcd..010ebafba 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml @@ -241,6 +241,9 @@ and a.project_name like concat('%', #{projectName}, '%') + + and a.bulid_status = #{bulidStatus} + + + + INSERT IGNORE INTO ${tableName} + ( + <#list originalColumns as column> + ${column.fieldDbName?lower_case}<#if column_has_next>, + + ) + VALUES + + ( + <#list originalColumns as column> + ${r"#{item."}${column.fieldName}${r"}"}<#if column_has_next>, + + ) + + + From 74aa18d7da7e73091a8c6b3b7e0a92d7e189a153 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 19 Dec 2025 15:08:55 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=9B=9B=E8=89=B2=E5=9B=BEbug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/FourColorDrawPaperServiceImpl.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/com/zhgd/xmgl/modules/risk/service/impl/FourColorDrawPaperServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/risk/service/impl/FourColorDrawPaperServiceImpl.java index daed829b2..560eef22d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/risk/service/impl/FourColorDrawPaperServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/risk/service/impl/FourColorDrawPaperServiceImpl.java @@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.risk.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; +import java.util.Objects; /** * @Description: 四色图图纸 @@ -70,6 +72,17 @@ public class FourColorDrawPaperServiceImpl extends ServiceImpl() + .set(FourColorDrawPaper::getIsShow, 0) + .eq(FourColorDrawPaper::getIsShow, 1) + .ne(FourColorDrawPaper::getId, dto.getId()) + ); + } } @Override @@ -79,6 +92,7 @@ public class FourColorDrawPaperServiceImpl extends ServiceImpl Date: Fri, 19 Dec 2025 15:09:11 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=8D=B1=E5=A4=A7bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/bigdanger/mapper/xml/BigDangerBuildPlaceMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdanger/mapper/xml/BigDangerBuildPlaceMapper.xml b/src/main/java/com/zhgd/xmgl/modules/bigdanger/mapper/xml/BigDangerBuildPlaceMapper.xml index ff1b46bcb..845b7bbd6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/bigdanger/mapper/xml/BigDangerBuildPlaceMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/bigdanger/mapper/xml/BigDangerBuildPlaceMapper.xml @@ -7,7 +7,7 @@ ,qr.region_name ,group_concat(distinct su.real_name) safe_control_duty_names from big_danger_build_place t - join quality_region qr on qr.id=t.region_id + left join quality_region qr on qr.id=t.region_id left join system_user su on find_in_set(su.user_id,t.safe_control_duty_ids) group by t.id )t From ac8419767656bb8d3f36ef35035b047d7586e4bc Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 19 Dec 2025 15:09:17 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=B1=B1=E6=8E=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E8=AE=BE=E5=A4=87=E5=AE=9A=E4=BD=8D-?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E5=92=8C=E6=8A=A5=E8=AD=A6=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...anicalEquipmentPositionDataController.java | 4 + .../controller/ShantuiController.java | 60 ++++++++++++++ .../dto/ShantuiMechanicalEquipmentMsg.java | 79 +++++++++++++++++++ .../zhgd/xmgl/security/WebSecurityConfig.java | 1 + .../com/zhgd/xmgl/util/shantui/AESUtil.java | 74 +++++++++++++++++ .../application-gsx-other-env-show.properties | 1 + 6 files changed, 219 insertions(+) create mode 100644 src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/ShantuiController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/entity/dto/ShantuiMechanicalEquipmentMsg.java create mode 100644 src/main/java/com/zhgd/xmgl/util/shantui/AESUtil.java diff --git a/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/MechanicalEquipmentPositionDataController.java b/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/MechanicalEquipmentPositionDataController.java index 13732e9a8..34384a936 100644 --- a/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/MechanicalEquipmentPositionDataController.java +++ b/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/MechanicalEquipmentPositionDataController.java @@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.simpleframework.xml.core.Validate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -48,6 +49,8 @@ public class MechanicalEquipmentPositionDataController { @Lazy @Autowired private IMockMechanicalEquipmentPositionDataConfigService mockMechanicalEquipmentPositionDataConfigService; + @Value("${shantuiAesSecret:}") + private String shantuiAesSecret; /** * 分页列表查询 @@ -239,4 +242,5 @@ public class MechanicalEquipmentPositionDataController { return Result.ok(); } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/ShantuiController.java b/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/ShantuiController.java new file mode 100644 index 000000000..e7b8e9320 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/controller/ShantuiController.java @@ -0,0 +1,60 @@ +package com.zhgd.xmgl.modules.mechanicalequipmentposition.controller; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData; +import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.dto.ShantuiMechanicalEquipmentMsg; +import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService; +import com.zhgd.xmgl.util.shantui.AESUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.HashMap; +import java.util.Objects; + +@RestController +@RequestMapping("/") +@Slf4j +@Api(tags = "山推相关Api") +public class ShantuiController { + @Autowired + private IMechanicalEquipmentPositionDataService mechanicalEquipmentPositionDataService; + @Value("${shantuiAesSecret:}") + private String shantuiAesSecret; + + @ApiOperation(value = "山推添加机械设备定位-实时和报警数据信息", notes = "山推添加机械设备定位-实时和报警数据信息", httpMethod = "POST") + @PostMapping(value = "/notice/push") + public String addDataBySt(@ApiIgnore @RequestBody HashMap param) { + log.debug("山推添加机械设备定位-实时和报警数据信息:{}", JSON.toJSONString(param)); + try { + String cipher = MapUtils.getString(param, "cipher"); + String decrypt = AESUtil.decrypt(cipher, shantuiAesSecret); + ShantuiMechanicalEquipmentMsg equipmentMsg = JSONObject.parseObject(decrypt, ShantuiMechanicalEquipmentMsg.class); + ShantuiMechanicalEquipmentMsg.StaticAttr staticAttr = equipmentMsg.getStaticAttr(); + MechanicalEquipmentPositionData positionData = new MechanicalEquipmentPositionData(); + positionData.setDevSn(staticAttr.getDeviceCode()); + ShantuiMechanicalEquipmentMsg.DynamicAttr dynamicAttr = equipmentMsg.getDynamicAttr(); + positionData.setLatitude(Convert.toDouble(dynamicAttr.getLatitude())); + positionData.setLongitude(Convert.toDouble(dynamicAttr.getLongitude())); + positionData.setUploadTime(DateUtil.parse(equipmentMsg.getTimedetail(), "yyyyMMddHHmmssSSS")); + positionData.setSpeed(Convert.toDouble(dynamicAttr.getGps_speed())); + positionData.setWorkStatus(Objects.equals(dynamicAttr.getAcc_flag(), "0") ? 2 : 1); + positionData.setMileage(Convert.toDouble(dynamicAttr.getTotal_miles())); + mechanicalEquipmentPositionDataService.add(positionData); + } catch (Exception e) { + return "{\"code\":1, \"msg\":\"" + e.getMessage() + "\"}"; + } + return "{\"code\":0, \"msg\":\"success\"}"; + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/entity/dto/ShantuiMechanicalEquipmentMsg.java b/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/entity/dto/ShantuiMechanicalEquipmentMsg.java new file mode 100644 index 000000000..9a16ec72e --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/mechanicalequipmentposition/entity/dto/ShantuiMechanicalEquipmentMsg.java @@ -0,0 +1,79 @@ +package com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.dto; + +import lombok.Data; +import java.util.List; + +@Data +public class ShantuiMechanicalEquipmentMsg { + private String tid; + private String protocolCode; + private String cmdCode; + private String commSign; + private String transactionID; + private String version; + private String timedetail; + private Integer did; + + private StaticAttr staticAttr; + private DynamicAttr dynamicAttr; + + @Data + public static class StaticAttr { + private String deviceType; + private String terminalNo; + private String productId; + private String commSign; + private String deviceCode; + private String deviceName; + private String tid; + private String iccid; + private String createTime; + private String deviceSeries; + private String deviceModel; + private String id; + private String simNo; + private String dataSource; + private String did; + } + + @Data + public static class DynamicAttr { + private String timedetail; + private String serial_no; + private String subversion; + private String hardware_version; + private String out_sensor_oil_height_real; + private String out_sensor_oil_height; + private String gps_valid_flag; + private String gps_lat_flag; + private String gps_long_flag; + private String gps_connect_flag; + private String longitude; + private String latitude; + private String acc_flag; + private String out_voltage; + private String inner_voltage; + private String gps_speed; + private String gps_direction; + private String gps_height_mm; + private String today_hours; + private String total_hours; + private String today_miles; + private String total_miles; + private String engine_working_hours; + private String today_fuel_consume; + private String wake_up_flag; + private String row_vibrate_data; + private String column_vibrate_data; + private String rtk_positioning_mode; + private String g_sensor_temperature; + private String acceleration_x; + private String acceleration_y; + private String acceleration_z; + private String fuel_select_canid_count; + private List fuel_select_canid_list; + private String hour_select_canid_count; + private List hour_select_canid_list; + private String firmware_version_full; + } +} diff --git a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java index 3d32ccab9..3b7fb4928 100644 --- a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java +++ b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java @@ -78,6 +78,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { http.authorizeRequests() //请求路径允许访问 + .antMatchers("/notice/push").permitAll() .antMatchers("/xmgl/electricalData/addByJj").permitAll() .antMatchers("/xmgl/cache/clearAll").permitAll() .antMatchers("/xmgl/videoScreenshot/captureScreenshotSync").permitAll() diff --git a/src/main/java/com/zhgd/xmgl/util/shantui/AESUtil.java b/src/main/java/com/zhgd/xmgl/util/shantui/AESUtil.java new file mode 100644 index 000000000..2682b367f --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/util/shantui/AESUtil.java @@ -0,0 +1,74 @@ +package com.zhgd.xmgl.util.shantui; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +public class AESUtil { + private static final String KEY_AES = "AES"; + + public static String encrypt(String src, String key) throws Exception { + if (key == null || key.length() != 16) { + throw new Exception("key不满足条件"); + } + byte[] raw = key.getBytes(); + SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES); + Cipher cipher = Cipher.getInstance(KEY_AES); + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + byte[] encrypted = cipher.doFinal(src.getBytes()); + return byte2hex(encrypted); + } + + public static String decrypt(String src, String key) throws Exception { + if (key == null || key.length() != 16) { + throw new Exception("key不满足条件"); + } + byte[] raw = key.getBytes(); + SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES); + Cipher cipher = Cipher.getInstance(KEY_AES); + cipher.init(Cipher.DECRYPT_MODE, skeySpec); + byte[] encrypted1 = hex2byte(src); + byte[] original = cipher.doFinal(encrypted1); + String originalString = new String(original); + return originalString; + } + + public static byte[] hex2byte(String strhex) { + if (strhex == null) { + return null; + } + int l = strhex.length(); + if (l % 2 == 1) { + return null; + } + byte[] b = new byte[l / 2]; + for (int i = 0; i != l / 2; i++) { + b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), + 16); + } + return b; + } + + public static String byte2hex(byte[] b) { + String hs = ""; + String stmp = ""; + for (int n = 0; n < b.length; n++) { + stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); + if (stmp.length() == 1) { + hs = hs + "0" + stmp; + } else { + hs = hs + stmp; + } + } + return hs.toUpperCase(); + } + + public static void main(String[] args) { + try { + String decrypt = decrypt("69C96AE281AECBBBEC4926B60B9C7A0823025CA88C7B60AE0A861FC2D00DC8D762A7E6642EF2D8444B4C587D3F631A02BEE64E60469F413B3552900A46230BCA00C8D89713616977C8C0271FA212F4E353B40AF8F0DFDCFD46BE7A88B36D8FB4C5177C123ADF8DCB317C61CF5695B525C3449524D73FED10604BC285B536EEF02BA5172CC558BBA2CB8B889F0F1C8486FF897D76915C19C537A4F1B2ABAAE726F80406C884F349571D86ACEF5CC6E5B7C012858D6AB36FF858D196EDCD8B5203236213647E33A963F030E804A180C65A1B1DE78E519E5B4357BCBAAFD3A6D24C398C4D8E765F749DCE845336BDC4D8CD39DA072769821FA7715520F1B1ADE8AAC76A0758162D5E2B88C02624697524A67CBE5633064FEFBC9A7DD0E2C66166EA00C8D89713616977C8C0271FA212F4E3E87569470435CF48B00A2000CA22F33E4B2C110A13797B529B7D32E11569FDD2C067ACCBB0CC275F6E5846F576316FE1DE0CCF4E39E83C7B7CA98E80A41C3EE432023EBB3390439DD7C6CAD865F3436885193F700FA92BFEB47CF731E9020019815634DA5D0BBC1E831CED045DF882A81ED51B48F74416FBEF1C9703AAC276A7858BF905E48A671DAC0CC23BF4CE298FB412EEC384C741EC679D2EFA320676785B051072582F2C06ACD49AC2A48E051E33087C1A1FE6C938B20E79E0AAC71B048CE8CB6C86A482FF0931C8D8E26C985F9C7E2B79B6801A0A191B88D0C0942CA8FCE8DAC5AD0BFB52CFB2C481094B133EB1CC1C20E647CFBF10AC14D337068820DC5E5D1313D0C311F72345926BB0C211DF583521FEE56CD878008BFB80BBE21A04A6FD181C37231A265FDDE1B32EDAA0A4D5F21AE4D75AA3667C34193F578EF602A89236F12F4026CCC5D4C810DCB0BF79169B65BF1236800931000517599FBBABA54CF8FEBEC9E686A3EFC0F526A9BCC5E26F390B6635646ACAA97B71D508A69E88300543A468438D6C885ED574FF7F22A77F4CBE68DA3242D8769B331EAD7034A3C992F7F79F74BC859B1BEE1D3FD1A2B5D98FEAB8A7ECDC022C7B6FE6FD1B5A7F1386CD46807F89DA2EA6F854F7478AA28335DD2C274ACB80944B6C051ECC05B94D94F8BC4F4C306353E62648D91092F71B43E56BA575F97567D4ADA9095D0A5D58A24DA6E0986485616FBA722215427EFE41BEB302C5B6F7BBE5B289076F02D434334045F72E3E574651EEA7E41F1F545AE2A034C2A16C4D519380D5E1C75AFF471A4FF036C3FD02B607733558A92146EAFD4F4EF87B65A8DB7D5688122087780E53366A9DBB6E4DC9E5BF890F51AAA1EC186F03D4E689B58235219CBA8FF380BEB18F5CD7F03562E64649E93AE8D53F0851ACD840E850B7EC9997FBF51D663781E0A055CF201EF40CE68CA5D311F212B03575C0A9425F8FDDBCA5A77906D6C6D1F21D93EF1342D509559764B9BEC5E5761A8746EA227F5ED8E85A29B0F11F0F7EB347BCC7D1B6CBA7E9BEC773009A3052FD34A12AEDE6AABFF6AE0F54AA52480CAB665067422244C6B366218BA59C7047EBC4FE69BB69667B9B440663BDA1849C9D55D4D4025D5E2ACAFEEB57880FCAEC7EB449C930DDDE4241BB2D59E29FD56C985DCFFBC6EE3BF9D7BC486647C2C7FD67693DE2D2F4611C7E00095CA0B8D3AA35B665DC996BEC3D04F31F46F56258190F376960CF3F45C2533546EBE3EA44AD8AFA102596E853941258E3EDF7044B88718F1FFABB1BC0E8E3A92EFD5224B7E48E3E4EEEEFF8EA953D9F33FE6A7E81BB0D1CDA4FFCC4128222EC2E3BB5298C6658360453ABB9BE472772F6195A337BBF788D655BD77306B0D726D2D05D7FEDC17F5A097F75B6BE4BD30CD38FA785F9B106B9AACF95481A4BEA47A6E3F5965561631EE245A49F900924851135324809E3A081ED08D807C05FD1A09CEF06B2BC0025DBF2EC951ECDDC7F1D7A816E2DC4CEB89E4DB28AFD92C9AF060728D1F58B3EADEEA3CD0E1342A422DD1C6EA739413B396BB5768CDBAB1ED2D850417E3509DBFE2125ADD3848CAB2A7EAC9E34B53778E160324579D76FB77B165999E7D7DFF21F3E60FC33E4CF4B561EFDF75ACDFDD704F8D995D417E03EC3619E65A3E0EC4CCEFE6DAB187EB6B7176130FF49F27CA997DCD87C0006C5A0501CF5B09BB7ED5FD1C531B37182ADD4EB24F1C5A49844E52CECAE86C955002C1DBF7230C7", + "GTDcnpLW6rDKzHbL"); + System.out.println(decrypt); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/resources/application-gsx-other-env-show.properties b/src/main/resources/application-gsx-other-env-show.properties index 09817fb81..c252dfe35 100644 --- a/src/main/resources/application-gsx-other-env-show.properties +++ b/src/main/resources/application-gsx-other-env-show.properties @@ -107,3 +107,4 @@ upload.image.url.prefix=http://192.168.34.221:9111/image/ supplierResubmitApplicationUrl=http://192.168.34.175:88/#/workspace/contractorApply #管控清单危险源的区域二维码的前缀 riskListSourceRegionQrCode=http://localhost:8088/app/#/pages/projectEnd/safeSame/riskGradingControlList/riskGradingControlList?id= +shantuiAesSecret=GTDcnpLW6rDKzHbL