diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties new file mode 100644 index 0000000..ada993c --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties @@ -0,0 +1,29 @@ +#请求消息队列URL +receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets +#证书库路径 +receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks +receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA== +#队列名(注册后由统一身份反馈) +receive.msg.url.param.queuename=sinopec_375 +#用户名(注册后由统一身份反馈) +receive.msg.url.param.username=sinopec_375 +#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用) +receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg== + +#每次批量下拉事件的数目 +receive.msg.url.param.size=10 + +#调度执行时间间隔,单位:毫秒 +timer.interval=1200000 + +#调度重试时间间隔,单位:毫秒 +timer.retry=60000 + +#链接打开超时时间,单位:毫秒 +receive.msg.url.param.connecttimeout=300000 +#链接读取超时时间,单位:毫秒 +receive.msg.url.param.readtimeout=300000 + + +sinopec.siam.version= V3.4 +sinopec.siam.releasedate= 2024-08-29 diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties new file mode 100644 index 0000000..ada993c --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties @@ -0,0 +1,29 @@ +#请求消息队列URL +receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets +#证书库路径 +receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks +receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA== +#队列名(注册后由统一身份反馈) +receive.msg.url.param.queuename=sinopec_375 +#用户名(注册后由统一身份反馈) +receive.msg.url.param.username=sinopec_375 +#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用) +receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg== + +#每次批量下拉事件的数目 +receive.msg.url.param.size=10 + +#调度执行时间间隔,单位:毫秒 +timer.interval=1200000 + +#调度重试时间间隔,单位:毫秒 +timer.retry=60000 + +#链接打开超时时间,单位:毫秒 +receive.msg.url.param.connecttimeout=300000 +#链接读取超时时间,单位:毫秒 +receive.msg.url.param.readtimeout=300000 + + +sinopec.siam.version= V3.4 +sinopec.siam.releasedate= 2024-08-29 diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java new file mode 100644 index 0000000..ab40229 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java @@ -0,0 +1,41 @@ +package com.sinopec.siam.provisioning.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import com.sinopec.siam.apache.log4j.Logger; + +public class InitFilter implements Filter{ + /** Class logger. */ + private final Logger log = Logger.getLogger(InitFilter.class); + public void init(FilterConfig filterConfig) throws ServletException { + // TODO Auto-generated method stub + log.info("================>[Filter]准备开始接收消息"); + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener()); + try{ + provisioningEventSubscriberTimer.start(); + log.info("================>[Filter]自动开始接收消息."); + }catch(IllegalThreadStateException e){ + } + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + // TODO Auto-generated method stub + + } + + public void destroy() { + // TODO Auto-generated method stub + + } + +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties new file mode 100644 index 0000000..ada993c --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties @@ -0,0 +1,29 @@ +#请求消息队列URL +receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets +#证书库路径 +receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks +receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA== +#队列名(注册后由统一身份反馈) +receive.msg.url.param.queuename=sinopec_375 +#用户名(注册后由统一身份反馈) +receive.msg.url.param.username=sinopec_375 +#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用) +receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg== + +#每次批量下拉事件的数目 +receive.msg.url.param.size=10 + +#调度执行时间间隔,单位:毫秒 +timer.interval=1200000 + +#调度重试时间间隔,单位:毫秒 +timer.retry=60000 + +#链接打开超时时间,单位:毫秒 +receive.msg.url.param.connecttimeout=300000 +#链接读取超时时间,单位:毫秒 +receive.msg.url.param.readtimeout=300000 + + +sinopec.siam.version= V3.4 +sinopec.siam.releasedate= 2024-08-29 diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java new file mode 100644 index 0000000..ab40229 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java @@ -0,0 +1,41 @@ +package com.sinopec.siam.provisioning.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import com.sinopec.siam.apache.log4j.Logger; + +public class InitFilter implements Filter{ + /** Class logger. */ + private final Logger log = Logger.getLogger(InitFilter.class); + public void init(FilterConfig filterConfig) throws ServletException { + // TODO Auto-generated method stub + log.info("================>[Filter]准备开始接收消息"); + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener()); + try{ + provisioningEventSubscriberTimer.start(); + log.info("================>[Filter]自动开始接收消息."); + }catch(IllegalThreadStateException e){ + } + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + // TODO Auto-generated method stub + + } + + public void destroy() { + // TODO Auto-generated method stub + + } + +} diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java new file mode 100644 index 0000000..8f2a803 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java @@ -0,0 +1,53 @@ +/** + * + */ +package com.sinopec.siam.provisioning.handle; + +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import com.sinopec.siam.provisioning.listener.ProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import lombok.extern.slf4j.Slf4j; + +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。 + * + * @author zhaodonglu + * @since 2012-7-23 下午2:00:17 + */ +@Slf4j +public class SimpleProvisioningEventListener implements ProvisioningEventListener { + + /** + * + */ + public SimpleProvisioningEventListener() { + super(); + } + + public void process(ProvisioningEvents events) { + ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class); + if (service == null) { + log.error("ISyncProvisionService is null"); + } + // TODO Auto-generated method stub + service.loadData(events); + + } + + public static void main(String[] args) { + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer + .getInstance(new SimpleProvisioningEventListener()); + try { + provisioningEventSubscriberTimer.start(); + } catch (IllegalThreadStateException e) { + } + } + +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties new file mode 100644 index 0000000..ada993c --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties @@ -0,0 +1,29 @@ +#请求消息队列URL +receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets +#证书库路径 +receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks +receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA== +#队列名(注册后由统一身份反馈) +receive.msg.url.param.queuename=sinopec_375 +#用户名(注册后由统一身份反馈) +receive.msg.url.param.username=sinopec_375 +#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用) +receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg== + +#每次批量下拉事件的数目 +receive.msg.url.param.size=10 + +#调度执行时间间隔,单位:毫秒 +timer.interval=1200000 + +#调度重试时间间隔,单位:毫秒 +timer.retry=60000 + +#链接打开超时时间,单位:毫秒 +receive.msg.url.param.connecttimeout=300000 +#链接读取超时时间,单位:毫秒 +receive.msg.url.param.readtimeout=300000 + + +sinopec.siam.version= V3.4 +sinopec.siam.releasedate= 2024-08-29 diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java new file mode 100644 index 0000000..ab40229 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java @@ -0,0 +1,41 @@ +package com.sinopec.siam.provisioning.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import com.sinopec.siam.apache.log4j.Logger; + +public class InitFilter implements Filter{ + /** Class logger. */ + private final Logger log = Logger.getLogger(InitFilter.class); + public void init(FilterConfig filterConfig) throws ServletException { + // TODO Auto-generated method stub + log.info("================>[Filter]准备开始接收消息"); + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener()); + try{ + provisioningEventSubscriberTimer.start(); + log.info("================>[Filter]自动开始接收消息."); + }catch(IllegalThreadStateException e){ + } + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + // TODO Auto-generated method stub + + } + + public void destroy() { + // TODO Auto-generated method stub + + } + +} diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java new file mode 100644 index 0000000..8f2a803 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java @@ -0,0 +1,53 @@ +/** + * + */ +package com.sinopec.siam.provisioning.handle; + +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import com.sinopec.siam.provisioning.listener.ProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import lombok.extern.slf4j.Slf4j; + +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。 + * + * @author zhaodonglu + * @since 2012-7-23 下午2:00:17 + */ +@Slf4j +public class SimpleProvisioningEventListener implements ProvisioningEventListener { + + /** + * + */ + public SimpleProvisioningEventListener() { + super(); + } + + public void process(ProvisioningEvents events) { + ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class); + if (service == null) { + log.error("ISyncProvisionService is null"); + } + // TODO Auto-generated method stub + service.loadData(events); + + } + + public static void main(String[] args) { + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer + .getInstance(new SimpleProvisioningEventListener()); + try { + provisioningEventSubscriberTimer.start(); + } catch (IllegalThreadStateException e) { + } + } + +} diff --git a/casic-web/src/main/resources/conf/sp-simple-config.properties b/casic-web/src/main/resources/conf/sp-simple-config.properties index 9e647ef..1200c3d 100644 --- a/casic-web/src/main/resources/conf/sp-simple-config.properties +++ b/casic-web/src/main/resources/conf/sp-simple-config.properties @@ -80,9 +80,9 @@ #sp.metadata.ts.download.url+sp.metadata.url+sp.metadata.url.entityId???metadata???? #sp.metadata.backUpPath?idp.metadata.backUpPath?metadata???????? sp.metadata.url=/ts/services/restful/topology/publisher/getEntityDescriptorByEntityID?entityID= -sp.metadata.backUpPath=classpath:sp-metadata.xml +sp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\sp-metadata.xml idp.metadata.url=/ts/services/restful/topology/publisher/getIdPEntitiesDescriptor -idp.metadata.backUpPath=classpath:idp-metadata-all.xml +idp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\idp-metadata-all.xml #------------------------------------------------------------------------------------ diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties new file mode 100644 index 0000000..ada993c --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties @@ -0,0 +1,29 @@ +#请求消息队列URL +receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets +#证书库路径 +receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks +receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA== +#队列名(注册后由统一身份反馈) +receive.msg.url.param.queuename=sinopec_375 +#用户名(注册后由统一身份反馈) +receive.msg.url.param.username=sinopec_375 +#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用) +receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg== + +#每次批量下拉事件的数目 +receive.msg.url.param.size=10 + +#调度执行时间间隔,单位:毫秒 +timer.interval=1200000 + +#调度重试时间间隔,单位:毫秒 +timer.retry=60000 + +#链接打开超时时间,单位:毫秒 +receive.msg.url.param.connecttimeout=300000 +#链接读取超时时间,单位:毫秒 +receive.msg.url.param.readtimeout=300000 + + +sinopec.siam.version= V3.4 +sinopec.siam.releasedate= 2024-08-29 diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java new file mode 100644 index 0000000..ab40229 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java @@ -0,0 +1,41 @@ +package com.sinopec.siam.provisioning.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import com.sinopec.siam.apache.log4j.Logger; + +public class InitFilter implements Filter{ + /** Class logger. */ + private final Logger log = Logger.getLogger(InitFilter.class); + public void init(FilterConfig filterConfig) throws ServletException { + // TODO Auto-generated method stub + log.info("================>[Filter]准备开始接收消息"); + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener()); + try{ + provisioningEventSubscriberTimer.start(); + log.info("================>[Filter]自动开始接收消息."); + }catch(IllegalThreadStateException e){ + } + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + // TODO Auto-generated method stub + + } + + public void destroy() { + // TODO Auto-generated method stub + + } + +} diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java new file mode 100644 index 0000000..8f2a803 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java @@ -0,0 +1,53 @@ +/** + * + */ +package com.sinopec.siam.provisioning.handle; + +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import com.sinopec.siam.provisioning.listener.ProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import lombok.extern.slf4j.Slf4j; + +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。 + * + * @author zhaodonglu + * @since 2012-7-23 下午2:00:17 + */ +@Slf4j +public class SimpleProvisioningEventListener implements ProvisioningEventListener { + + /** + * + */ + public SimpleProvisioningEventListener() { + super(); + } + + public void process(ProvisioningEvents events) { + ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class); + if (service == null) { + log.error("ISyncProvisionService is null"); + } + // TODO Auto-generated method stub + service.loadData(events); + + } + + public static void main(String[] args) { + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer + .getInstance(new SimpleProvisioningEventListener()); + try { + provisioningEventSubscriberTimer.start(); + } catch (IllegalThreadStateException e) { + } + } + +} diff --git a/casic-web/src/main/resources/conf/sp-simple-config.properties b/casic-web/src/main/resources/conf/sp-simple-config.properties index 9e647ef..1200c3d 100644 --- a/casic-web/src/main/resources/conf/sp-simple-config.properties +++ b/casic-web/src/main/resources/conf/sp-simple-config.properties @@ -80,9 +80,9 @@ #sp.metadata.ts.download.url+sp.metadata.url+sp.metadata.url.entityId???metadata???? #sp.metadata.backUpPath?idp.metadata.backUpPath?metadata???????? sp.metadata.url=/ts/services/restful/topology/publisher/getEntityDescriptorByEntityID?entityID= -sp.metadata.backUpPath=classpath:sp-metadata.xml +sp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\sp-metadata.xml idp.metadata.url=/ts/services/restful/topology/publisher/getIdPEntitiesDescriptor -idp.metadata.backUpPath=classpath:idp-metadata-all.xml +idp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\idp-metadata-all.xml #------------------------------------------------------------------------------------ diff --git a/casic-web/src/main/resources/config/application-dm.yml b/casic-web/src/main/resources/config/application-dm.yml index 2b255ae..8fa0c2f 100644 --- a/casic-web/src/main/resources/config/application-dm.yml +++ b/casic-web/src/main/resources/config/application-dm.yml @@ -3,10 +3,10 @@ ################### 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/SMARTWELL driver-class-name: dm.jdbc.driver.DmDriver - username: XLJC - password: Xljc@2023 + username: SMARTWELL + password: Casic203! dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 @@ -47,7 +47,7 @@ casic: kaptcha-open: false #是否开启登录时验证码 (true/false) #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token,/route/token db: init: enable: false @@ -73,9 +73,10 @@ appKey: 5cV2rugxAb8o28WK6RSFU6 masterSecret: fQsKrOaFZy5tvKb3Vd3vv5 logging: - level: - root: info - com.casic: debug + level.root: info + level.com.casic: debug + level.com.sinopec.siam.agent.sp.config: debug + level.com.sinopec: debug file: path: logs/ name: missiles.log diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 26a0d27..35b55da 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -97,6 +97,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java index 066986a..1bd73df 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java @@ -19,7 +19,6 @@ import com.casic.missiles.modular.alarm.service.ISysDictService; import com.casic.missiles.modular.system.enums.DeviceExportEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; diff --git a/casic-device/pom.xml b/casic-device/pom.xml index 00f55fd..6a8325d 100644 --- a/casic-device/pom.xml +++ b/casic-device/pom.xml @@ -35,6 +35,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + org.springframework.boot diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java index e4f137c..ea56159 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java @@ -10,7 +10,6 @@ import com.casic.missiles.modular.system.model.DeviceType; import com.casic.missiles.modular.system.service.IDeviceModelsService; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml index 3054996..a42532f 100644 --- a/casic-server-support/pom.xml +++ b/casic-server-support/pom.xml @@ -45,6 +45,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index e973f0e..6adbc15 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -29,6 +29,7 @@ ${admin.version} provided + org.springframework.boot spring-boot-starter-web diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml index 08fd42a..cc7cb17 100644 --- a/casic-sluicewell/pom.xml +++ b/casic-sluicewell/pom.xml @@ -28,6 +28,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + @@ -43,6 +53,16 @@ com.casic casic-server-support ${pro.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt new file mode 100644 index 0000000..f3fd222 --- /dev/null +++ b/casic-web/lib/mvn.txt @@ -0,0 +1 @@ +mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar \ No newline at end of file diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230" new file mode 100644 index 0000000..379f1f8 --- /dev/null +++ "b/casic-web/lib/\351\227\256\351\242\230" @@ -0,0 +1,2 @@ +sp.metadata.backUpPath 写绝对路径 +idp.metadata.backUpPath 写绝对路径 \ No newline at end of file diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 178eeaa..7148645 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -53,6 +53,12 @@ com.sinopec siam-am-agent-simple 3.3.RELEASE + + + + + + system ${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar @@ -78,6 +84,16 @@ com.casic casic-export-support ${extension.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + com.casic @@ -163,9 +179,17 @@ org.springframework.boot spring-boot-starter-test + + - org.postgresql - postgresql + com.sinopec + siam-provisioning-subscriber-clients + 3.3.RELEASE + + + org.xml + xml-apis + 1.0.b2 @@ -221,9 +245,14 @@ com.casic.missiles.CasicApplication - true ./ + true + + + + ./siam-am-agent-simple-3.3.RELEASE.jar + @@ -236,7 +265,7 @@ make-assembly package - single + @@ -246,6 +275,14 @@ maven-war-plugin ${maven.war.plugin.version} + + org.springframework.boot + spring-boot-maven-plugin + + true + true + + @@ -258,6 +295,13 @@ true + + src/main/java + + com/sinopec/siam/conf/**/*.properties + com/sinopec/siam/conf/**/*.jks + + \ No newline at end of file diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 2854773..4ab45eb 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -12,6 +12,12 @@ true true lib + system + + + true + true + lib runtime @@ -44,6 +50,14 @@ /conf + src/main/resources/certs + true + + * + + /certs + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java index 5c37ce8..3a38657 100644 --- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java +++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java @@ -4,6 +4,7 @@ import com.sinopec.siam.agent.common.ContextHolder; import com.sinopec.siam.agent.web.AccessEnforcer; import com.sinopec.siam.agent.web.SAMLProfileFilter; +import com.sinopec.siam.provisioning.filter.InitFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -47,6 +48,21 @@ } /** + * @return 登录过滤器 + */ + @Bean + public FilterRegistrationBean registerMqFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + InitFilter initFilter = new InitFilter(); + registration.setFilter(initFilter); + registration.addUrlPatterns("/"); + registration.setName("com.sinopec.siam.provisioning.filter.InitFilter"); + //值越小,Filter越靠前。 + registration.setOrder(0); + return registration; + } + + /** * * @return 认证过滤器 */ diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java new file mode 100644 index 0000000..b41bafd --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlDeptDTO { + /** + * 组织编码 + */ + private String ou; + + /** + * 组织名称 + */ + private String cn; + + /** + * 上级组织编码 + */ + private String spSupervisoryDepartment; + + /** + * 组织状态 + */ + private String spEntryStatus; + private String delFlag; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java new file mode 100644 index 0000000..7d980a7 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class SamlUserDTO { + /** + * 用户账号 + */ + private String uid; + /** + * 姓名 + */ + private String cn; + + /** + * 用户直属组织编码 + */ + private String sporgnumber; + + /** + * 账号状态 + */ + private String spentrystatus; + + /** + * 用户状态 + * 1 启用 2 冻结 3删除 + */ + private String status; +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java new file mode 100644 index 0000000..4bea3cf --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.sinopec.siam.provisioning.entity.ProvisioningEvents; + +public interface ISyncProvisionService { + void saveOrUpdateUser(SamlUserDTO user,User oldUser); + void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept); + void loadData(ProvisioningEvents events); +} diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java new file mode 100644 index 0000000..d9a0d87 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java @@ -0,0 +1,540 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.modular.interfaces.enums.ManagerStatus; +import com.casic.missiles.modular.system.dto.SamlDeptDTO; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncProvisionServiceImpl implements ISyncProvisionService { + private final AbstractDeptService deptService; + private final AbstractUserService userService; + private final JdbcTemplate jdbcTemplate; + public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) { + this.deptService = deptService; + this.userService = userService; + this.jdbcTemplate = jdbcTemplate; + } + + /** + * 创建默认用户信息 + * + * @return + */ + private User createDefaultUser() { + User user = new User(); + user.setDelFlag("0"); + user.setIsSync(1); +// user.setIsSys("0"); + // 完善账号信息 + user.setSalt(ShiroKit.getRandomSalt(5)); + //同步随机密码添加 + user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt())); + user.setStatus(ManagerStatus.OK.getCode()); + user.setUpdateTime(new Date()); + user.setCreateTime(new Date()); + return user; + } + + @Value("${casic.defaultDeptType:03}") + private String defaultDept; + + /** + * 创建组织默认信息 + * @return + */ + private Dept createDefaultDept() { + //创建组织信息 + Dept dept = new Dept(); + dept.setDelFlag("0"); + dept.setIsSync(1); + dept.setCreateUser(1L); + dept.setUpdateUser(1L); + dept.setCreateTime(new Date()); + dept.setUpdateTime(new Date()); + dept.setDeptType(defaultDept); + dept.setPid(0L); + dept.setPids("[0]"); + + dept.setNum(0); + dept.setIsParent("0"); + return dept; + } + + @Override + public void saveOrUpdateUser(SamlUserDTO user, User oldUser) { + if (oldUser == null) { + oldUser = createDefaultUser(); + } + //设置账号 + if (StrUtil.isNotEmpty(user.getUid())) { + oldUser.setAccount(user.getUid()); + oldUser.setSyncId(user.getUid()); + } + //设置名称 + if (StrUtil.isNotEmpty(user.getCn())) { + oldUser.setName(user.getCn()); + } + + //设置同步组织 + if(StrUtil.isNotEmpty(user.getSporgnumber())){ + oldUser.setSyncDeptid(user.getSporgnumber()); + } + //处理账号状态 + oldUser.setStatus(user.getStatus()); + if ("3".equals(user.getStatus())) { + oldUser.setDelFlag("1"); + oldUser.setStatus("3"); + } else { + oldUser.setDelFlag("0"); + } + oldUser.setUpdateTime(new Date()); + userService.saveOrUpdate(oldUser); + } + + @Override + public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) { + if (oldDept == null) { + oldDept = createDefaultDept(); + } + + if(StrUtil.isNotEmpty(deptDTO.getCn())) { + oldDept.setFullName(deptDTO.getCn()); + oldDept.setSimpleName(deptDTO.getCn()); + } + oldDept.setDelFlag(deptDTO.getDelFlag()); + oldDept.setSyncId(deptDTO.getOu()); + oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment()); + oldDept.setUpdateTime(new Date()); + deptService.saveOrUpdate(oldDept); + } + + @Transactional + @Override + public void loadData(ProvisioningEvents events) { + log.info("sync user start....."); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + deptQuery.isNotNull(Dept::getSyncId); + List deptList = deptService.list(deptQuery); + Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.isNotNull(User::getSyncId); + List users = userService.list(userQuery); + Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user))); + + List list = events.getEvent(); + for (int i = 0; i < list.size(); i++) { + ProvisioningEvent event = new ProvisioningEvent(); + event = list.get(i); + SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("监听到事件内容如下:"); + log.info("事件流水号:" + event.getEventId()); + if (event.getOccuredTimestamp() == null) { + log.info("事件发生时间:null"); + } else { + log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime())); + } + log.info("事件类型:" + event.getEventType()); + + /** + * 应用账号创建 + */ + SamlUserDTO samlUserDTO = new SamlUserDTO(); + if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) { + String account_uid = ""; + //用户账号 + String uid = ""; + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号修改 + */ + if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + String cn = "";//姓名 + String ou = "";//部门 + String employeenumber = "";//员工编码 + String sporgnumber = "";//直属部门编码 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + log.info("应用账号属性集合:"); + List attributes = targetEntity.getAttributes(); + for (Attribute attribute : attributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("姓名:" + cn); + } + if (attribute.getName().equals("employeenumber")) { + employeenumber = (String) attribute.getValues().get(0); + log.info("员工编码:" + employeenumber); + } + if (attribute.getName().equals("ou")) { + ou = (String) attribute.getValues().get(0); + log.info("部门:" + ou); + } + if (attribute.getName().equals("sporgnumber")) { + sporgnumber = (String) attribute.getValues().get(0); + log.info("直属部门编码:" + employeenumber); + } + } + // log.info(attribute); + // 其他属性取值,自己编写代码 + + } + samlUserDTO.setUid(uid); + samlUserDTO.setCn(cn); + samlUserDTO.setSporgnumber(sporgnumber); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号禁用 + */ + if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("2"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号启用 + */ + if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("1"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 应用账号删除 + */ + if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) { + + String account_uid = "";//应用账号 + String uid = "";//用户账号 + String app_name = "";//应用名称 + + TargetEntity applicationEntity = event.getApplication(); + if (applicationEntity != null) { + TargetSubject applicationSubject = applicationEntity.getSubject(); + app_name = applicationSubject.getSubject(); + log.info("应用系统:" + app_name); + } + TargetEntity personEntity = event.getPerson(); + if (personEntity != null) { + TargetSubject personSubject = personEntity.getSubject(); + uid = personSubject.getSubject(); + log.info("用户账号:" + uid); + } + TargetEntity targetEntity = event.getTargetEntity(); + if (targetEntity != null) { + TargetSubject targetSubject = targetEntity.getSubject(); + account_uid = targetSubject.getSubject(); + log.info("应用账号:" + account_uid); + } + samlUserDTO.setUid(uid); + samlUserDTO.setStatus("3"); + this.saveOrUpdateUser(samlUserDTO, userMap.get(uid)); + } + /** + * 组织机构创建 + */ + if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + + } + /** + * 组织机构修改 + */ + if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("0"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + + } + /** + * 组织机构删除 + */ + if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) { + + String ou = "";//组织编码 + String cn = "";//组织名称 + String spOrgLevel = "";//组织层级 + String spSupervisoryDepartment = "";//组织上级编码 + String spOuType = "";//组织类型,0:HR机构,1:非HR机构 + + TargetEntity originalEntity = event.getTargetEntity(); + if (originalEntity != null) { + TargetSubject originalSubject = originalEntity.getSubject(); + ou = originalSubject.getSubject(); + log.info("组织编码:" + ou); + List originalAttributes = originalEntity.getAttributes(); + log.info("组织机构属性集合:"); + for (Attribute attribute : originalAttributes) { + if (attribute.getName().equals("cn")) { + cn = (String) attribute.getValues().get(0); + log.info("组织名称:" + cn); + } + if (attribute.getName().equals("spOrgLevel")) { + spOrgLevel = (String) attribute.getValues().get(0); + log.info("组织层级:" + spOrgLevel); + } + if (attribute.getName().equals("spSupervisoryDepartment")) { + spSupervisoryDepartment = (String) attribute.getValues().get(0); + log.info("组织上级编码:" + spSupervisoryDepartment); + } + if (attribute.getName().equals("spOuType")) { + spOuType = (String) attribute.getValues().get(0); + log.info("组织类型:" + spOuType); + } + + //log.info(attribute); + // 其他属性取值,自己编写代码 + } + SamlDeptDTO samlDeptDTO = new SamlDeptDTO(); + samlDeptDTO.setCn(cn); + samlDeptDTO.setOu(ou); + samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment); + samlDeptDTO.setDelFlag("1"); + this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou)); + } + } + + } + + jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1"); + + //更新父组织ID + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.isNotNull(Dept::getSyncId); + List oldDeptList = deptService.list(query); + query.ne(Dept::getPid, -1); + deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept))); + for (Dept dept : oldDeptList) { + if (deptMap.containsKey(dept.getSyncPid())) { + dept.setPid(deptMap.get(dept.getSyncPid()).getId()); + deptService.saveOrUpdate(dept); + } + } + + //刷新PIDS层级结构 + deptService.reloadPidsByPid(0); + } +} diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties new file mode 100644 index 0000000..3dfde69 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties @@ -0,0 +1,67 @@ +#?????? +#??1????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +log4j.rootLogger=ERROR,C3 +#??2?????????????????? +#DEBUG,INFO,ERROR,?????????INFO?ERROR +#log4j.rootLogger=DEBUG,R + + +### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0 + +log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender +log4j.appender.A1.Threshold=ERROR +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n +#log4j.appender.A1.logfile.File=d:/siamlogs/a.log +#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n + + +#\u5e94\u7528\u4e8e\u6587\u4ef6 + +#log4j.appender.B2=org.apache.log4j.FileAppender +#log4j.appender.B2.Threshold=WARN +#log4j.appender.B2.File=logs/hrcpom_ERROR.log +#log4j.appender.B2.Append=false +#log4j.appender.B2.layout=org.apache.log4j.PatternLayout +#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n + + + + +#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7 +#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6 +# 1)'.'yyyy-MM: \u6bcf\u6708 +# 2)'.'yyyy-ww: \u6bcf\u5468 +# 3)'.'yyyy-MM-dd: \u6bcf\u5929 +# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21 +# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6 +# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f + +org.apache.log4j.DailyRollingFileAppender +log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender +log4j.appender.C3.Threshold=ERROR +#log4j.appender.C3.File=logs/server1/sipc_sso.log +log4j.appender.C3.File=d:/siamlogs-mq/mq.log +log4j.appender.C3.Encoding=utf-8 +log4j.appender.C3.DatePattern='.'yyyy-MM-dd +log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + + + + + +# ??????? +log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender +log4j.appender.R.Threshold=ERROR +log4j.appender.R.File=${catalina.home}/logs/saml_authR.log +log4j.appender.R.Append=true +#????????? +log4j.appender.R.MaxFileSize=100MB +#??????????? +log4j.appender.R.MaxBackupIndex=10 +log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n + diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks new file mode 100644 index 0000000..bebd327 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks Binary files differ diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties new file mode 100644 index 0000000..ada993c --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties @@ -0,0 +1,29 @@ +#请求消息队列URL +receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets +#证书库路径 +receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks +receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA== +#队列名(注册后由统一身份反馈) +receive.msg.url.param.queuename=sinopec_375 +#用户名(注册后由统一身份反馈) +receive.msg.url.param.username=sinopec_375 +#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用) +receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg== + +#每次批量下拉事件的数目 +receive.msg.url.param.size=10 + +#调度执行时间间隔,单位:毫秒 +timer.interval=1200000 + +#调度重试时间间隔,单位:毫秒 +timer.retry=60000 + +#链接打开超时时间,单位:毫秒 +receive.msg.url.param.connecttimeout=300000 +#链接读取超时时间,单位:毫秒 +receive.msg.url.param.readtimeout=300000 + + +sinopec.siam.version= V3.4 +sinopec.siam.releasedate= 2024-08-29 diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java new file mode 100644 index 0000000..ab40229 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java @@ -0,0 +1,41 @@ +package com.sinopec.siam.provisioning.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import com.sinopec.siam.apache.log4j.Logger; + +public class InitFilter implements Filter{ + /** Class logger. */ + private final Logger log = Logger.getLogger(InitFilter.class); + public void init(FilterConfig filterConfig) throws ServletException { + // TODO Auto-generated method stub + log.info("================>[Filter]准备开始接收消息"); + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener()); + try{ + provisioningEventSubscriberTimer.start(); + log.info("================>[Filter]自动开始接收消息."); + }catch(IllegalThreadStateException e){ + } + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + // TODO Auto-generated method stub + + } + + public void destroy() { + // TODO Auto-generated method stub + + } + +} diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java new file mode 100644 index 0000000..8f2a803 --- /dev/null +++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java @@ -0,0 +1,53 @@ +/** + * + */ +package com.sinopec.siam.provisioning.handle; + +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.modular.system.dto.SamlUserDTO; +import com.casic.missiles.modular.system.service.ISyncProvisionService; +import com.sinopec.siam.provisioning.entity.*; +import com.sinopec.siam.provisioning.listener.ProvisioningEventListener; +import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer; +import lombok.extern.slf4j.Slf4j; + +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。 + * + * @author zhaodonglu + * @since 2012-7-23 下午2:00:17 + */ +@Slf4j +public class SimpleProvisioningEventListener implements ProvisioningEventListener { + + /** + * + */ + public SimpleProvisioningEventListener() { + super(); + } + + public void process(ProvisioningEvents events) { + ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class); + if (service == null) { + log.error("ISyncProvisionService is null"); + } + // TODO Auto-generated method stub + service.loadData(events); + + } + + public static void main(String[] args) { + ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer + .getInstance(new SimpleProvisioningEventListener()); + try { + provisioningEventSubscriberTimer.start(); + } catch (IllegalThreadStateException e) { + } + } + +} diff --git a/casic-web/src/main/resources/conf/sp-simple-config.properties b/casic-web/src/main/resources/conf/sp-simple-config.properties index 9e647ef..1200c3d 100644 --- a/casic-web/src/main/resources/conf/sp-simple-config.properties +++ b/casic-web/src/main/resources/conf/sp-simple-config.properties @@ -80,9 +80,9 @@ #sp.metadata.ts.download.url+sp.metadata.url+sp.metadata.url.entityId???metadata???? #sp.metadata.backUpPath?idp.metadata.backUpPath?metadata???????? sp.metadata.url=/ts/services/restful/topology/publisher/getEntityDescriptorByEntityID?entityID= -sp.metadata.backUpPath=classpath:sp-metadata.xml +sp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\sp-metadata.xml idp.metadata.url=/ts/services/restful/topology/publisher/getIdPEntitiesDescriptor -idp.metadata.backUpPath=classpath:idp-metadata-all.xml +idp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\idp-metadata-all.xml #------------------------------------------------------------------------------------ diff --git a/casic-web/src/main/resources/config/application-dm.yml b/casic-web/src/main/resources/config/application-dm.yml index 2b255ae..8fa0c2f 100644 --- a/casic-web/src/main/resources/config/application-dm.yml +++ b/casic-web/src/main/resources/config/application-dm.yml @@ -3,10 +3,10 @@ ################### 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/SMARTWELL driver-class-name: dm.jdbc.driver.DmDriver - username: XLJC - password: Xljc@2023 + username: SMARTWELL + password: Casic203! dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 @@ -47,7 +47,7 @@ casic: kaptcha-open: false #是否开启登录时验证码 (true/false) #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token,/route/token db: init: enable: false @@ -73,9 +73,10 @@ appKey: 5cV2rugxAb8o28WK6RSFU6 masterSecret: fQsKrOaFZy5tvKb3Vd3vv5 logging: - level: - root: info - com.casic: debug + level.root: info + level.com.casic: debug + level.com.sinopec.siam.agent.sp.config: debug + level.com.sinopec: debug file: path: logs/ name: missiles.log diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index c5c878e..448a584 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -36,7 +36,7 @@ urlExclusion: /well/update,/well/add cas-type: sso sso: - noFilterURLs: /sys/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token + noFilterURLs: /sys/config/baseConfig;/route/mockToken;/websocket/*;/job/updateSinkJob;/user/login/token web: host: http://api.map.baidu.com/geoconv/v1/ #前端路径, 需提供授权异常页面,登录成功页面 config: