diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java new file mode 100644 index 0000000..a3de00d --- /dev/null +++ b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java @@ -0,0 +1,240 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.UserMapper; +import com.casic.enums.UserDataEnum; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.model.User; +import com.casic.service.UserDataDelayReceiver; +import com.casic.util.HttpRequest; +import com.casic.util.RSAUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class UserDataDelayReceiverImpl extends ServiceImpl implements UserDataDelayReceiver, UserDataEnum { + + @Value("${casic.device.appName}") + private String appName; + @Value("${casic.device.appUrl}") + private String appUrl; + + /** + * 1、获取授权人员的信息数据 + * 2、根据人员信息数据获取角色信息 + * 3、获取当前数据库的信息 + * 4、判别是否需要更新的和新增的用户 + * 5、 + */ + @Override + public void saveNewUserData() { + Map roleMap = getLocalRoleData(); + Map userMap = getLocalUserData(roleMap); + doSaveNewUserData(userMap, roleMap); + } + + /** + * 获取用户源信息 + */ + private void doSaveNewUserData(Map userMap, Map roleMap) { + //获取应用下的所有角色 + Map> userListMap = getRoleCodes(); + //分为管理员列表和普通角色列表信息 + doGetUserDataSource(userListMap, ADMIN, userMap, roleMap); + doGetUserDataSource(userListMap, MEMBER, userMap, roleMap); + } + + private Map getLocalRoleData() { + List> roleMapList = this.baseMapper.getRolesByName(); + Map roleMap = new HashMap<>(); + for (Map role : roleMapList) { + if (role.get("NAME").contains(ADMIN)) { + roleMap.put(role.get("ID"), ADMIN); + } else { + roleMap.put(role.get("ID"), MEMBER); + } + } + return roleMap; + } + + /** + * 获取当前的用户信息列表 + */ + private Map getLocalUserData(Map roleMap) { + List localUserList = this.baseMapper.selectList(null); + localUserList.stream() + .filter(e -> roleMap.containsKey(e.getRoleId())) + .forEach( + localUser -> { + if (roleMap.containsKey(localUser.getRoleId())) { + localUser.setUserType(roleMap.get(localUser.getRoleId())); + } + } + ); + //userCode作为账号 + Map userMap = localUserList.stream() + .collect( + Collectors.toMap(User::getAccount, e -> e) + ); + return userMap; + } + + /** + * 比较获取新的用户信息数据,比较直接更新 + */ + private void compareGetNewUserData(List userCodeList, String key, Map sourceMap, Map userMap, Map roleMap) { + List newUserCodeList = userCodeList.stream().filter( + userCode -> !userMap.containsKey(userCode)).collect(Collectors.toList()); + List editUserList = userCodeList.stream().filter( + userCode -> userMap.containsKey(userCode) && !userMap.get(userCode).getUserType().equals(key) + ).collect(Collectors.toList()); + String roleId = ""; + Long deptId = null; + for (Map.Entry entry : roleMap.entrySet()) { + if (entry.getValue().equals(key)) { + roleId = entry.getKey(); + } + } + for (Map.Entry entry : userMap.entrySet()) { + if (entry.getValue().equals(key)) { + deptId = entry.getValue().getDeptId(); + break; + } + } + if (StringUtils.isEmpty(roleId)) { + return; + } + //新增 + doAddUser(newUserCodeList, sourceMap, roleId, deptId); + //更新 + doUpdateUser(editUserList, userMap, roleId); + return; + } + + /** + * 新增用户 + */ + private void doAddUser(List newUserCodeList, Map sourceUserMap, String roleId, Long deptId) { + List users = new ArrayList<>(); + for (String userCode : newUserCodeList) { + JSONArray userArray = sourceUserMap.get(userCode); + if (ObjectUtils.isNotEmpty(userArray)) { + Map userMap = userArray.stream().collect( + Collectors.toMap(e -> (String) ((JSONObject) e).get("name"), e -> (String) ((JSONObject) e).get("value")) + ); + User user = new User(roleId, deptId); + populateUser(user, userMap); + users.add(user); + } + } + this.saveBatch(users); + } + + private void populateUser(User user, Map userMap) { + //涉及盐值的计算等操作 + user.setAccount(userMap.get("userCode")); + user.setSex(Integer.valueOf(userMap.get("sex"))); + user.setName(userMap.get("userName")); + //设置密码 + user.setPassword("111111"); + try { + user.setPassword(RSAUtils.decrypt(user.getPassword(), ShiroKit.getSession().getAttribute(RSAUtils.RSAPrivateKey).toString())); + } catch (Exception var5) { + log.error("密码解密异常", var5); + } + user.setSalt(userMap.get("userName")); + user.setSalt(ShiroKit.getRandomSalt(5)); + user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt())); + user.setEmail(userMap.get("email")); + user.setPhone(userMap.get("mobile")); + user.setStatus("1"); + user.setIsSync(1); + user.setDelFlag("0"); + } + + /** + * 更新用户 + */ + private void doUpdateUser(List editUserCodeList, Map userMap, String roleId) { + List users = new ArrayList<>(); + for (String editUser : editUserCodeList) { + User user = userMap.get(editUser); + if (ObjectUtils.isNotEmpty(user)) { + user.setRoleId(roleId); + users.add(user); + } + } + this.saveBatch(users); + } + + /** + * @param userListMap + * @param key 用户或者管理员 + * @param userMap 现存的用户map列表 + */ + private void doGetUserDataSource(Map> userListMap, String key, Map userMap, Map roleMap) { + //获取管理员的信息 + List userList = userListMap.get(key); + for (String userPath : userList) { + String userUrl = appUrl + FRAGMENT_PATH + appName + "/roles/" + userPath + "/allocatedUsers"; + Object roleObject = HttpRequest.sendGet(userUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + List userCodeList = new ArrayList<>(); + Map sourceMap = new HashMap<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String userCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("userCode")).findFirst().get()).get("userCode"); + userCodeList.add(userCode); + //和获取的用户列表进行比较管理员、userCode是否存在 + sourceMap.put(userCode, dataList); + } + compareGetNewUserData(userCodeList, key, sourceMap, userMap, roleMap); + } + } + + + /** + * 通过应用名称获取角色的类型 + * + * @return + */ + private Map> getRoleCodes() { + String rolesUrl = appUrl + FRAGMENT_PATH + appName + "/roles"; + Object roleObject = HttpRequest.sendGet(rolesUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains(MEMBER)) { + userList.add(roleCode); + } + if (roleName.contains(ADMIN)) { + adminList.add(roleCode); + } + } + userListMap.put(MEMBER, userList); + userListMap.put(ADMIN, adminList); + return userListMap; + } +} diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java new file mode 100644 index 0000000..a3de00d --- /dev/null +++ b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java @@ -0,0 +1,240 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.UserMapper; +import com.casic.enums.UserDataEnum; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.model.User; +import com.casic.service.UserDataDelayReceiver; +import com.casic.util.HttpRequest; +import com.casic.util.RSAUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class UserDataDelayReceiverImpl extends ServiceImpl implements UserDataDelayReceiver, UserDataEnum { + + @Value("${casic.device.appName}") + private String appName; + @Value("${casic.device.appUrl}") + private String appUrl; + + /** + * 1、获取授权人员的信息数据 + * 2、根据人员信息数据获取角色信息 + * 3、获取当前数据库的信息 + * 4、判别是否需要更新的和新增的用户 + * 5、 + */ + @Override + public void saveNewUserData() { + Map roleMap = getLocalRoleData(); + Map userMap = getLocalUserData(roleMap); + doSaveNewUserData(userMap, roleMap); + } + + /** + * 获取用户源信息 + */ + private void doSaveNewUserData(Map userMap, Map roleMap) { + //获取应用下的所有角色 + Map> userListMap = getRoleCodes(); + //分为管理员列表和普通角色列表信息 + doGetUserDataSource(userListMap, ADMIN, userMap, roleMap); + doGetUserDataSource(userListMap, MEMBER, userMap, roleMap); + } + + private Map getLocalRoleData() { + List> roleMapList = this.baseMapper.getRolesByName(); + Map roleMap = new HashMap<>(); + for (Map role : roleMapList) { + if (role.get("NAME").contains(ADMIN)) { + roleMap.put(role.get("ID"), ADMIN); + } else { + roleMap.put(role.get("ID"), MEMBER); + } + } + return roleMap; + } + + /** + * 获取当前的用户信息列表 + */ + private Map getLocalUserData(Map roleMap) { + List localUserList = this.baseMapper.selectList(null); + localUserList.stream() + .filter(e -> roleMap.containsKey(e.getRoleId())) + .forEach( + localUser -> { + if (roleMap.containsKey(localUser.getRoleId())) { + localUser.setUserType(roleMap.get(localUser.getRoleId())); + } + } + ); + //userCode作为账号 + Map userMap = localUserList.stream() + .collect( + Collectors.toMap(User::getAccount, e -> e) + ); + return userMap; + } + + /** + * 比较获取新的用户信息数据,比较直接更新 + */ + private void compareGetNewUserData(List userCodeList, String key, Map sourceMap, Map userMap, Map roleMap) { + List newUserCodeList = userCodeList.stream().filter( + userCode -> !userMap.containsKey(userCode)).collect(Collectors.toList()); + List editUserList = userCodeList.stream().filter( + userCode -> userMap.containsKey(userCode) && !userMap.get(userCode).getUserType().equals(key) + ).collect(Collectors.toList()); + String roleId = ""; + Long deptId = null; + for (Map.Entry entry : roleMap.entrySet()) { + if (entry.getValue().equals(key)) { + roleId = entry.getKey(); + } + } + for (Map.Entry entry : userMap.entrySet()) { + if (entry.getValue().equals(key)) { + deptId = entry.getValue().getDeptId(); + break; + } + } + if (StringUtils.isEmpty(roleId)) { + return; + } + //新增 + doAddUser(newUserCodeList, sourceMap, roleId, deptId); + //更新 + doUpdateUser(editUserList, userMap, roleId); + return; + } + + /** + * 新增用户 + */ + private void doAddUser(List newUserCodeList, Map sourceUserMap, String roleId, Long deptId) { + List users = new ArrayList<>(); + for (String userCode : newUserCodeList) { + JSONArray userArray = sourceUserMap.get(userCode); + if (ObjectUtils.isNotEmpty(userArray)) { + Map userMap = userArray.stream().collect( + Collectors.toMap(e -> (String) ((JSONObject) e).get("name"), e -> (String) ((JSONObject) e).get("value")) + ); + User user = new User(roleId, deptId); + populateUser(user, userMap); + users.add(user); + } + } + this.saveBatch(users); + } + + private void populateUser(User user, Map userMap) { + //涉及盐值的计算等操作 + user.setAccount(userMap.get("userCode")); + user.setSex(Integer.valueOf(userMap.get("sex"))); + user.setName(userMap.get("userName")); + //设置密码 + user.setPassword("111111"); + try { + user.setPassword(RSAUtils.decrypt(user.getPassword(), ShiroKit.getSession().getAttribute(RSAUtils.RSAPrivateKey).toString())); + } catch (Exception var5) { + log.error("密码解密异常", var5); + } + user.setSalt(userMap.get("userName")); + user.setSalt(ShiroKit.getRandomSalt(5)); + user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt())); + user.setEmail(userMap.get("email")); + user.setPhone(userMap.get("mobile")); + user.setStatus("1"); + user.setIsSync(1); + user.setDelFlag("0"); + } + + /** + * 更新用户 + */ + private void doUpdateUser(List editUserCodeList, Map userMap, String roleId) { + List users = new ArrayList<>(); + for (String editUser : editUserCodeList) { + User user = userMap.get(editUser); + if (ObjectUtils.isNotEmpty(user)) { + user.setRoleId(roleId); + users.add(user); + } + } + this.saveBatch(users); + } + + /** + * @param userListMap + * @param key 用户或者管理员 + * @param userMap 现存的用户map列表 + */ + private void doGetUserDataSource(Map> userListMap, String key, Map userMap, Map roleMap) { + //获取管理员的信息 + List userList = userListMap.get(key); + for (String userPath : userList) { + String userUrl = appUrl + FRAGMENT_PATH + appName + "/roles/" + userPath + "/allocatedUsers"; + Object roleObject = HttpRequest.sendGet(userUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + List userCodeList = new ArrayList<>(); + Map sourceMap = new HashMap<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String userCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("userCode")).findFirst().get()).get("userCode"); + userCodeList.add(userCode); + //和获取的用户列表进行比较管理员、userCode是否存在 + sourceMap.put(userCode, dataList); + } + compareGetNewUserData(userCodeList, key, sourceMap, userMap, roleMap); + } + } + + + /** + * 通过应用名称获取角色的类型 + * + * @return + */ + private Map> getRoleCodes() { + String rolesUrl = appUrl + FRAGMENT_PATH + appName + "/roles"; + Object roleObject = HttpRequest.sendGet(rolesUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains(MEMBER)) { + userList.add(roleCode); + } + if (roleName.contains(ADMIN)) { + adminList.add(roleCode); + } + } + userListMap.put(MEMBER, userList); + userListMap.put(ADMIN, adminList); + return userListMap; + } +} diff --git a/src/main/java/com/casic/util/HttpRequest.java b/src/main/java/com/casic/util/HttpRequest.java new file mode 100644 index 0000000..d084906 --- /dev/null +++ b/src/main/java/com/casic/util/HttpRequest.java @@ -0,0 +1,161 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class HttpRequest { + + + //获取组织结构下的应用角色,通过角色获取角色名称 + // 通过角色名称,获取所有的用户信息 + //对用户信息进行合并 + + private static final CloseableHttpClient httpclient = HttpClients.createDefault(); + + //角色下面的用户,用户下面的角色 + public static void main(String[] args) { + //查询指定应用下、组织结构下的角色信息 + String url = "http://10.80.12.33/OrgAndUserService/apps/XLJCYJ/roles/XLJCYJ_GLY/allocatedUsers"; + // 获取指定应用下的角色的所有授权用户信息 +// url = "http://10.80.12.33/OrgAndUserService/apps/QCDTJC_ZWJ/roles/QCDTJC_ZWJ_101/allocatedUsers"; + Object roleObject = sendGet(url); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains("普通用户")) { + userList.add(roleCode); + } + if (roleName.contains("管理员")) { + adminList.add(roleCode); + } + } + userListMap.put("用户", userList); + userListMap.put("管理员", adminList); + return; + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url 发送请求的URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + /** + * 发送HttpGet请求 + * + * @param url + * @return + */ + public static Object sendGet(String url) { + HttpGet httpget = new HttpGet(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httpget); + } catch (IOException e1) { + e1.printStackTrace(); + } + Object resultObject = null; + try { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + Map resultMap = JSON.parseObject(result); + resultObject = resultMap.get("collection"); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultObject; + } + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } +} diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java new file mode 100644 index 0000000..a3de00d --- /dev/null +++ b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java @@ -0,0 +1,240 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.UserMapper; +import com.casic.enums.UserDataEnum; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.model.User; +import com.casic.service.UserDataDelayReceiver; +import com.casic.util.HttpRequest; +import com.casic.util.RSAUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class UserDataDelayReceiverImpl extends ServiceImpl implements UserDataDelayReceiver, UserDataEnum { + + @Value("${casic.device.appName}") + private String appName; + @Value("${casic.device.appUrl}") + private String appUrl; + + /** + * 1、获取授权人员的信息数据 + * 2、根据人员信息数据获取角色信息 + * 3、获取当前数据库的信息 + * 4、判别是否需要更新的和新增的用户 + * 5、 + */ + @Override + public void saveNewUserData() { + Map roleMap = getLocalRoleData(); + Map userMap = getLocalUserData(roleMap); + doSaveNewUserData(userMap, roleMap); + } + + /** + * 获取用户源信息 + */ + private void doSaveNewUserData(Map userMap, Map roleMap) { + //获取应用下的所有角色 + Map> userListMap = getRoleCodes(); + //分为管理员列表和普通角色列表信息 + doGetUserDataSource(userListMap, ADMIN, userMap, roleMap); + doGetUserDataSource(userListMap, MEMBER, userMap, roleMap); + } + + private Map getLocalRoleData() { + List> roleMapList = this.baseMapper.getRolesByName(); + Map roleMap = new HashMap<>(); + for (Map role : roleMapList) { + if (role.get("NAME").contains(ADMIN)) { + roleMap.put(role.get("ID"), ADMIN); + } else { + roleMap.put(role.get("ID"), MEMBER); + } + } + return roleMap; + } + + /** + * 获取当前的用户信息列表 + */ + private Map getLocalUserData(Map roleMap) { + List localUserList = this.baseMapper.selectList(null); + localUserList.stream() + .filter(e -> roleMap.containsKey(e.getRoleId())) + .forEach( + localUser -> { + if (roleMap.containsKey(localUser.getRoleId())) { + localUser.setUserType(roleMap.get(localUser.getRoleId())); + } + } + ); + //userCode作为账号 + Map userMap = localUserList.stream() + .collect( + Collectors.toMap(User::getAccount, e -> e) + ); + return userMap; + } + + /** + * 比较获取新的用户信息数据,比较直接更新 + */ + private void compareGetNewUserData(List userCodeList, String key, Map sourceMap, Map userMap, Map roleMap) { + List newUserCodeList = userCodeList.stream().filter( + userCode -> !userMap.containsKey(userCode)).collect(Collectors.toList()); + List editUserList = userCodeList.stream().filter( + userCode -> userMap.containsKey(userCode) && !userMap.get(userCode).getUserType().equals(key) + ).collect(Collectors.toList()); + String roleId = ""; + Long deptId = null; + for (Map.Entry entry : roleMap.entrySet()) { + if (entry.getValue().equals(key)) { + roleId = entry.getKey(); + } + } + for (Map.Entry entry : userMap.entrySet()) { + if (entry.getValue().equals(key)) { + deptId = entry.getValue().getDeptId(); + break; + } + } + if (StringUtils.isEmpty(roleId)) { + return; + } + //新增 + doAddUser(newUserCodeList, sourceMap, roleId, deptId); + //更新 + doUpdateUser(editUserList, userMap, roleId); + return; + } + + /** + * 新增用户 + */ + private void doAddUser(List newUserCodeList, Map sourceUserMap, String roleId, Long deptId) { + List users = new ArrayList<>(); + for (String userCode : newUserCodeList) { + JSONArray userArray = sourceUserMap.get(userCode); + if (ObjectUtils.isNotEmpty(userArray)) { + Map userMap = userArray.stream().collect( + Collectors.toMap(e -> (String) ((JSONObject) e).get("name"), e -> (String) ((JSONObject) e).get("value")) + ); + User user = new User(roleId, deptId); + populateUser(user, userMap); + users.add(user); + } + } + this.saveBatch(users); + } + + private void populateUser(User user, Map userMap) { + //涉及盐值的计算等操作 + user.setAccount(userMap.get("userCode")); + user.setSex(Integer.valueOf(userMap.get("sex"))); + user.setName(userMap.get("userName")); + //设置密码 + user.setPassword("111111"); + try { + user.setPassword(RSAUtils.decrypt(user.getPassword(), ShiroKit.getSession().getAttribute(RSAUtils.RSAPrivateKey).toString())); + } catch (Exception var5) { + log.error("密码解密异常", var5); + } + user.setSalt(userMap.get("userName")); + user.setSalt(ShiroKit.getRandomSalt(5)); + user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt())); + user.setEmail(userMap.get("email")); + user.setPhone(userMap.get("mobile")); + user.setStatus("1"); + user.setIsSync(1); + user.setDelFlag("0"); + } + + /** + * 更新用户 + */ + private void doUpdateUser(List editUserCodeList, Map userMap, String roleId) { + List users = new ArrayList<>(); + for (String editUser : editUserCodeList) { + User user = userMap.get(editUser); + if (ObjectUtils.isNotEmpty(user)) { + user.setRoleId(roleId); + users.add(user); + } + } + this.saveBatch(users); + } + + /** + * @param userListMap + * @param key 用户或者管理员 + * @param userMap 现存的用户map列表 + */ + private void doGetUserDataSource(Map> userListMap, String key, Map userMap, Map roleMap) { + //获取管理员的信息 + List userList = userListMap.get(key); + for (String userPath : userList) { + String userUrl = appUrl + FRAGMENT_PATH + appName + "/roles/" + userPath + "/allocatedUsers"; + Object roleObject = HttpRequest.sendGet(userUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + List userCodeList = new ArrayList<>(); + Map sourceMap = new HashMap<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String userCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("userCode")).findFirst().get()).get("userCode"); + userCodeList.add(userCode); + //和获取的用户列表进行比较管理员、userCode是否存在 + sourceMap.put(userCode, dataList); + } + compareGetNewUserData(userCodeList, key, sourceMap, userMap, roleMap); + } + } + + + /** + * 通过应用名称获取角色的类型 + * + * @return + */ + private Map> getRoleCodes() { + String rolesUrl = appUrl + FRAGMENT_PATH + appName + "/roles"; + Object roleObject = HttpRequest.sendGet(rolesUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains(MEMBER)) { + userList.add(roleCode); + } + if (roleName.contains(ADMIN)) { + adminList.add(roleCode); + } + } + userListMap.put(MEMBER, userList); + userListMap.put(ADMIN, adminList); + return userListMap; + } +} diff --git a/src/main/java/com/casic/util/HttpRequest.java b/src/main/java/com/casic/util/HttpRequest.java new file mode 100644 index 0000000..d084906 --- /dev/null +++ b/src/main/java/com/casic/util/HttpRequest.java @@ -0,0 +1,161 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class HttpRequest { + + + //获取组织结构下的应用角色,通过角色获取角色名称 + // 通过角色名称,获取所有的用户信息 + //对用户信息进行合并 + + private static final CloseableHttpClient httpclient = HttpClients.createDefault(); + + //角色下面的用户,用户下面的角色 + public static void main(String[] args) { + //查询指定应用下、组织结构下的角色信息 + String url = "http://10.80.12.33/OrgAndUserService/apps/XLJCYJ/roles/XLJCYJ_GLY/allocatedUsers"; + // 获取指定应用下的角色的所有授权用户信息 +// url = "http://10.80.12.33/OrgAndUserService/apps/QCDTJC_ZWJ/roles/QCDTJC_ZWJ_101/allocatedUsers"; + Object roleObject = sendGet(url); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains("普通用户")) { + userList.add(roleCode); + } + if (roleName.contains("管理员")) { + adminList.add(roleCode); + } + } + userListMap.put("用户", userList); + userListMap.put("管理员", adminList); + return; + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url 发送请求的URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + /** + * 发送HttpGet请求 + * + * @param url + * @return + */ + public static Object sendGet(String url) { + HttpGet httpget = new HttpGet(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httpget); + } catch (IOException e1) { + e1.printStackTrace(); + } + Object resultObject = null; + try { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + Map resultMap = JSON.parseObject(result); + resultObject = resultMap.get("collection"); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultObject; + } + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } +} diff --git a/src/main/java/com/casic/util/RSAUtils.java b/src/main/java/com/casic/util/RSAUtils.java new file mode 100644 index 0000000..8b64642 --- /dev/null +++ b/src/main/java/com/casic/util/RSAUtils.java @@ -0,0 +1,78 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.casic.util; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import javax.crypto.Cipher; +import org.apache.commons.codec.binary.Base64; + +public class RSAUtils { + public static String RSAPrivateKey = "RSAPrivateKey"; + public static String RSAPublicKey = "RSAPublicKey"; + + public RSAUtils() { + } + + public static void main(String[] args) throws Exception { + Map keyMap = new HashMap(); + genKeyPair(); + long ts = (new Date()).getTime() / 1000L; + String timestamp = String.valueOf(ts); + String message = "f3dwfgm2wg9g" + timestamp; + System.out.println("随机生成的公钥为:" + (String)keyMap.get(0)); + System.out.println("随机生成的私钥为:" + (String)keyMap.get(1)); + String public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOUbkwDVAIPSZTwc00XNSoZRPr37BMB8f5dnuWPL3DvgI9E1l4gVysu80XP/qiZjSkeTWLsxt47jjUeTICrLcC23jebqyNrXU9LpqebVprq8tPjhjPK49GlOT0LuOvdaKRXK6R7izgMdyROQuekDpnn7qKfTi6tQWTVyS7Ryf6DQIDAQAB"; + String private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI5RuTANUAg9JlPBzTRc1KhlE+vfsEwHx/l2e5Y8vcO+Aj0TWXiBXKy7zRc/+qJmNKR5NYuzG3juONR5MgKstwLbeN5urI2tdT0ump5tWmury0+OGM8rj0aU5PQu4691opFcrpHuLOAx3JE5C56QOmefuop9OLq1BZNXJLtHJ/oNAgMBAAECgYBg5ofejdHmKiyEbroXYvVwSpIL0dwpiErCMcfn/Sd/tUm06A3NHNdKzPvRTsCJ/mjta5HnsmWMKzcKhBJm+84G36wutg1oXClXy0NK7wZy+mpj8Rxw57e9SpwCP5e3kMXhcnKalZHbb7KqUwWesZRQ24Mb0kxIBzRhJnaUVyj8SQJBANq90Sd3JXmwpHdU6UbYidFfxOZzLXas0Ti1MgwopClJTtjrZpxjtRRUrqGqea2hknhiu6xPxFB/On6IV6bS4KcCQQCmj4c2dKZ2pw0Dt+in9l4up9A2ztLlOLcjtAn9OMhmrG9L5PdXLRdTMeLbZguQ9srCUx5nfB3g0nEQMXrUG5IrAkEAoni2759Z4IdJwbD6DDsuMqv1rk4CiNFYHczIPau6M0hWHlzKvIJ6r30usLnU4xjNmEmNqDEfWcMGiZFvuWOMpQJABC+RN1YhJNQ36IMDrszrOwLuoaH6/NW7DIOmyJ1Xs/Tbay3a5W71qhqT1+2tlrwNBmsuVW1yFsdTHhQQQSpcNwJBAKD5zFqxWlOAWHbPInp3SvIV5RH+GCUZLxgEFvvLg2xi7vVigkzbf6BOGLIXi6rjyomrxNo/aGGQ1r5vAGU9M7c="; + String messageEn = encrypt(message, public_key); + System.out.println(message + "\t加密后的字符串为:" + messageEn); + String messageDe = decrypt(messageEn, private_key); + System.out.println("还原后的字符串为:" + messageDe); + } + + public static Map genKeyPair() throws NoSuchAlgorithmException { + Map keyMap = new HashMap(); + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(1024, new SecureRandom()); + KeyPair keyPair = keyPairGen.generateKeyPair(); + RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate(); + RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic(); + String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded())); + String privateKeyString = new String(Base64.encodeBase64(privateKey.getEncoded())); + keyMap.put(RSAPublicKey, publicKeyString); + keyMap.put(RSAPrivateKey, privateKeyString); + return keyMap; + } + + public static String encrypt(String str, String publicKey) throws Exception { + byte[] decoded = Base64.decodeBase64(publicKey); + RSAPublicKey pubKey = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(1, pubKey); + String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); + return outStr; + } + + public static String decrypt(String str, String privateKey) throws Exception { + byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); + byte[] decoded = Base64.decodeBase64(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(2, priKey); + String outStr = new String(cipher.doFinal(inputByte)); + return outStr; + } +} diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java new file mode 100644 index 0000000..a3de00d --- /dev/null +++ b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java @@ -0,0 +1,240 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.UserMapper; +import com.casic.enums.UserDataEnum; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.model.User; +import com.casic.service.UserDataDelayReceiver; +import com.casic.util.HttpRequest; +import com.casic.util.RSAUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class UserDataDelayReceiverImpl extends ServiceImpl implements UserDataDelayReceiver, UserDataEnum { + + @Value("${casic.device.appName}") + private String appName; + @Value("${casic.device.appUrl}") + private String appUrl; + + /** + * 1、获取授权人员的信息数据 + * 2、根据人员信息数据获取角色信息 + * 3、获取当前数据库的信息 + * 4、判别是否需要更新的和新增的用户 + * 5、 + */ + @Override + public void saveNewUserData() { + Map roleMap = getLocalRoleData(); + Map userMap = getLocalUserData(roleMap); + doSaveNewUserData(userMap, roleMap); + } + + /** + * 获取用户源信息 + */ + private void doSaveNewUserData(Map userMap, Map roleMap) { + //获取应用下的所有角色 + Map> userListMap = getRoleCodes(); + //分为管理员列表和普通角色列表信息 + doGetUserDataSource(userListMap, ADMIN, userMap, roleMap); + doGetUserDataSource(userListMap, MEMBER, userMap, roleMap); + } + + private Map getLocalRoleData() { + List> roleMapList = this.baseMapper.getRolesByName(); + Map roleMap = new HashMap<>(); + for (Map role : roleMapList) { + if (role.get("NAME").contains(ADMIN)) { + roleMap.put(role.get("ID"), ADMIN); + } else { + roleMap.put(role.get("ID"), MEMBER); + } + } + return roleMap; + } + + /** + * 获取当前的用户信息列表 + */ + private Map getLocalUserData(Map roleMap) { + List localUserList = this.baseMapper.selectList(null); + localUserList.stream() + .filter(e -> roleMap.containsKey(e.getRoleId())) + .forEach( + localUser -> { + if (roleMap.containsKey(localUser.getRoleId())) { + localUser.setUserType(roleMap.get(localUser.getRoleId())); + } + } + ); + //userCode作为账号 + Map userMap = localUserList.stream() + .collect( + Collectors.toMap(User::getAccount, e -> e) + ); + return userMap; + } + + /** + * 比较获取新的用户信息数据,比较直接更新 + */ + private void compareGetNewUserData(List userCodeList, String key, Map sourceMap, Map userMap, Map roleMap) { + List newUserCodeList = userCodeList.stream().filter( + userCode -> !userMap.containsKey(userCode)).collect(Collectors.toList()); + List editUserList = userCodeList.stream().filter( + userCode -> userMap.containsKey(userCode) && !userMap.get(userCode).getUserType().equals(key) + ).collect(Collectors.toList()); + String roleId = ""; + Long deptId = null; + for (Map.Entry entry : roleMap.entrySet()) { + if (entry.getValue().equals(key)) { + roleId = entry.getKey(); + } + } + for (Map.Entry entry : userMap.entrySet()) { + if (entry.getValue().equals(key)) { + deptId = entry.getValue().getDeptId(); + break; + } + } + if (StringUtils.isEmpty(roleId)) { + return; + } + //新增 + doAddUser(newUserCodeList, sourceMap, roleId, deptId); + //更新 + doUpdateUser(editUserList, userMap, roleId); + return; + } + + /** + * 新增用户 + */ + private void doAddUser(List newUserCodeList, Map sourceUserMap, String roleId, Long deptId) { + List users = new ArrayList<>(); + for (String userCode : newUserCodeList) { + JSONArray userArray = sourceUserMap.get(userCode); + if (ObjectUtils.isNotEmpty(userArray)) { + Map userMap = userArray.stream().collect( + Collectors.toMap(e -> (String) ((JSONObject) e).get("name"), e -> (String) ((JSONObject) e).get("value")) + ); + User user = new User(roleId, deptId); + populateUser(user, userMap); + users.add(user); + } + } + this.saveBatch(users); + } + + private void populateUser(User user, Map userMap) { + //涉及盐值的计算等操作 + user.setAccount(userMap.get("userCode")); + user.setSex(Integer.valueOf(userMap.get("sex"))); + user.setName(userMap.get("userName")); + //设置密码 + user.setPassword("111111"); + try { + user.setPassword(RSAUtils.decrypt(user.getPassword(), ShiroKit.getSession().getAttribute(RSAUtils.RSAPrivateKey).toString())); + } catch (Exception var5) { + log.error("密码解密异常", var5); + } + user.setSalt(userMap.get("userName")); + user.setSalt(ShiroKit.getRandomSalt(5)); + user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt())); + user.setEmail(userMap.get("email")); + user.setPhone(userMap.get("mobile")); + user.setStatus("1"); + user.setIsSync(1); + user.setDelFlag("0"); + } + + /** + * 更新用户 + */ + private void doUpdateUser(List editUserCodeList, Map userMap, String roleId) { + List users = new ArrayList<>(); + for (String editUser : editUserCodeList) { + User user = userMap.get(editUser); + if (ObjectUtils.isNotEmpty(user)) { + user.setRoleId(roleId); + users.add(user); + } + } + this.saveBatch(users); + } + + /** + * @param userListMap + * @param key 用户或者管理员 + * @param userMap 现存的用户map列表 + */ + private void doGetUserDataSource(Map> userListMap, String key, Map userMap, Map roleMap) { + //获取管理员的信息 + List userList = userListMap.get(key); + for (String userPath : userList) { + String userUrl = appUrl + FRAGMENT_PATH + appName + "/roles/" + userPath + "/allocatedUsers"; + Object roleObject = HttpRequest.sendGet(userUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + List userCodeList = new ArrayList<>(); + Map sourceMap = new HashMap<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String userCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("userCode")).findFirst().get()).get("userCode"); + userCodeList.add(userCode); + //和获取的用户列表进行比较管理员、userCode是否存在 + sourceMap.put(userCode, dataList); + } + compareGetNewUserData(userCodeList, key, sourceMap, userMap, roleMap); + } + } + + + /** + * 通过应用名称获取角色的类型 + * + * @return + */ + private Map> getRoleCodes() { + String rolesUrl = appUrl + FRAGMENT_PATH + appName + "/roles"; + Object roleObject = HttpRequest.sendGet(rolesUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains(MEMBER)) { + userList.add(roleCode); + } + if (roleName.contains(ADMIN)) { + adminList.add(roleCode); + } + } + userListMap.put(MEMBER, userList); + userListMap.put(ADMIN, adminList); + return userListMap; + } +} diff --git a/src/main/java/com/casic/util/HttpRequest.java b/src/main/java/com/casic/util/HttpRequest.java new file mode 100644 index 0000000..d084906 --- /dev/null +++ b/src/main/java/com/casic/util/HttpRequest.java @@ -0,0 +1,161 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class HttpRequest { + + + //获取组织结构下的应用角色,通过角色获取角色名称 + // 通过角色名称,获取所有的用户信息 + //对用户信息进行合并 + + private static final CloseableHttpClient httpclient = HttpClients.createDefault(); + + //角色下面的用户,用户下面的角色 + public static void main(String[] args) { + //查询指定应用下、组织结构下的角色信息 + String url = "http://10.80.12.33/OrgAndUserService/apps/XLJCYJ/roles/XLJCYJ_GLY/allocatedUsers"; + // 获取指定应用下的角色的所有授权用户信息 +// url = "http://10.80.12.33/OrgAndUserService/apps/QCDTJC_ZWJ/roles/QCDTJC_ZWJ_101/allocatedUsers"; + Object roleObject = sendGet(url); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains("普通用户")) { + userList.add(roleCode); + } + if (roleName.contains("管理员")) { + adminList.add(roleCode); + } + } + userListMap.put("用户", userList); + userListMap.put("管理员", adminList); + return; + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url 发送请求的URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + /** + * 发送HttpGet请求 + * + * @param url + * @return + */ + public static Object sendGet(String url) { + HttpGet httpget = new HttpGet(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httpget); + } catch (IOException e1) { + e1.printStackTrace(); + } + Object resultObject = null; + try { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + Map resultMap = JSON.parseObject(result); + resultObject = resultMap.get("collection"); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultObject; + } + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } +} diff --git a/src/main/java/com/casic/util/RSAUtils.java b/src/main/java/com/casic/util/RSAUtils.java new file mode 100644 index 0000000..8b64642 --- /dev/null +++ b/src/main/java/com/casic/util/RSAUtils.java @@ -0,0 +1,78 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.casic.util; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import javax.crypto.Cipher; +import org.apache.commons.codec.binary.Base64; + +public class RSAUtils { + public static String RSAPrivateKey = "RSAPrivateKey"; + public static String RSAPublicKey = "RSAPublicKey"; + + public RSAUtils() { + } + + public static void main(String[] args) throws Exception { + Map keyMap = new HashMap(); + genKeyPair(); + long ts = (new Date()).getTime() / 1000L; + String timestamp = String.valueOf(ts); + String message = "f3dwfgm2wg9g" + timestamp; + System.out.println("随机生成的公钥为:" + (String)keyMap.get(0)); + System.out.println("随机生成的私钥为:" + (String)keyMap.get(1)); + String public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOUbkwDVAIPSZTwc00XNSoZRPr37BMB8f5dnuWPL3DvgI9E1l4gVysu80XP/qiZjSkeTWLsxt47jjUeTICrLcC23jebqyNrXU9LpqebVprq8tPjhjPK49GlOT0LuOvdaKRXK6R7izgMdyROQuekDpnn7qKfTi6tQWTVyS7Ryf6DQIDAQAB"; + String private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI5RuTANUAg9JlPBzTRc1KhlE+vfsEwHx/l2e5Y8vcO+Aj0TWXiBXKy7zRc/+qJmNKR5NYuzG3juONR5MgKstwLbeN5urI2tdT0ump5tWmury0+OGM8rj0aU5PQu4691opFcrpHuLOAx3JE5C56QOmefuop9OLq1BZNXJLtHJ/oNAgMBAAECgYBg5ofejdHmKiyEbroXYvVwSpIL0dwpiErCMcfn/Sd/tUm06A3NHNdKzPvRTsCJ/mjta5HnsmWMKzcKhBJm+84G36wutg1oXClXy0NK7wZy+mpj8Rxw57e9SpwCP5e3kMXhcnKalZHbb7KqUwWesZRQ24Mb0kxIBzRhJnaUVyj8SQJBANq90Sd3JXmwpHdU6UbYidFfxOZzLXas0Ti1MgwopClJTtjrZpxjtRRUrqGqea2hknhiu6xPxFB/On6IV6bS4KcCQQCmj4c2dKZ2pw0Dt+in9l4up9A2ztLlOLcjtAn9OMhmrG9L5PdXLRdTMeLbZguQ9srCUx5nfB3g0nEQMXrUG5IrAkEAoni2759Z4IdJwbD6DDsuMqv1rk4CiNFYHczIPau6M0hWHlzKvIJ6r30usLnU4xjNmEmNqDEfWcMGiZFvuWOMpQJABC+RN1YhJNQ36IMDrszrOwLuoaH6/NW7DIOmyJ1Xs/Tbay3a5W71qhqT1+2tlrwNBmsuVW1yFsdTHhQQQSpcNwJBAKD5zFqxWlOAWHbPInp3SvIV5RH+GCUZLxgEFvvLg2xi7vVigkzbf6BOGLIXi6rjyomrxNo/aGGQ1r5vAGU9M7c="; + String messageEn = encrypt(message, public_key); + System.out.println(message + "\t加密后的字符串为:" + messageEn); + String messageDe = decrypt(messageEn, private_key); + System.out.println("还原后的字符串为:" + messageDe); + } + + public static Map genKeyPair() throws NoSuchAlgorithmException { + Map keyMap = new HashMap(); + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(1024, new SecureRandom()); + KeyPair keyPair = keyPairGen.generateKeyPair(); + RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate(); + RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic(); + String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded())); + String privateKeyString = new String(Base64.encodeBase64(privateKey.getEncoded())); + keyMap.put(RSAPublicKey, publicKeyString); + keyMap.put(RSAPrivateKey, privateKeyString); + return keyMap; + } + + public static String encrypt(String str, String publicKey) throws Exception { + byte[] decoded = Base64.decodeBase64(publicKey); + RSAPublicKey pubKey = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(1, pubKey); + String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); + return outStr; + } + + public static String decrypt(String str, String privateKey) throws Exception { + byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); + byte[] decoded = Base64.decodeBase64(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(2, priKey); + String outStr = new String(cipher.doFinal(inputByte)); + return outStr; + } +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index ef3f9da..ef7bf6a 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -3,16 +3,16 @@ ################### spring配置 ################### spring: datasource: - url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:dm://111.198.10.15:11211/schema=SMARTWELL?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull driver-class-name: dm.jdbc.driver.DmDriver - username: XLJC - password: Xljc@2023 + username: SMARTWELL + password: Casic20311 session: store-type: redis redis: - host: 10.80.1.124 - port: 31681 - password: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer # session: diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java new file mode 100644 index 0000000..a3de00d --- /dev/null +++ b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java @@ -0,0 +1,240 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.UserMapper; +import com.casic.enums.UserDataEnum; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.model.User; +import com.casic.service.UserDataDelayReceiver; +import com.casic.util.HttpRequest; +import com.casic.util.RSAUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class UserDataDelayReceiverImpl extends ServiceImpl implements UserDataDelayReceiver, UserDataEnum { + + @Value("${casic.device.appName}") + private String appName; + @Value("${casic.device.appUrl}") + private String appUrl; + + /** + * 1、获取授权人员的信息数据 + * 2、根据人员信息数据获取角色信息 + * 3、获取当前数据库的信息 + * 4、判别是否需要更新的和新增的用户 + * 5、 + */ + @Override + public void saveNewUserData() { + Map roleMap = getLocalRoleData(); + Map userMap = getLocalUserData(roleMap); + doSaveNewUserData(userMap, roleMap); + } + + /** + * 获取用户源信息 + */ + private void doSaveNewUserData(Map userMap, Map roleMap) { + //获取应用下的所有角色 + Map> userListMap = getRoleCodes(); + //分为管理员列表和普通角色列表信息 + doGetUserDataSource(userListMap, ADMIN, userMap, roleMap); + doGetUserDataSource(userListMap, MEMBER, userMap, roleMap); + } + + private Map getLocalRoleData() { + List> roleMapList = this.baseMapper.getRolesByName(); + Map roleMap = new HashMap<>(); + for (Map role : roleMapList) { + if (role.get("NAME").contains(ADMIN)) { + roleMap.put(role.get("ID"), ADMIN); + } else { + roleMap.put(role.get("ID"), MEMBER); + } + } + return roleMap; + } + + /** + * 获取当前的用户信息列表 + */ + private Map getLocalUserData(Map roleMap) { + List localUserList = this.baseMapper.selectList(null); + localUserList.stream() + .filter(e -> roleMap.containsKey(e.getRoleId())) + .forEach( + localUser -> { + if (roleMap.containsKey(localUser.getRoleId())) { + localUser.setUserType(roleMap.get(localUser.getRoleId())); + } + } + ); + //userCode作为账号 + Map userMap = localUserList.stream() + .collect( + Collectors.toMap(User::getAccount, e -> e) + ); + return userMap; + } + + /** + * 比较获取新的用户信息数据,比较直接更新 + */ + private void compareGetNewUserData(List userCodeList, String key, Map sourceMap, Map userMap, Map roleMap) { + List newUserCodeList = userCodeList.stream().filter( + userCode -> !userMap.containsKey(userCode)).collect(Collectors.toList()); + List editUserList = userCodeList.stream().filter( + userCode -> userMap.containsKey(userCode) && !userMap.get(userCode).getUserType().equals(key) + ).collect(Collectors.toList()); + String roleId = ""; + Long deptId = null; + for (Map.Entry entry : roleMap.entrySet()) { + if (entry.getValue().equals(key)) { + roleId = entry.getKey(); + } + } + for (Map.Entry entry : userMap.entrySet()) { + if (entry.getValue().equals(key)) { + deptId = entry.getValue().getDeptId(); + break; + } + } + if (StringUtils.isEmpty(roleId)) { + return; + } + //新增 + doAddUser(newUserCodeList, sourceMap, roleId, deptId); + //更新 + doUpdateUser(editUserList, userMap, roleId); + return; + } + + /** + * 新增用户 + */ + private void doAddUser(List newUserCodeList, Map sourceUserMap, String roleId, Long deptId) { + List users = new ArrayList<>(); + for (String userCode : newUserCodeList) { + JSONArray userArray = sourceUserMap.get(userCode); + if (ObjectUtils.isNotEmpty(userArray)) { + Map userMap = userArray.stream().collect( + Collectors.toMap(e -> (String) ((JSONObject) e).get("name"), e -> (String) ((JSONObject) e).get("value")) + ); + User user = new User(roleId, deptId); + populateUser(user, userMap); + users.add(user); + } + } + this.saveBatch(users); + } + + private void populateUser(User user, Map userMap) { + //涉及盐值的计算等操作 + user.setAccount(userMap.get("userCode")); + user.setSex(Integer.valueOf(userMap.get("sex"))); + user.setName(userMap.get("userName")); + //设置密码 + user.setPassword("111111"); + try { + user.setPassword(RSAUtils.decrypt(user.getPassword(), ShiroKit.getSession().getAttribute(RSAUtils.RSAPrivateKey).toString())); + } catch (Exception var5) { + log.error("密码解密异常", var5); + } + user.setSalt(userMap.get("userName")); + user.setSalt(ShiroKit.getRandomSalt(5)); + user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt())); + user.setEmail(userMap.get("email")); + user.setPhone(userMap.get("mobile")); + user.setStatus("1"); + user.setIsSync(1); + user.setDelFlag("0"); + } + + /** + * 更新用户 + */ + private void doUpdateUser(List editUserCodeList, Map userMap, String roleId) { + List users = new ArrayList<>(); + for (String editUser : editUserCodeList) { + User user = userMap.get(editUser); + if (ObjectUtils.isNotEmpty(user)) { + user.setRoleId(roleId); + users.add(user); + } + } + this.saveBatch(users); + } + + /** + * @param userListMap + * @param key 用户或者管理员 + * @param userMap 现存的用户map列表 + */ + private void doGetUserDataSource(Map> userListMap, String key, Map userMap, Map roleMap) { + //获取管理员的信息 + List userList = userListMap.get(key); + for (String userPath : userList) { + String userUrl = appUrl + FRAGMENT_PATH + appName + "/roles/" + userPath + "/allocatedUsers"; + Object roleObject = HttpRequest.sendGet(userUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + List userCodeList = new ArrayList<>(); + Map sourceMap = new HashMap<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String userCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("userCode")).findFirst().get()).get("userCode"); + userCodeList.add(userCode); + //和获取的用户列表进行比较管理员、userCode是否存在 + sourceMap.put(userCode, dataList); + } + compareGetNewUserData(userCodeList, key, sourceMap, userMap, roleMap); + } + } + + + /** + * 通过应用名称获取角色的类型 + * + * @return + */ + private Map> getRoleCodes() { + String rolesUrl = appUrl + FRAGMENT_PATH + appName + "/roles"; + Object roleObject = HttpRequest.sendGet(rolesUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains(MEMBER)) { + userList.add(roleCode); + } + if (roleName.contains(ADMIN)) { + adminList.add(roleCode); + } + } + userListMap.put(MEMBER, userList); + userListMap.put(ADMIN, adminList); + return userListMap; + } +} diff --git a/src/main/java/com/casic/util/HttpRequest.java b/src/main/java/com/casic/util/HttpRequest.java new file mode 100644 index 0000000..d084906 --- /dev/null +++ b/src/main/java/com/casic/util/HttpRequest.java @@ -0,0 +1,161 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class HttpRequest { + + + //获取组织结构下的应用角色,通过角色获取角色名称 + // 通过角色名称,获取所有的用户信息 + //对用户信息进行合并 + + private static final CloseableHttpClient httpclient = HttpClients.createDefault(); + + //角色下面的用户,用户下面的角色 + public static void main(String[] args) { + //查询指定应用下、组织结构下的角色信息 + String url = "http://10.80.12.33/OrgAndUserService/apps/XLJCYJ/roles/XLJCYJ_GLY/allocatedUsers"; + // 获取指定应用下的角色的所有授权用户信息 +// url = "http://10.80.12.33/OrgAndUserService/apps/QCDTJC_ZWJ/roles/QCDTJC_ZWJ_101/allocatedUsers"; + Object roleObject = sendGet(url); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains("普通用户")) { + userList.add(roleCode); + } + if (roleName.contains("管理员")) { + adminList.add(roleCode); + } + } + userListMap.put("用户", userList); + userListMap.put("管理员", adminList); + return; + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url 发送请求的URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + /** + * 发送HttpGet请求 + * + * @param url + * @return + */ + public static Object sendGet(String url) { + HttpGet httpget = new HttpGet(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httpget); + } catch (IOException e1) { + e1.printStackTrace(); + } + Object resultObject = null; + try { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + Map resultMap = JSON.parseObject(result); + resultObject = resultMap.get("collection"); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultObject; + } + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } +} diff --git a/src/main/java/com/casic/util/RSAUtils.java b/src/main/java/com/casic/util/RSAUtils.java new file mode 100644 index 0000000..8b64642 --- /dev/null +++ b/src/main/java/com/casic/util/RSAUtils.java @@ -0,0 +1,78 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.casic.util; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import javax.crypto.Cipher; +import org.apache.commons.codec.binary.Base64; + +public class RSAUtils { + public static String RSAPrivateKey = "RSAPrivateKey"; + public static String RSAPublicKey = "RSAPublicKey"; + + public RSAUtils() { + } + + public static void main(String[] args) throws Exception { + Map keyMap = new HashMap(); + genKeyPair(); + long ts = (new Date()).getTime() / 1000L; + String timestamp = String.valueOf(ts); + String message = "f3dwfgm2wg9g" + timestamp; + System.out.println("随机生成的公钥为:" + (String)keyMap.get(0)); + System.out.println("随机生成的私钥为:" + (String)keyMap.get(1)); + String public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOUbkwDVAIPSZTwc00XNSoZRPr37BMB8f5dnuWPL3DvgI9E1l4gVysu80XP/qiZjSkeTWLsxt47jjUeTICrLcC23jebqyNrXU9LpqebVprq8tPjhjPK49GlOT0LuOvdaKRXK6R7izgMdyROQuekDpnn7qKfTi6tQWTVyS7Ryf6DQIDAQAB"; + String private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI5RuTANUAg9JlPBzTRc1KhlE+vfsEwHx/l2e5Y8vcO+Aj0TWXiBXKy7zRc/+qJmNKR5NYuzG3juONR5MgKstwLbeN5urI2tdT0ump5tWmury0+OGM8rj0aU5PQu4691opFcrpHuLOAx3JE5C56QOmefuop9OLq1BZNXJLtHJ/oNAgMBAAECgYBg5ofejdHmKiyEbroXYvVwSpIL0dwpiErCMcfn/Sd/tUm06A3NHNdKzPvRTsCJ/mjta5HnsmWMKzcKhBJm+84G36wutg1oXClXy0NK7wZy+mpj8Rxw57e9SpwCP5e3kMXhcnKalZHbb7KqUwWesZRQ24Mb0kxIBzRhJnaUVyj8SQJBANq90Sd3JXmwpHdU6UbYidFfxOZzLXas0Ti1MgwopClJTtjrZpxjtRRUrqGqea2hknhiu6xPxFB/On6IV6bS4KcCQQCmj4c2dKZ2pw0Dt+in9l4up9A2ztLlOLcjtAn9OMhmrG9L5PdXLRdTMeLbZguQ9srCUx5nfB3g0nEQMXrUG5IrAkEAoni2759Z4IdJwbD6DDsuMqv1rk4CiNFYHczIPau6M0hWHlzKvIJ6r30usLnU4xjNmEmNqDEfWcMGiZFvuWOMpQJABC+RN1YhJNQ36IMDrszrOwLuoaH6/NW7DIOmyJ1Xs/Tbay3a5W71qhqT1+2tlrwNBmsuVW1yFsdTHhQQQSpcNwJBAKD5zFqxWlOAWHbPInp3SvIV5RH+GCUZLxgEFvvLg2xi7vVigkzbf6BOGLIXi6rjyomrxNo/aGGQ1r5vAGU9M7c="; + String messageEn = encrypt(message, public_key); + System.out.println(message + "\t加密后的字符串为:" + messageEn); + String messageDe = decrypt(messageEn, private_key); + System.out.println("还原后的字符串为:" + messageDe); + } + + public static Map genKeyPair() throws NoSuchAlgorithmException { + Map keyMap = new HashMap(); + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(1024, new SecureRandom()); + KeyPair keyPair = keyPairGen.generateKeyPair(); + RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate(); + RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic(); + String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded())); + String privateKeyString = new String(Base64.encodeBase64(privateKey.getEncoded())); + keyMap.put(RSAPublicKey, publicKeyString); + keyMap.put(RSAPrivateKey, privateKeyString); + return keyMap; + } + + public static String encrypt(String str, String publicKey) throws Exception { + byte[] decoded = Base64.decodeBase64(publicKey); + RSAPublicKey pubKey = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(1, pubKey); + String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); + return outStr; + } + + public static String decrypt(String str, String privateKey) throws Exception { + byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); + byte[] decoded = Base64.decodeBase64(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(2, priKey); + String outStr = new String(cipher.doFinal(inputByte)); + return outStr; + } +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index ef3f9da..ef7bf6a 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -3,16 +3,16 @@ ################### spring配置 ################### spring: datasource: - url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:dm://111.198.10.15:11211/schema=SMARTWELL?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull driver-class-name: dm.jdbc.driver.DmDriver - username: XLJC - password: Xljc@2023 + username: SMARTWELL + password: Casic20311 session: store-type: redis redis: - host: 10.80.1.124 - port: 31681 - password: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer # session: diff --git a/src/main/resources/config/application-dz.yml b/src/main/resources/config/application-dz.yml new file mode 100644 index 0000000..ef3f9da --- /dev/null +++ b/src/main/resources/config/application-dz.yml @@ -0,0 +1,33 @@ +server: + port: 11314 +################### spring配置 ################### +spring: + datasource: + url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + driver-class-name: dm.jdbc.driver.DmDriver + username: XLJC + password: Xljc@2023 + session: + store-type: redis + redis: + host: 10.80.1.124 + port: 31681 + password: + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: info + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/pom.xml b/pom.xml index fa162a5..ec5ddc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,6 @@ - @@ -69,6 +68,17 @@ 4.5.13 + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.casic + casic-admin-core + 2.0.0.alpha + diff --git a/smartwell-demos.iml b/smartwell-demos.iml index 6a586fb..0320120 100644 --- a/smartwell-demos.iml +++ b/smartwell-demos.iml @@ -56,6 +56,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/casic/config/task/TaskConfigurer.java b/src/main/java/com/casic/config/task/TaskConfigurer.java index f749ca3..699c0e3 100644 --- a/src/main/java/com/casic/config/task/TaskConfigurer.java +++ b/src/main/java/com/casic/config/task/TaskConfigurer.java @@ -1,7 +1,8 @@ package com.casic.config.task; import com.casic.service.DeviceDataService; -import com.casic.service.ThirdDataService; +import com.casic.service.UserDataDelayReceiver; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -16,18 +17,23 @@ */ @Configuration @EnableScheduling +@RequiredArgsConstructor public class TaskConfigurer implements SchedulingConfigurer { @Value("${casic.device.online.cron}") - private String timeCron; - @Autowired - private DeviceDataService deviceDataService; + private String onlineStateCron; + @Value("${casic.device.transfer-user.cron}") + private String transferUserCron; + + + private final DeviceDataService deviceDataService; + private final UserDataDelayReceiver userDataDelayReceiver; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { TriggerTask triggrtTask = new TriggerTask(nextDayDevice(), triggerContext -> { - return new CronTrigger(timeCron).nextExecutionTime(triggerContext); + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); }); taskRegistrar.addTriggerTask(triggrtTask); } @@ -41,4 +47,17 @@ }; } + /** + * 定时同步普光 + */ + private Runnable getUserData() { + return new Runnable() { + @Override + public void run() { + userDataDelayReceiver.saveNewUserData(); + } + }; + + } + } \ No newline at end of file diff --git a/src/main/java/com/casic/dao/UserMapper.java b/src/main/java/com/casic/dao/UserMapper.java new file mode 100644 index 0000000..266d786 --- /dev/null +++ b/src/main/java/com/casic/dao/UserMapper.java @@ -0,0 +1,20 @@ +package com.casic.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.model.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + //获取所有的角色 + @Select(" SELECT id,name " + + " FROM sys_role " + + " where name like '达州%' ") + List> getRolesByName(); +} diff --git a/src/main/java/com/casic/enums/DeviceTypeEnum.java b/src/main/java/com/casic/enums/DeviceTypeEnum.java deleted file mode 100644 index 8d5a6e6..0000000 --- a/src/main/java/com/casic/enums/DeviceTypeEnum.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.casic.enums; - - -public enum DeviceTypeEnum { - Well("井盖状态监测仪", 1), - Liquid("液位监测仪", 2), - WasteGas("有害气体监测仪", 3), - Methane("燃气智能监测终端", 4), - TempHumi("温湿度监测仪", 5), - Dig("开挖监测仪", 6), - WellLocator("井盖定位监测仪", 7), - Noise("噪声记录仪", 8), - TempPressure("温度压力监测仪", 9), - FireHydrant("消防栓防盗水监测仪", 11), - Tube("管盯", 12), - LG("井盖液位一体机", 13), - H2s("硫化氢检测终端", 14); - - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DeviceTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public static DeviceTypeEnum getByIndex(String index) { - try { - for (DeviceTypeEnum deviceTypeEnum : values()) { - if (deviceTypeEnum.index == Integer.parseInt(index)) { - return deviceTypeEnum; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } -} \ No newline at end of file diff --git a/src/main/java/com/casic/enums/UserDataEnum.java b/src/main/java/com/casic/enums/UserDataEnum.java new file mode 100644 index 0000000..c8b77af --- /dev/null +++ b/src/main/java/com/casic/enums/UserDataEnum.java @@ -0,0 +1,13 @@ +package com.casic.enums; + +/** + * @author cz + */ +public interface UserDataEnum { + + String ADMIN = "管理员"; + String MEMBER = "普通用户"; + + String FRAGMENT_PATH = "/OrgAndUserService/apps/"; + +} diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java index 13d68fa..b856672 100644 --- a/src/main/java/com/casic/model/User.java +++ b/src/main/java/com/casic/model/User.java @@ -23,8 +23,11 @@ private Long id; private String avatar; + //userCode private String account; + //加密111,111 private String password; + // private String salt; private String name; @JSONField( @@ -37,6 +40,7 @@ @TableField("role_id") private String roleId; @TableField("dept_id") + //部门id private Long deptId; private String status; private Integer version; @@ -69,6 +73,16 @@ ) private String deptname; + @TableField( + exist = false + ) + private String userType; + + public User(String roleId, Long deptId) { + this.roleId=roleId; + this.deptId=deptId; + } + public Serializable pkVal() { return this.id; } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java index 71f8ce9..f383421 100644 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -9,4 +9,6 @@ Object getLevel(String deviceType); void checkAndUpdateDeviceOnline(); + + } diff --git a/src/main/java/com/casic/service/UserDataDelayReceiver.java b/src/main/java/com/casic/service/UserDataDelayReceiver.java new file mode 100644 index 0000000..2eddda5 --- /dev/null +++ b/src/main/java/com/casic/service/UserDataDelayReceiver.java @@ -0,0 +1,12 @@ +package com.casic.service; + +/** + * @author cz + * @date 2023-9-13 + * 此类用于获取普光油气田的授权用户的信息和角色信息 + */ +public interface UserDataDelayReceiver { + + void saveNewUserData(); + +} diff --git a/src/main/java/com/casic/service/impl/DataScopeBuilder.java b/src/main/java/com/casic/service/impl/DataScopeBuilder.java index 7c145d7..793312e 100644 --- a/src/main/java/com/casic/service/impl/DataScopeBuilder.java +++ b/src/main/java/com/casic/service/impl/DataScopeBuilder.java @@ -31,7 +31,7 @@ Map>> userDataScopeListMap = userIdDataScopeList.stream() .collect(Collectors.groupingBy(a -> a.get("scopeType"))); List userIdList = new ArrayList<>(); - if(userDataScopeListMap.containsKey("1")){ + if (userDataScopeListMap.containsKey("1")) { userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); } userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); @@ -40,7 +40,9 @@ deptUserList.addAll(userDataScopeListMap.get("2")); } deptUserList.addAll(userDataScopeListMap.get("3")); - userIdList.addAll(getParentDeptList(deptUserList, deptId)); + if (ObjectUtils.isNotEmpty(deptId)) { + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + } List userList = userProvider(userIdList); return userList; } diff --git a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java index c2af406..71d244c 100644 --- a/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java +++ b/src/main/java/com/casic/service/impl/ThirdDataServiceImpl.java @@ -15,6 +15,7 @@ import com.casic.util.WebSocket; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -34,6 +38,12 @@ private final WebSocket webSocket; private final DataScopeBuilder dataScopeBuilder; + @Value("${casic.device.apn}") + private String apn; + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)); + + @Override public Object h2sData(Map h2sDataMap) { try { @@ -42,8 +52,9 @@ return powerOnReport(h2sDataMap); } else if (h2sDataMap.containsKey(H2S_VALUE)) { //数据上报 if (ObjectUtils.isNotEmpty(h2sDataMap.get(DEVCODE))) { + String devcode = ((String) h2sDataMap.get(DEVCODE)).toUpperCase(); //清除离线-清除报警-报警-存库-查询是否有下发配置-进行回应 - return dataSave(h2sDataMap); + return dataSave(h2sDataMap, devcode); } } } catch (DataAccessException dae) { @@ -55,7 +66,8 @@ @Override public void configConfirm(Map configConfirmMap) { if (configConfirmMap.containsKey(DEVCODE) && !StringUtils.isEmpty(configConfirmMap.get(DEVCODE))) { - this.baseMapper.configConfirm(configConfirmMap.get(DEVCODE)); + String devcode = ((String) configConfirmMap.get(DEVCODE)).toUpperCase(); + this.baseMapper.configConfirm(devcode); } } @@ -66,10 +78,12 @@ //判断是否有下发配置必须 map.put("status", ObjectUtils.isNotEmpty(configDataMap) ? 200 : 201); if (ObjectUtils.isNotEmpty(configDataMap) && configDataMap.containsKey("interval")) { - configDataMap.put("interval", String.valueOf((Integer) configDataMap.get("interval"))); - configDataMap.put("port", String.valueOf((Integer) configDataMap.get("port"))); - configDataMap.put("period", String.valueOf((Integer) configDataMap.get("period"))); - configDataMap.put("repeat", String.valueOf((Integer) configDataMap.get("repeat"))); + configDataMap.put("interval", (String) configDataMap.get("interval")); + configDataMap.put("port", (String) configDataMap.get("port")); + configDataMap.put("apn",apn); + configDataMap.put("period", (String) configDataMap.get("period")); + configDataMap.put("repeat", (String) configDataMap.get("repeat")); + } map.put("params", configDataMap); //可省略 @@ -107,12 +121,12 @@ return defaultDeliveryConfig(null); } - private Map dataSave(Map h2sDataMap) { - DataH2s dataH2s = initH2sData(h2sDataMap); - this.baseMapper.clearOnline((String) h2sDataMap.get(DEVCODE)); + private Map dataSave(Map h2sDataMap, String devcode) { + DataH2s dataH2s = initH2sData(h2sDataMap, devcode); + this.baseMapper.clearOnline(devcode); if (ObjectUtils.isNotEmpty(dataH2s)) { checkAlarm(dataH2s); - Map configDataMap = redisCommon.getMsg((String) h2sDataMap.get(DEVCODE)); + Map configDataMap = redisCommon.getMsg(devcode); if (ObjectUtils.isNotEmpty(configDataMap)) { return defaultDeliveryConfig(configDataMap); } @@ -120,9 +134,8 @@ return defaultDeliveryConfig(null); } - private DataH2s initH2sData(Map h2sDataMap) { + private DataH2s initH2sData(Map h2sDataMap, String devcode) { DataH2s dataH2s = new DataH2s(); - String devcode = (String) h2sDataMap.get(DEVCODE); String wellCode = this.baseMapper.getWellCode(devcode); dataH2s.setWellCode(wellCode); dataH2s.setDevcode(devcode); @@ -151,7 +164,7 @@ if (Float.valueOf(dataH2s.getStrength()) > ruleValue) { Long id = this.baseMapper.getDeviceId(dataH2s.getDevcode()); alarmRecordMapper.insert(buildAlarmRecord(dataH2s, id)); - sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode())); + threadPoolExecutor.execute(() -> sendAlarm("浓度超限", this.baseMapper.getDeptIdsByDevcode(dataH2s.getDevcode()))); } } } diff --git a/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java new file mode 100644 index 0000000..a3de00d --- /dev/null +++ b/src/main/java/com/casic/service/impl/UserDataDelayReceiverImpl.java @@ -0,0 +1,240 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.UserMapper; +import com.casic.enums.UserDataEnum; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.model.User; +import com.casic.service.UserDataDelayReceiver; +import com.casic.util.HttpRequest; +import com.casic.util.RSAUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class UserDataDelayReceiverImpl extends ServiceImpl implements UserDataDelayReceiver, UserDataEnum { + + @Value("${casic.device.appName}") + private String appName; + @Value("${casic.device.appUrl}") + private String appUrl; + + /** + * 1、获取授权人员的信息数据 + * 2、根据人员信息数据获取角色信息 + * 3、获取当前数据库的信息 + * 4、判别是否需要更新的和新增的用户 + * 5、 + */ + @Override + public void saveNewUserData() { + Map roleMap = getLocalRoleData(); + Map userMap = getLocalUserData(roleMap); + doSaveNewUserData(userMap, roleMap); + } + + /** + * 获取用户源信息 + */ + private void doSaveNewUserData(Map userMap, Map roleMap) { + //获取应用下的所有角色 + Map> userListMap = getRoleCodes(); + //分为管理员列表和普通角色列表信息 + doGetUserDataSource(userListMap, ADMIN, userMap, roleMap); + doGetUserDataSource(userListMap, MEMBER, userMap, roleMap); + } + + private Map getLocalRoleData() { + List> roleMapList = this.baseMapper.getRolesByName(); + Map roleMap = new HashMap<>(); + for (Map role : roleMapList) { + if (role.get("NAME").contains(ADMIN)) { + roleMap.put(role.get("ID"), ADMIN); + } else { + roleMap.put(role.get("ID"), MEMBER); + } + } + return roleMap; + } + + /** + * 获取当前的用户信息列表 + */ + private Map getLocalUserData(Map roleMap) { + List localUserList = this.baseMapper.selectList(null); + localUserList.stream() + .filter(e -> roleMap.containsKey(e.getRoleId())) + .forEach( + localUser -> { + if (roleMap.containsKey(localUser.getRoleId())) { + localUser.setUserType(roleMap.get(localUser.getRoleId())); + } + } + ); + //userCode作为账号 + Map userMap = localUserList.stream() + .collect( + Collectors.toMap(User::getAccount, e -> e) + ); + return userMap; + } + + /** + * 比较获取新的用户信息数据,比较直接更新 + */ + private void compareGetNewUserData(List userCodeList, String key, Map sourceMap, Map userMap, Map roleMap) { + List newUserCodeList = userCodeList.stream().filter( + userCode -> !userMap.containsKey(userCode)).collect(Collectors.toList()); + List editUserList = userCodeList.stream().filter( + userCode -> userMap.containsKey(userCode) && !userMap.get(userCode).getUserType().equals(key) + ).collect(Collectors.toList()); + String roleId = ""; + Long deptId = null; + for (Map.Entry entry : roleMap.entrySet()) { + if (entry.getValue().equals(key)) { + roleId = entry.getKey(); + } + } + for (Map.Entry entry : userMap.entrySet()) { + if (entry.getValue().equals(key)) { + deptId = entry.getValue().getDeptId(); + break; + } + } + if (StringUtils.isEmpty(roleId)) { + return; + } + //新增 + doAddUser(newUserCodeList, sourceMap, roleId, deptId); + //更新 + doUpdateUser(editUserList, userMap, roleId); + return; + } + + /** + * 新增用户 + */ + private void doAddUser(List newUserCodeList, Map sourceUserMap, String roleId, Long deptId) { + List users = new ArrayList<>(); + for (String userCode : newUserCodeList) { + JSONArray userArray = sourceUserMap.get(userCode); + if (ObjectUtils.isNotEmpty(userArray)) { + Map userMap = userArray.stream().collect( + Collectors.toMap(e -> (String) ((JSONObject) e).get("name"), e -> (String) ((JSONObject) e).get("value")) + ); + User user = new User(roleId, deptId); + populateUser(user, userMap); + users.add(user); + } + } + this.saveBatch(users); + } + + private void populateUser(User user, Map userMap) { + //涉及盐值的计算等操作 + user.setAccount(userMap.get("userCode")); + user.setSex(Integer.valueOf(userMap.get("sex"))); + user.setName(userMap.get("userName")); + //设置密码 + user.setPassword("111111"); + try { + user.setPassword(RSAUtils.decrypt(user.getPassword(), ShiroKit.getSession().getAttribute(RSAUtils.RSAPrivateKey).toString())); + } catch (Exception var5) { + log.error("密码解密异常", var5); + } + user.setSalt(userMap.get("userName")); + user.setSalt(ShiroKit.getRandomSalt(5)); + user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt())); + user.setEmail(userMap.get("email")); + user.setPhone(userMap.get("mobile")); + user.setStatus("1"); + user.setIsSync(1); + user.setDelFlag("0"); + } + + /** + * 更新用户 + */ + private void doUpdateUser(List editUserCodeList, Map userMap, String roleId) { + List users = new ArrayList<>(); + for (String editUser : editUserCodeList) { + User user = userMap.get(editUser); + if (ObjectUtils.isNotEmpty(user)) { + user.setRoleId(roleId); + users.add(user); + } + } + this.saveBatch(users); + } + + /** + * @param userListMap + * @param key 用户或者管理员 + * @param userMap 现存的用户map列表 + */ + private void doGetUserDataSource(Map> userListMap, String key, Map userMap, Map roleMap) { + //获取管理员的信息 + List userList = userListMap.get(key); + for (String userPath : userList) { + String userUrl = appUrl + FRAGMENT_PATH + appName + "/roles/" + userPath + "/allocatedUsers"; + Object roleObject = HttpRequest.sendGet(userUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + List userCodeList = new ArrayList<>(); + Map sourceMap = new HashMap<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String userCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("userCode")).findFirst().get()).get("userCode"); + userCodeList.add(userCode); + //和获取的用户列表进行比较管理员、userCode是否存在 + sourceMap.put(userCode, dataList); + } + compareGetNewUserData(userCodeList, key, sourceMap, userMap, roleMap); + } + } + + + /** + * 通过应用名称获取角色的类型 + * + * @return + */ + private Map> getRoleCodes() { + String rolesUrl = appUrl + FRAGMENT_PATH + appName + "/roles"; + Object roleObject = HttpRequest.sendGet(rolesUrl); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains(MEMBER)) { + userList.add(roleCode); + } + if (roleName.contains(ADMIN)) { + adminList.add(roleCode); + } + } + userListMap.put(MEMBER, userList); + userListMap.put(ADMIN, adminList); + return userListMap; + } +} diff --git a/src/main/java/com/casic/util/HttpRequest.java b/src/main/java/com/casic/util/HttpRequest.java new file mode 100644 index 0000000..d084906 --- /dev/null +++ b/src/main/java/com/casic/util/HttpRequest.java @@ -0,0 +1,161 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class HttpRequest { + + + //获取组织结构下的应用角色,通过角色获取角色名称 + // 通过角色名称,获取所有的用户信息 + //对用户信息进行合并 + + private static final CloseableHttpClient httpclient = HttpClients.createDefault(); + + //角色下面的用户,用户下面的角色 + public static void main(String[] args) { + //查询指定应用下、组织结构下的角色信息 + String url = "http://10.80.12.33/OrgAndUserService/apps/XLJCYJ/roles/XLJCYJ_GLY/allocatedUsers"; + // 获取指定应用下的角色的所有授权用户信息 +// url = "http://10.80.12.33/OrgAndUserService/apps/QCDTJC_ZWJ/roles/QCDTJC_ZWJ_101/allocatedUsers"; + Object roleObject = sendGet(url); + JSONArray roleList = ((JSONArray) ((JSONObject) roleObject).get("items")); + Map> userListMap = new HashMap<>(); + List adminList = new ArrayList<>(); + List userList = new ArrayList<>(); + for (Object role : roleList) { + JSONArray dataList = (JSONArray) ((JSONObject) role).get("data"); + String roleName = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleName")).findFirst().get()).get("roleName"); + String roleCode = (String) ((JSONObject) dataList.stream().filter(e -> ((JSONObject) e).get("name").equals("roleCode")).findFirst().get()).get("roleCode"); + if (roleName.contains("普通用户")) { + userList.add(roleCode); + } + if (roleName.contains("管理员")) { + adminList.add(roleCode); + } + } + userListMap.put("用户", userList); + userListMap.put("管理员", adminList); + return; + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url 发送请求的URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + /** + * 发送HttpGet请求 + * + * @param url + * @return + */ + public static Object sendGet(String url) { + HttpGet httpget = new HttpGet(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httpget); + } catch (IOException e1) { + e1.printStackTrace(); + } + Object resultObject = null; + try { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + Map resultMap = JSON.parseObject(result); + resultObject = resultMap.get("collection"); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultObject; + } + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } +} diff --git a/src/main/java/com/casic/util/RSAUtils.java b/src/main/java/com/casic/util/RSAUtils.java new file mode 100644 index 0000000..8b64642 --- /dev/null +++ b/src/main/java/com/casic/util/RSAUtils.java @@ -0,0 +1,78 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.casic.util; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import javax.crypto.Cipher; +import org.apache.commons.codec.binary.Base64; + +public class RSAUtils { + public static String RSAPrivateKey = "RSAPrivateKey"; + public static String RSAPublicKey = "RSAPublicKey"; + + public RSAUtils() { + } + + public static void main(String[] args) throws Exception { + Map keyMap = new HashMap(); + genKeyPair(); + long ts = (new Date()).getTime() / 1000L; + String timestamp = String.valueOf(ts); + String message = "f3dwfgm2wg9g" + timestamp; + System.out.println("随机生成的公钥为:" + (String)keyMap.get(0)); + System.out.println("随机生成的私钥为:" + (String)keyMap.get(1)); + String public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOUbkwDVAIPSZTwc00XNSoZRPr37BMB8f5dnuWPL3DvgI9E1l4gVysu80XP/qiZjSkeTWLsxt47jjUeTICrLcC23jebqyNrXU9LpqebVprq8tPjhjPK49GlOT0LuOvdaKRXK6R7izgMdyROQuekDpnn7qKfTi6tQWTVyS7Ryf6DQIDAQAB"; + String private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI5RuTANUAg9JlPBzTRc1KhlE+vfsEwHx/l2e5Y8vcO+Aj0TWXiBXKy7zRc/+qJmNKR5NYuzG3juONR5MgKstwLbeN5urI2tdT0ump5tWmury0+OGM8rj0aU5PQu4691opFcrpHuLOAx3JE5C56QOmefuop9OLq1BZNXJLtHJ/oNAgMBAAECgYBg5ofejdHmKiyEbroXYvVwSpIL0dwpiErCMcfn/Sd/tUm06A3NHNdKzPvRTsCJ/mjta5HnsmWMKzcKhBJm+84G36wutg1oXClXy0NK7wZy+mpj8Rxw57e9SpwCP5e3kMXhcnKalZHbb7KqUwWesZRQ24Mb0kxIBzRhJnaUVyj8SQJBANq90Sd3JXmwpHdU6UbYidFfxOZzLXas0Ti1MgwopClJTtjrZpxjtRRUrqGqea2hknhiu6xPxFB/On6IV6bS4KcCQQCmj4c2dKZ2pw0Dt+in9l4up9A2ztLlOLcjtAn9OMhmrG9L5PdXLRdTMeLbZguQ9srCUx5nfB3g0nEQMXrUG5IrAkEAoni2759Z4IdJwbD6DDsuMqv1rk4CiNFYHczIPau6M0hWHlzKvIJ6r30usLnU4xjNmEmNqDEfWcMGiZFvuWOMpQJABC+RN1YhJNQ36IMDrszrOwLuoaH6/NW7DIOmyJ1Xs/Tbay3a5W71qhqT1+2tlrwNBmsuVW1yFsdTHhQQQSpcNwJBAKD5zFqxWlOAWHbPInp3SvIV5RH+GCUZLxgEFvvLg2xi7vVigkzbf6BOGLIXi6rjyomrxNo/aGGQ1r5vAGU9M7c="; + String messageEn = encrypt(message, public_key); + System.out.println(message + "\t加密后的字符串为:" + messageEn); + String messageDe = decrypt(messageEn, private_key); + System.out.println("还原后的字符串为:" + messageDe); + } + + public static Map genKeyPair() throws NoSuchAlgorithmException { + Map keyMap = new HashMap(); + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(1024, new SecureRandom()); + KeyPair keyPair = keyPairGen.generateKeyPair(); + RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate(); + RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic(); + String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded())); + String privateKeyString = new String(Base64.encodeBase64(privateKey.getEncoded())); + keyMap.put(RSAPublicKey, publicKeyString); + keyMap.put(RSAPrivateKey, privateKeyString); + return keyMap; + } + + public static String encrypt(String str, String publicKey) throws Exception { + byte[] decoded = Base64.decodeBase64(publicKey); + RSAPublicKey pubKey = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(1, pubKey); + String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); + return outStr; + } + + public static String decrypt(String str, String privateKey) throws Exception { + byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); + byte[] decoded = Base64.decodeBase64(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(2, priKey); + String outStr = new String(cipher.doFinal(inputByte)); + return outStr; + } +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index ef3f9da..ef7bf6a 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -3,16 +3,16 @@ ################### spring配置 ################### spring: datasource: - url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:dm://111.198.10.15:11211/schema=SMARTWELL?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull driver-class-name: dm.jdbc.driver.DmDriver - username: XLJC - password: Xljc@2023 + username: SMARTWELL + password: Casic20311 session: store-type: redis redis: - host: 10.80.1.124 - port: 31681 - password: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer # session: diff --git a/src/main/resources/config/application-dz.yml b/src/main/resources/config/application-dz.yml new file mode 100644 index 0000000..ef3f9da --- /dev/null +++ b/src/main/resources/config/application-dz.yml @@ -0,0 +1,33 @@ +server: + port: 11314 +################### spring配置 ################### +spring: + datasource: + url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + driver-class-name: dm.jdbc.driver.DmDriver + username: XLJC + password: Xljc@2023 + session: + store-type: redis + redis: + host: 10.80.1.124 + port: 31681 + password: + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: info + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/config/application.yml b/src/main/resources/config/application.yml index aadc416..89bd54e 100644 --- a/src/main/resources/config/application.yml +++ b/src/main/resources/config/application.yml @@ -1,7 +1,7 @@ ########################################################## spring: profiles: - active: dev + active: dz servlet: multipart: max-file-size: 50MB @@ -12,9 +12,9 @@ mybatis-plus: global-config: enable-sql-runner: true -# configuration: + # configuration: # 配置结果集属性为空时 是否映射返回结果 - # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 mapper-locations: classpath:mapper/*.xml mybatis: mapper-locations: classpath:mapper/*.xml @@ -31,9 +31,14 @@ host: 127.0.0.1 port: 6379 password: ew5T4K3#203lwh - config-prefix: 'Casic:' + config-prefix: 'Casic:' #下发配置,key前缀 + apn: "dashoa.sc.iot" # 平台对应的apn + appName: "XLJCYJ" #应用名称-泄露监测预警 + appUrl: "http://10.80.12.33" #普光服务的url online: cron: 0 0 0/1 * * ? # 多长时间判断离线 + transfer-user: + cron: 0 0 0,12 * * ? # 数据同步,每天凌晨0点、中午12点各进行同步一次 data-day: 3 #多少天为离线 type: 14 #硫化氢