同步1.9.0

This commit is contained in:
Jerry
2021-09-01 20:08:27 +08:00
parent 6e84b4234c
commit 4f4995e6f0
198 changed files with 4017 additions and 1500 deletions

View File

@@ -1 +0,0 @@
OrangeMultiDemo

View File

@@ -14,57 +14,6 @@
<inspection_tool class="CheckDtdRefs" enabled="false" level="ERROR" enabled_by_default="false" /> <inspection_tool class="CheckDtdRefs" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="CheckTagEmptyBody" enabled="false" level="WARNING" enabled_by_default="false" /> <inspection_tool class="CheckTagEmptyBody" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="CheckXmlFileWithXercesValidator" enabled="false" level="ERROR" enabled_by_default="false" /> <inspection_tool class="CheckXmlFileWithXercesValidator" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAbstractClassShouldStartWithAbstractNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidApacheBeanUtilsCopy" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidCallStaticSimpleDateFormat" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidCommentBehindStatement" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidComplexCondition" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidConcurrentCompetitionRandom" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidDoubleOrFloatEqualCompare" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidManuallyCreateThread" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidMissUseOfMathRandom" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidNegationOperator" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidNewDateGetTime" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidPatternCompileInMethod" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidReturnInFinally" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidStartWithDollarAndUnderLineNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitAvoidUseTimer" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="CloudToolkitBigDecimalAvoidDoubleConstructor" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitBooleanPropertyShouldNotStartWithIs" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitClassCastExceptionWithSubListToArrayList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitClassCastExceptionWithToArray" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitClassMustHaveAuthor" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitClassNamingShouldBeCamel" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitCollectionInitShouldAssignCapacity" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitCommentsMustBeJavadocFormat" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitConcurrentExceptionWithModifyOriginSubList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitConstantFieldShouldBeUpperCase" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitCountDownShouldInFinally" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitDontModifyInForeachCircle" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="CloudToolkitEnumConstantsMustHaveComment" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitExceptionClassShouldEndWithException" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitIbatisMethodQueryForList" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitLowerCamelCaseVariableNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitMethodReturnWrapperType" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitMethodTooLong" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitPackageNaming" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitPojoMustOverrideToString" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitPojoMustUsePrimitiveField" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitPojoNoDefaultValue" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitRemoveCommentedCode" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitServiceOrDaoClassShouldEndWithImpl" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitStringConcat" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitSwitchStatement" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitTestClassShouldEndWithTestNaming" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitThreadLocalShouldRemove" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitThreadPoolCreation" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="CloudToolkitThreadShouldSetName" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitTransactionMustHaveRollback" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitUndefineMagicConstant" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitUnsupportedExceptionWithModifyAsList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="CloudToolkitUseQuietReferenceNotation" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="CloudToolkitUseRightCaseForDateFormat" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="ConstantConditions" enabled="false" level="WARNING" enabled_by_default="false"> <inspection_tool class="ConstantConditions" enabled="false" level="WARNING" enabled_by_default="false">
<option name="SUGGEST_NULLABLE_ANNOTATIONS" value="false" /> <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="false" />
<option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="false" /> <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="false" />

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus:3.4.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus/3.4.2/mybatis-plus-3.4.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus/3.4.2/mybatis-plus-3.4.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus/3.4.2/mybatis-plus-3.4.2-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-annotation/3.4.2/mybatis-plus-annotation-3.4.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-annotation/3.4.2/mybatis-plus-annotation-3.4.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-annotation/3.4.2/mybatis-plus-annotation-3.4.2-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-boot-starter/3.4.2/mybatis-plus-boot-starter-3.4.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-boot-starter/3.4.2/mybatis-plus-boot-starter-3.4.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-boot-starter/3.4.2/mybatis-plus-boot-starter-3.4.2-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-core:3.4.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-core/3.4.2/mybatis-plus-core-3.4.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-core/3.4.2/mybatis-plus-core-3.4.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-core/3.4.2/mybatis-plus-core-3.4.2-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-extension:3.4.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-extension/3.4.2/mybatis-plus-extension-3.4.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-extension/3.4.2/mybatis-plus-extension-3.4.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-extension/3.4.2/mybatis-plus-extension-3.4.2-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.orange.demo:common-log:1.0.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/orange/demo/common-log/1.0.0/common-log-1.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/orange/demo/common-log/1.0.0/common-log-1.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/orange/demo/common-log/1.0.0/common-log-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: javax.persistence:persistence-api:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/persistence/persistence-api/1.0/persistence-api-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/persistence/persistence-api/1.0/persistence-api-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.mybatis:mybatis:3.5.5"> <library name="Maven: org.mybatis:mybatis:3.4.6">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.5.5/mybatis-3.5.5.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.4.6/mybatis-3.4.6.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.5.5/mybatis-3.5.5-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.4.6/mybatis-3.4.6-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.5.5/mybatis-3.5.5-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis/3.4.6/mybatis-3.4.6-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

View File

@@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: org.mybatis:mybatis-spring:2.0.5"> <library name="Maven: org.mybatis:mybatis-spring:1.3.2">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/2.0.5/mybatis-spring-2.0.5.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/1.3.2/mybatis-spring-1.3.2.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/2.0.5/mybatis-spring-2.0.5-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/1.3.2/mybatis-spring-1.3.2-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/2.0.5/mybatis-spring-2.0.5-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/1.3.2/mybatis-spring-1.3.2-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-base:1.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-base/1.1.5/mapper-base-1.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-base/1.1.5/mapper-base-1.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-base/1.1.5/mapper-base-1.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-core:1.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-core/1.1.5/mapper-core-1.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-core/1.1.5/mapper-core-1.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-core/1.1.5/mapper-core-1.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-extra:1.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-extra/1.1.5/mapper-extra-1.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-extra/1.1.5/mapper-extra-1.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-extra/1.1.5/mapper-extra-1.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-spring:1.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring/1.1.5/mapper-spring-1.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring/1.1.5/mapper-spring-1.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring/1.1.5/mapper-spring-1.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring-boot-autoconfigure/2.1.5/mapper-spring-boot-autoconfigure-2.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring-boot-autoconfigure/2.1.5/mapper-spring-boot-autoconfigure-2.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring-boot-autoconfigure/2.1.5/mapper-spring-boot-autoconfigure-2.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring-boot-starter/2.1.5/mapper-spring-boot-starter-2.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring-boot-starter/2.1.5/mapper-spring-boot-starter-2.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-spring-boot-starter/2.1.5/mapper-spring-boot-starter-2.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: tk.mybatis:mapper-weekend:1.1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-weekend/1.1.5/mapper-weekend-1.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-weekend/1.1.5/mapper-weekend-1.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/tk/mybatis/mapper-weekend/1.1.5/mapper-weekend-1.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="216743b9-524b-4922-b455-b0e9c8b485b9" name="Default Changelist" comment="" /> <list default="true" id="a0b6f27a-b36a-441c-af92-f7eb47b4b3ce" name="Default Changelist" comment="" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -13,7 +13,7 @@
<component name="ProjectCodeStyleSettingsMigration"> <component name="ProjectCodeStyleSettingsMigration">
<option name="version" value="1" /> <option name="version" value="1" />
</component> </component>
<component name="ProjectId" id="1wfVMeoGKApld9UdILFEuYjLurI" /> <component name="ProjectId" id="1xX0EnUm7ILYI1um57oGVrdwMUq" />
<component name="ProjectViewState"> <component name="ProjectViewState">
<option name="abbreviatePackageNames" value="true" /> <option name="abbreviatePackageNames" value="true" />
<option name="autoscrollFromSource" value="true" /> <option name="autoscrollFromSource" value="true" />
@@ -27,16 +27,11 @@
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" /> <property name="aspect.path.notification.shown" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/zz-resource/db-scripts" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_interpreter_path" value="/usr/local/bin/node" /> <property name="nodejs_interpreter_path" value="/usr/local/bin/node" />
<property name="settings.editor.selected.configurable" value="Errors" /> <property name="settings.editor.selected.configurable" value="Errors" />
</component> </component>
<component name="RecentsManager"> <component name="RunManager" selected="Spring Boot.StatsApplication">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/zz-resource/db-scripts" />
</key>
</component>
<component name="RunManager" selected="Spring Boot.UpmsApplication">
<configuration name="AdminMonitorApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot"> <configuration name="AdminMonitorApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<module name="admin-monitor" /> <module name="admin-monitor" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.orange.demo.adminmonitor.AdminMonitorApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.orange.demo.adminmonitor.AdminMonitorApplication" />
@@ -83,22 +78,16 @@
</component> </component>
<component name="TaskManager"> <component name="TaskManager">
<task active="true" id="Default" summary="Default task"> <task active="true" id="Default" summary="Default task">
<changelist id="216743b9-524b-4922-b455-b0e9c8b485b9" name="Default Changelist" comment="" /> <changelist id="a0b6f27a-b36a-441c-af92-f7eb47b4b3ce" name="Default Changelist" comment="" />
<created>1628849582125</created> <created>1630486016377</created>
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1628849582125</updated> <updated>1630486016377</updated>
<workItem from="1628849584343" duration="407000" /> <workItem from="1630486018005" duration="271000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" /> <option name="version" value="1" />
</component> </component>
<component name="WindowStateProjectService">
<state x="383" y="212" width="735" height="476" key="find.popup" timestamp="1628849897788">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="383" y="212" width="735" height="476" key="find.popup/0.0.1440.900@0.0.1440.900" timestamp="1628849897788" />
</component>
</project> </project>

View File

@@ -65,20 +65,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -64,20 +64,23 @@
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" /> <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />
@@ -99,6 +102,7 @@
<orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" /> <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" /> <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" /> <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" />
<orderEntry type="library" name="Maven: com.orange.demo:common-log:1.0.0" level="project" />
<orderEntry type="module" module-name="common-redis" /> <orderEntry type="module" module-name="common-redis" />
<orderEntry type="library" name="Maven: org.redisson:redisson:3.15.4" level="project" /> <orderEntry type="library" name="Maven: org.redisson:redisson:3.15.4" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.63.Final" level="project" /> <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.63.Final" level="project" />

View File

@@ -20,6 +20,11 @@
<artifactId>course-class-api</artifactId> <artifactId>course-class-api</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.orange.demo</groupId>
<artifactId>common-log</artifactId>
<version>1.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.orange.demo</groupId> <groupId>com.orange.demo</groupId>
<artifactId>common-redis</artifactId> <artifactId>common-redis</artifactId>

View File

@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource; import javax.sql.DataSource;

View File

@@ -1,8 +1,9 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* 行政区划实体对象。 * 行政区划实体对象。
* *
@@ -10,30 +11,31 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_area_code") @Table(name = "zz_area_code")
public class AreaCode { public class AreaCode {
/** /**
* 行政区划主键Id * 行政区划主键Id
*/ */
@TableId(value = "area_id") @Id
@Column(name = "area_id")
private Long areaId; private Long areaId;
/** /**
* 行政区划名称 * 行政区划名称
*/ */
@TableField(value = "area_name") @Column(name = "area_name")
private String areaName; private String areaName;
/** /**
* 行政区划级别 (1: 省级别 2: 市级别 3: 区级别) * 行政区划级别 (1: 省级别 2: 市级别 3: 区级别)
*/ */
@TableField(value = "area_level") @Column(name = "area_level")
private Integer areaLevel; private Integer areaLevel;
/** /**
* 父级行政区划Id * 父级行政区划Id
*/ */
@TableField(value = "parent_id") @Column(name = "parent_id")
private Long parentId; private Long parentId;
} }

View File

@@ -1,7 +1,7 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* ClassCourse实体对象。 * ClassCourse实体对象。
@@ -10,24 +10,26 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_class_course") @Table(name = "zz_class_course")
public class ClassCourse { public class ClassCourse {
/** /**
* 班级Id。 * 班级Id。
*/ */
@TableField(value = "class_id") @Id
@Column(name = "class_id")
private Long classId; private Long classId;
/** /**
* 课程Id。 * 课程Id。
*/ */
@TableField(value = "course_id") @Id
@Column(name = "course_id")
private Long courseId; private Long courseId;
/** /**
* 课程顺序(数值越小越靠前)。 * 课程顺序(数值越小越靠前)。
*/ */
@TableField(value = "course_order") @Column(name = "course_order")
private Integer courseOrder; private Integer courseOrder;
} }

View File

@@ -1,7 +1,7 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* ClassStudent实体对象。 * ClassStudent实体对象。
@@ -10,18 +10,20 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_class_student") @Table(name = "zz_class_student")
public class ClassStudent { public class ClassStudent {
/** /**
* 班级Id。 * 班级Id。
*/ */
@TableField(value = "class_id") @Id
@Column(name = "class_id")
private Long classId; private Long classId;
/** /**
* 学生Id。 * 学生Id。
*/ */
@TableField(value = "student_id") @Id
@Column(name = "student_id")
private Long studentId; private Long studentId;
} }

View File

@@ -1,6 +1,5 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.courseclassapi.vo.CourseVo; import com.orange.demo.courseclassapi.vo.CourseVo;
import com.orange.demo.courseclassapi.constant.CourseDifficult; import com.orange.demo.courseclassapi.constant.CourseDifficult;
import com.orange.demo.application.common.constant.Subject; import com.orange.demo.application.common.constant.Subject;
@@ -12,6 +11,7 @@ import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@@ -24,19 +24,20 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_course") @Table(name = "zz_course")
public class Course { public class Course {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "course_id") @Id
@Column(name = "course_id")
private Long courseId; private Long courseId;
/** /**
* 课程名称。 * 课程名称。
*/ */
@TableField(value = "course_name") @Column(name = "course_name")
private String courseName; private String courseName;
/** /**
@@ -57,86 +58,86 @@ public class Course {
/** /**
* 年级Id。 * 年级Id。
*/ */
@TableField(value = "grade_id") @Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 学科Id。 * 学科Id。
*/ */
@TableField(value = "subject_id") @Column(name = "subject_id")
private Integer subjectId; private Integer subjectId;
/** /**
* 课时数量。 * 课时数量。
*/ */
@TableField(value = "class_hour") @Column(name = "class_hour")
private Integer classHour; private Integer classHour;
/** /**
* 多张课程图片地址。 * 多张课程图片地址。
*/ */
@UploadFlagColumn(storeType = UploadStoreTypeEnum.LOCAL_SYSTEM) @UploadFlagColumn(storeType = UploadStoreTypeEnum.LOCAL_SYSTEM)
@TableField(value = "picture_url") @Column(name = "picture_url")
private String pictureUrl; private String pictureUrl;
/** /**
* 创建用户Id。 * 创建用户Id。
*/ */
@TableField(value = "create_user_id") @Column(name = "create_user_id")
private Long createUserId; private Long createUserId;
/** /**
* 创建时间。 * 创建时间。
*/ */
@TableField(value = "create_time") @Column(name = "create_time")
private Date createTime; private Date createTime;
/** /**
* 最后修改时间。 * 最后修改时间。
*/ */
@TableField(value = "update_time") @Column(name = "update_time")
private Date updateTime; private Date updateTime;
/** /**
* price 范围过滤起始值(>=)。 * price 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private BigDecimal priceStart; private BigDecimal priceStart;
/** /**
* price 范围过滤结束值(<=)。 * price 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private BigDecimal priceEnd; private BigDecimal priceEnd;
/** /**
* classHour 范围过滤起始值(>=)。 * classHour 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private Integer classHourStart; private Integer classHourStart;
/** /**
* classHour 范围过滤结束值(<=)。 * classHour 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private Integer classHourEnd; private Integer classHourEnd;
/** /**
* updateTime 范围过滤起始值(>=)。 * updateTime 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String updateTimeStart; private String updateTimeStart;
/** /**
* updateTime 范围过滤结束值(<=)。 * updateTime 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String updateTimeEnd; private String updateTimeEnd;
/** /**
* courseId 的多对多关联表数据对象。 * courseId 的多对多关联表数据对象。
*/ */
@TableField(exist = false) @Transient
private ClassCourse classCourse; private ClassCourse classCourse;
@RelationDict( @RelationDict(
@@ -145,19 +146,19 @@ public class Course {
slaveModelClass = Grade.class, slaveModelClass = Grade.class,
slaveIdField = "gradeId", slaveIdField = "gradeId",
slaveNameField = "gradeName") slaveNameField = "gradeName")
@TableField(exist = false) @Transient
private Map<String, Object> gradeIdDictMap; private Map<String, Object> gradeIdDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "difficulty", masterIdField = "difficulty",
constantDictClass = CourseDifficult.class) constantDictClass = CourseDifficult.class)
@TableField(exist = false) @Transient
private Map<String, Object> difficultyDictMap; private Map<String, Object> difficultyDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "subjectId", masterIdField = "subjectId",
constantDictClass = Subject.class) constantDictClass = Subject.class)
@TableField(exist = false) @Transient
private Map<String, Object> subjectIdDictMap; private Map<String, Object> subjectIdDictMap;
@Mapper @Mapper

View File

@@ -1,7 +1,8 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* Grade实体对象。 * Grade实体对象。
@@ -10,24 +11,26 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_grade") @Table(name = "zz_grade")
public class Grade { public class Grade {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "grade_id", type = IdType.AUTO) @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 年级名称。 * 年级名称。
*/ */
@TableField(value = "grade_name") @Column(name = "grade_name")
private String gradeName; private String gradeName;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
private Integer status; private Integer status;
} }

View File

@@ -1,7 +1,7 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* MaterialEdition实体对象。 * MaterialEdition实体对象。
@@ -10,19 +10,21 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_material_edition") @Table(name = "zz_material_edition")
public class MaterialEdition { public class MaterialEdition {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "edition_id", type = IdType.AUTO) @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "edition_id")
private Integer editionId; private Integer editionId;
/** /**
* 教材版本名称。 * 教材版本名称。
*/ */
@TableField(value = "edition_name") @Column(name = "edition_name")
private String editionName; private String editionName;
/** /**

View File

@@ -1,12 +1,12 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.courseclassapi.vo.SchoolInfoVo; import com.orange.demo.courseclassapi.vo.SchoolInfoVo;
import com.orange.demo.common.core.annotation.RelationDict; import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Map; import java.util.Map;
@@ -17,31 +17,32 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_school_info") @Table(name = "zz_school_info")
public class SchoolInfo { public class SchoolInfo {
/** /**
* 学校Id。 * 学校Id。
*/ */
@TableId(value = "school_id") @Id
@Column(name = "school_id")
private Long schoolId; private Long schoolId;
/** /**
* 学校名称。 * 学校名称。
*/ */
@TableField(value = "school_name") @Column(name = "school_name")
private String schoolName; private String schoolName;
/** /**
* 所在省Id。 * 所在省Id。
*/ */
@TableField(value = "province_id") @Column(name = "province_id")
private Long provinceId; private Long provinceId;
/** /**
* 所在城市Id。 * 所在城市Id。
*/ */
@TableField(value = "city_id") @Column(name = "city_id")
private Long cityId; private Long cityId;
@RelationDict( @RelationDict(
@@ -50,7 +51,7 @@ public class SchoolInfo {
slaveModelClass = AreaCode.class, slaveModelClass = AreaCode.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> provinceIdDictMap; private Map<String, Object> provinceIdDictMap;
@RelationDict( @RelationDict(
@@ -59,7 +60,7 @@ public class SchoolInfo {
slaveModelClass = AreaCode.class, slaveModelClass = AreaCode.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> cityIdDictMap; private Map<String, Object> cityIdDictMap;
@Mapper @Mapper

View File

@@ -1,6 +1,5 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.courseclassapi.vo.StudentVo; import com.orange.demo.courseclassapi.vo.StudentVo;
import com.orange.demo.application.common.constant.Gender; import com.orange.demo.application.common.constant.Gender;
import com.orange.demo.application.common.constant.ExpLevel; import com.orange.demo.application.common.constant.ExpLevel;
@@ -12,6 +11,7 @@ import com.orange.demo.common.core.util.MyCommonUtil;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@@ -23,43 +23,44 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_student") @Table(name = "zz_student")
public class Student { public class Student {
/** /**
* 学生Id。 * 学生Id。
*/ */
@TableId(value = "student_id") @Id
@Column(name = "student_id")
private Long studentId; private Long studentId;
/** /**
* 登录手机。 * 登录手机。
*/ */
@TableField(value = "login_mobile") @Column(name = "login_mobile")
private String loginMobile; private String loginMobile;
/** /**
* 学生姓名。 * 学生姓名。
*/ */
@TableField(value = "student_name") @Column(name = "student_name")
private String studentName; private String studentName;
/** /**
* 所在省份Id。 * 所在省份Id。
*/ */
@TableField(value = "province_id") @Column(name = "province_id")
private Long provinceId; private Long provinceId;
/** /**
* 所在城市Id。 * 所在城市Id。
*/ */
@TableField(value = "city_id") @Column(name = "city_id")
private Long cityId; private Long cityId;
/** /**
* 区县Id。 * 区县Id。
*/ */
@TableField(value = "district_id") @Column(name = "district_id")
private Long districtId; private Long districtId;
/** /**
@@ -75,37 +76,37 @@ public class Student {
/** /**
* 经验等级 (0: 初级 1: 中级 2: 高级 3: 资深)。 * 经验等级 (0: 初级 1: 中级 2: 高级 3: 资深)。
*/ */
@TableField(value = "experience_level") @Column(name = "experience_level")
private Integer experienceLevel; private Integer experienceLevel;
/** /**
* 总共充值学币数量。 * 总共充值学币数量。
*/ */
@TableField(value = "total_coin") @Column(name = "total_coin")
private Integer totalCoin; private Integer totalCoin;
/** /**
* 可用学币数量。 * 可用学币数量。
*/ */
@TableField(value = "left_coin") @Column(name = "left_coin")
private Integer leftCoin; private Integer leftCoin;
/** /**
* 年级Id。 * 年级Id。
*/ */
@TableField(value = "grade_id") @Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 校区Id。 * 校区Id。
*/ */
@TableField(value = "school_id") @Column(name = "school_id")
private Long schoolId; private Long schoolId;
/** /**
* 注册时间。 * 注册时间。
*/ */
@TableField(value = "register_time") @Column(name = "register_time")
private Date registerTime; private Date registerTime;
/** /**
@@ -116,31 +117,31 @@ public class Student {
/** /**
* birthday 范围过滤起始值(>=)。 * birthday 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String birthdayStart; private String birthdayStart;
/** /**
* birthday 范围过滤结束值(<=)。 * birthday 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String birthdayEnd; private String birthdayEnd;
/** /**
* registerTime 范围过滤起始值(>=)。 * registerTime 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String registerTimeStart; private String registerTimeStart;
/** /**
* registerTime 范围过滤结束值(<=)。 * registerTime 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String registerTimeEnd; private String registerTimeEnd;
/** /**
* true LIKE搜索字符串。 * true LIKE搜索字符串。
*/ */
@TableField(exist = false) @Transient
private String searchString; private String searchString;
public void setSearchString(String searchString) { public void setSearchString(String searchString) {
@@ -153,7 +154,7 @@ public class Student {
slaveModelClass = AreaCode.class, slaveModelClass = AreaCode.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> provinceIdDictMap; private Map<String, Object> provinceIdDictMap;
@RelationDict( @RelationDict(
@@ -162,7 +163,7 @@ public class Student {
slaveModelClass = AreaCode.class, slaveModelClass = AreaCode.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> cityIdDictMap; private Map<String, Object> cityIdDictMap;
@RelationDict( @RelationDict(
@@ -171,7 +172,7 @@ public class Student {
slaveModelClass = AreaCode.class, slaveModelClass = AreaCode.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> districtIdDictMap; private Map<String, Object> districtIdDictMap;
@RelationDict( @RelationDict(
@@ -180,7 +181,7 @@ public class Student {
slaveModelClass = Grade.class, slaveModelClass = Grade.class,
slaveIdField = "gradeId", slaveIdField = "gradeId",
slaveNameField = "gradeName") slaveNameField = "gradeName")
@TableField(exist = false) @Transient
private Map<String, Object> gradeIdDictMap; private Map<String, Object> gradeIdDictMap;
@RelationDict( @RelationDict(
@@ -189,25 +190,25 @@ public class Student {
slaveModelClass = SchoolInfo.class, slaveModelClass = SchoolInfo.class,
slaveIdField = "schoolId", slaveIdField = "schoolId",
slaveNameField = "schoolName") slaveNameField = "schoolName")
@TableField(exist = false) @Transient
private Map<String, Object> schoolIdDictMap; private Map<String, Object> schoolIdDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "gender", masterIdField = "gender",
constantDictClass = Gender.class) constantDictClass = Gender.class)
@TableField(exist = false) @Transient
private Map<String, Object> genderDictMap; private Map<String, Object> genderDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "experienceLevel", masterIdField = "experienceLevel",
constantDictClass = ExpLevel.class) constantDictClass = ExpLevel.class)
@TableField(exist = false) @Transient
private Map<String, Object> experienceLevelDictMap; private Map<String, Object> experienceLevelDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "status", masterIdField = "status",
constantDictClass = StudentStatus.class) constantDictClass = StudentStatus.class)
@TableField(exist = false) @Transient
private Map<String, Object> statusDictMap; private Map<String, Object> statusDictMap;
@Mapper @Mapper

View File

@@ -1,14 +1,15 @@
package com.orange.demo.courseclassservice.model; package com.orange.demo.courseclassservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.courseclassapi.vo.StudentClassVo; import com.orange.demo.courseclassapi.vo.StudentClassVo;
import com.orange.demo.courseclassapi.constant.ClassLevel; import com.orange.demo.courseclassapi.constant.ClassLevel;
import com.orange.demo.common.core.annotation.RelationDict; import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationConstDict; import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@@ -20,61 +21,62 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_class") @Table(name = "zz_class")
public class StudentClass { public class StudentClass {
/** /**
* 班级Id。 * 班级Id。
*/ */
@TableId(value = "class_id") @Id
@Column(name = "class_id")
private Long classId; private Long classId;
/** /**
* 班级名称。 * 班级名称。
*/ */
@TableField(value = "class_name") @Column(name = "class_name")
private String className; private String className;
/** /**
* 学校Id。 * 学校Id。
*/ */
@TableField(value = "school_id") @Column(name = "school_id")
private Long schoolId; private Long schoolId;
/** /**
* 学生班长Id。 * 学生班长Id。
*/ */
@TableField(value = "leader_id") @Column(name = "leader_id")
private Long leaderId; private Long leaderId;
/** /**
* 已完成课时数量。 * 已完成课时数量。
*/ */
@TableField(value = "finish_class_hour") @Column(name = "finish_class_hour")
private Integer finishClassHour; private Integer finishClassHour;
/** /**
* 班级级别(0: 初级班 1: 培优班 2: 冲刺提分班 3: 竞赛班)。 * 班级级别(0: 初级班 1: 培优班 2: 冲刺提分班 3: 竞赛班)。
*/ */
@TableField(value = "class_level") @Column(name = "class_level")
private Integer classLevel; private Integer classLevel;
/** /**
* 创建用户。 * 创建用户。
*/ */
@TableField(value = "create_user_id") @Column(name = "create_user_id")
private Long createUserId; private Long createUserId;
/** /**
* 班级创建时间。 * 班级创建时间。
*/ */
@TableField(value = "create_time") @Column(name = "create_time")
private Date createTime; private Date createTime;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
private Integer status; private Integer status;
@RelationDict( @RelationDict(
@@ -83,7 +85,7 @@ public class StudentClass {
slaveModelClass = SchoolInfo.class, slaveModelClass = SchoolInfo.class,
slaveIdField = "schoolId", slaveIdField = "schoolId",
slaveNameField = "schoolName") slaveNameField = "schoolName")
@TableField(exist = false) @Transient
private Map<String, Object> schoolIdDictMap; private Map<String, Object> schoolIdDictMap;
@RelationDict( @RelationDict(
@@ -92,13 +94,13 @@ public class StudentClass {
slaveModelClass = Student.class, slaveModelClass = Student.class,
slaveIdField = "studentId", slaveIdField = "studentId",
slaveNameField = "studentName") slaveNameField = "studentName")
@TableField(exist = false) @Transient
private Map<String, Object> leaderIdDictMap; private Map<String, Object> leaderIdDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "classLevel", masterIdField = "classLevel",
constantDictClass = ClassLevel.class) constantDictClass = ClassLevel.class)
@TableField(exist = false) @Transient
private Map<String, Object> classLevelDictMap; private Map<String, Object> classLevelDictMap;
@Mapper @Mapper

View File

@@ -1,7 +1,5 @@
package com.orange.demo.courseclassservice.service.impl; package com.orange.demo.courseclassservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.courseclassservice.service.*; import com.orange.demo.courseclassservice.service.*;
import com.orange.demo.courseclassservice.dao.*; import com.orange.demo.courseclassservice.dao.*;
import com.orange.demo.courseclassservice.model.*; import com.orange.demo.courseclassservice.model.*;
@@ -82,8 +80,7 @@ public class CourseServiceImpl extends BaseService<Course, Long> implements Cour
course.setCreateTime(originalCourse.getCreateTime()); course.setCreateTime(originalCourse.getCreateTime());
course.setUpdateTime(new Date()); course.setUpdateTime(new Date());
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<Course> uw = this.createUpdateQueryForNullValue(course, course.getCourseId()); return courseMapper.updateByPrimaryKey(course) == 1;
return courseMapper.update(course, uw) == 1;
} }
/** /**
@@ -95,13 +92,14 @@ public class CourseServiceImpl extends BaseService<Course, Long> implements Cour
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long courseId) { public boolean remove(Long courseId) {
if (courseMapper.deleteById(courseId) == 0) { // 这里先删除主数据
if (!this.removeById(courseId)) {
return false; return false;
} }
// 开始删除与本地多对多父表的关联 // 开始删除与本地多对多父表的关联
ClassCourse classCourse = new ClassCourse(); ClassCourse classCourse = new ClassCourse();
classCourse.setCourseId(courseId); classCourse.setCourseId(courseId);
classCourseMapper.delete(new QueryWrapper<>(classCourse)); classCourseMapper.delete(classCourse);
return true; return true;
} }

View File

@@ -1,6 +1,5 @@
package com.orange.demo.courseclassservice.service.impl; package com.orange.demo.courseclassservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.courseclassservice.service.*; import com.orange.demo.courseclassservice.service.*;
import com.orange.demo.courseclassservice.dao.*; import com.orange.demo.courseclassservice.dao.*;
import com.orange.demo.courseclassservice.model.*; import com.orange.demo.courseclassservice.model.*;
@@ -70,8 +69,7 @@ public class SchoolInfoServiceImpl extends BaseService<SchoolInfo, Long> impleme
@Override @Override
public boolean update(SchoolInfo schoolInfo, SchoolInfo originalSchoolInfo) { public boolean update(SchoolInfo schoolInfo, SchoolInfo originalSchoolInfo) {
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<SchoolInfo> uw = this.createUpdateQueryForNullValue(schoolInfo, schoolInfo.getSchoolId()); return schoolInfoMapper.updateByPrimaryKey(schoolInfo) == 1;
return schoolInfoMapper.update(schoolInfo, uw) == 1;
} }
/** /**
@@ -83,7 +81,8 @@ public class SchoolInfoServiceImpl extends BaseService<SchoolInfo, Long> impleme
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long schoolId) { public boolean remove(Long schoolId) {
return schoolInfoMapper.deleteById(schoolId) == 1; // 这里先删除主数据
return this.removeById(schoolId);
} }
/** /**

View File

@@ -1,7 +1,5 @@
package com.orange.demo.courseclassservice.service.impl; package com.orange.demo.courseclassservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.courseclassservice.service.*; import com.orange.demo.courseclassservice.service.*;
import com.orange.demo.courseclassservice.dao.*; import com.orange.demo.courseclassservice.dao.*;
import com.orange.demo.courseclassservice.model.*; import com.orange.demo.courseclassservice.model.*;
@@ -18,6 +16,7 @@ import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
@@ -84,9 +83,9 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
public boolean update(StudentClass studentClass, StudentClass originalStudentClass) { public boolean update(StudentClass studentClass, StudentClass originalStudentClass) {
studentClass.setCreateUserId(originalStudentClass.getCreateUserId()); studentClass.setCreateUserId(originalStudentClass.getCreateUserId());
studentClass.setCreateTime(originalStudentClass.getCreateTime()); studentClass.setCreateTime(originalStudentClass.getCreateTime());
studentClass.setStatus(GlobalDeletedFlag.NORMAL);
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<StudentClass> uw = this.createUpdateQueryForNullValue(studentClass, studentClass.getClassId()); return studentClassMapper.updateByPrimaryKey(studentClass) == 1;
return studentClassMapper.update(studentClass, uw) == 1;
} }
/** /**
@@ -98,16 +97,17 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long classId) { public boolean remove(Long classId) {
if (studentClassMapper.deleteById(classId) == 0) { // 这里先删除主数据
if (!this.removeById(classId)) {
return false; return false;
} }
// 开始删除多对多中间表的关联 // 开始删除多对多中间表的关联
ClassCourse classCourse = new ClassCourse(); ClassCourse classCourse = new ClassCourse();
classCourse.setClassId(classId); classCourse.setClassId(classId);
classCourseMapper.delete(new QueryWrapper<>(classCourse)); classCourseMapper.delete(classCourse);
ClassStudent classStudent = new ClassStudent(); ClassStudent classStudent = new ClassStudent();
classStudent.setClassId(classId); classStudent.setClassId(classId);
classStudentMapper.delete(new QueryWrapper<>(classStudent)); classStudentMapper.delete(classStudent);
return true; return true;
} }
@@ -197,8 +197,8 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
for (ClassCourse classCourse : classCourseList) { for (ClassCourse classCourse : classCourseList) {
classCourse.setClassId(classId); classCourse.setClassId(classId);
MyModelUtil.setDefaultValue(classCourse, "courseOrder", 0); MyModelUtil.setDefaultValue(classCourse, "courseOrder", 0);
classCourseMapper.insert(classCourse);
} }
classCourseMapper.insertList(classCourseList);
} }
/** /**
@@ -210,13 +210,11 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean updateClassCourse(ClassCourse classCourse) { public boolean updateClassCourse(ClassCourse classCourse) {
ClassCourse filter = new ClassCourse(); Example e = new Example(ClassCourse.class);
filter.setClassId(classCourse.getClassId()); e.createCriteria()
filter.setCourseId(classCourse.getCourseId()); .andEqualTo("classId", classCourse.getClassId())
UpdateWrapper<ClassCourse> uw = .andEqualTo("courseId", classCourse.getCourseId());
BaseService.createUpdateQueryForNullValue(classCourse, ClassCourse.class); return classCourseMapper.updateByExample(classCourse, e) > 0;
uw.setEntity(filter);
return classCourseMapper.update(classCourse, uw) > 0;
} }
/** /**
@@ -228,10 +226,11 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
*/ */
@Override @Override
public ClassCourse getClassCourse(Long classId, Long courseId) { public ClassCourse getClassCourse(Long classId, Long courseId) {
ClassCourse filter = new ClassCourse(); Example e = new Example(ClassCourse.class);
filter.setClassId(classId); e.createCriteria()
filter.setCourseId(courseId); .andEqualTo("classId", classId)
return classCourseMapper.selectOne(new QueryWrapper<>(filter)); .andEqualTo("courseId", courseId);
return classCourseMapper.selectOneByExample(e);
} }
/** /**
@@ -247,7 +246,7 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
ClassCourse filter = new ClassCourse(); ClassCourse filter = new ClassCourse();
filter.setClassId(classId); filter.setClassId(classId);
filter.setCourseId(courseId); filter.setCourseId(courseId);
return classCourseMapper.delete(new QueryWrapper<>(filter)) > 0; return classCourseMapper.delete(filter) > 0;
} }
/** /**
@@ -261,8 +260,8 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
public void addClassStudentList(List<ClassStudent> classStudentList, Long classId) { public void addClassStudentList(List<ClassStudent> classStudentList, Long classId) {
for (ClassStudent classStudent : classStudentList) { for (ClassStudent classStudent : classStudentList) {
classStudent.setClassId(classId); classStudent.setClassId(classId);
classStudentMapper.insert(classStudent);
} }
classStudentMapper.insertList(classStudentList);
} }
/** /**
@@ -278,7 +277,7 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
ClassStudent filter = new ClassStudent(); ClassStudent filter = new ClassStudent();
filter.setClassId(classId); filter.setClassId(classId);
filter.setStudentId(studentId); filter.setStudentId(studentId);
return classStudentMapper.delete(new QueryWrapper<>(filter)) > 0; return classStudentMapper.delete(filter) > 0;
} }
/** /**

View File

@@ -1,7 +1,5 @@
package com.orange.demo.courseclassservice.service.impl; package com.orange.demo.courseclassservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.application.common.constant.StudentStatus; import com.orange.demo.application.common.constant.StudentStatus;
import com.orange.demo.courseclassservice.service.*; import com.orange.demo.courseclassservice.service.*;
import com.orange.demo.courseclassservice.dao.*; import com.orange.demo.courseclassservice.dao.*;
@@ -81,8 +79,7 @@ public class StudentServiceImpl extends BaseService<Student, Long> implements St
@Override @Override
public boolean update(Student student, Student originalStudent) { public boolean update(Student student, Student originalStudent) {
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<Student> uw = this.createUpdateQueryForNullValue(student, student.getStudentId()); return studentMapper.updateByPrimaryKey(student) == 1;
return studentMapper.update(student, uw) == 1;
} }
/** /**
@@ -94,13 +91,14 @@ public class StudentServiceImpl extends BaseService<Student, Long> implements St
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long studentId) { public boolean remove(Long studentId) {
if (studentMapper.deleteById(studentId) == 0) { // 这里先删除主数据
if (!this.removeById(studentId)) {
return false; return false;
} }
// 开始删除与本地多对多父表的关联 // 开始删除与本地多对多父表的关联
ClassStudent classStudent = new ClassStudent(); ClassStudent classStudent = new ClassStudent();
classStudent.setStudentId(studentId); classStudent.setStudentId(studentId);
classStudentMapper.delete(new QueryWrapper<>(classStudent)); classStudentMapper.delete(classStudent);
return true; return true;
} }

View File

@@ -110,21 +110,23 @@
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" /> <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" /> <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />
@@ -178,6 +180,7 @@
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" /> <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" /> <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.14.RELEASE" level="project" />

View File

@@ -65,20 +65,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -25,6 +25,11 @@
<artifactId>course-class-api</artifactId> <artifactId>course-class-api</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.orange.demo</groupId>
<artifactId>common-log</artifactId>
<version>1.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.orange.demo</groupId> <groupId>com.orange.demo</groupId>
<artifactId>common-redis</artifactId> <artifactId>common-redis</artifactId>

View File

@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource; import javax.sql.DataSource;

View File

@@ -1,6 +1,5 @@
package com.orange.demo.statsservice.model; package com.orange.demo.statsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.statsapi.vo.CourseTransStatsVo; import com.orange.demo.statsapi.vo.CourseTransStatsVo;
import com.orange.demo.courseclassapi.vo.CourseVo; import com.orange.demo.courseclassapi.vo.CourseVo;
import com.orange.demo.courseclassapi.client.CourseClient; import com.orange.demo.courseclassapi.client.CourseClient;
@@ -13,6 +12,7 @@ import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@@ -24,79 +24,81 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_course_trans_stats") @Table(name = "zz_course_trans_stats")
public class CourseTransStats { public class CourseTransStats {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "stats_id", type = IdType.AUTO) @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "stats_id")
private Long statsId; private Long statsId;
/** /**
* 统计日期。 * 统计日期。
*/ */
@TableField(value = "stats_date") @Column(name = "stats_date")
private Date statsDate; private Date statsDate;
/** /**
* 科目Id。 * 科目Id。
*/ */
@TableField(value = "subject_id") @Column(name = "subject_id")
private Integer subjectId; private Integer subjectId;
/** /**
* 年级Id。 * 年级Id。
*/ */
@TableField(value = "grade_id") @Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 年级名称。 * 年级名称。
*/ */
@TableField(value = "grade_name") @Column(name = "grade_name")
private String gradeName; private String gradeName;
/** /**
* 课程Id。 * 课程Id。
*/ */
@TableField(value = "course_id") @Column(name = "course_id")
private Long courseId; private Long courseId;
/** /**
* 课程名称。 * 课程名称。
*/ */
@TableField(value = "course_name") @Column(name = "course_name")
private String courseName; private String courseName;
/** /**
* 学生上课次数。 * 学生上课次数。
*/ */
@TableField(value = "student_attend_count") @Column(name = "student_attend_count")
private Integer studentAttendCount; private Integer studentAttendCount;
/** /**
* 学生献花数量。 * 学生献花数量。
*/ */
@TableField(value = "student_flower_amount") @Column(name = "student_flower_amount")
private Integer studentFlowerAmount; private Integer studentFlowerAmount;
/** /**
* 学生献花次数。 * 学生献花次数。
*/ */
@TableField(value = "student_flower_count") @Column(name = "student_flower_count")
private Integer studentFlowerCount; private Integer studentFlowerCount;
/** /**
* statsDate 范围过滤起始值(>=)。 * statsDate 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String statsDateStart; private String statsDateStart;
/** /**
* statsDate 范围过滤结束值(<=)。 * statsDate 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String statsDateEnd; private String statsDateEnd;
@RelationDict( @RelationDict(
@@ -105,7 +107,7 @@ public class CourseTransStats {
slaveModelClass = GradeVo.class, slaveModelClass = GradeVo.class,
slaveIdField = "gradeId", slaveIdField = "gradeId",
slaveNameField = "gradeName") slaveNameField = "gradeName")
@TableField(exist = false) @Transient
private Map<String, Object> gradeIdDictMap; private Map<String, Object> gradeIdDictMap;
@RelationDict( @RelationDict(
@@ -114,13 +116,13 @@ public class CourseTransStats {
slaveModelClass = CourseVo.class, slaveModelClass = CourseVo.class,
slaveIdField = "courseId", slaveIdField = "courseId",
slaveNameField = "courseName") slaveNameField = "courseName")
@TableField(exist = false) @Transient
private Map<String, Object> courseIdDictMap; private Map<String, Object> courseIdDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "subjectId", masterIdField = "subjectId",
constantDictClass = Subject.class) constantDictClass = Subject.class)
@TableField(exist = false) @Transient
private Map<String, Object> subjectIdDictMap; private Map<String, Object> subjectIdDictMap;
@Mapper @Mapper

View File

@@ -1,7 +1,8 @@
package com.orange.demo.statsservice.model; package com.orange.demo.statsservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* Grade实体对象。 * Grade实体对象。
@@ -10,24 +11,26 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_grade") @Table(name = "zz_grade")
public class Grade { public class Grade {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "grade_id", type = IdType.AUTO) @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 年级名称。 * 年级名称。
*/ */
@TableField(value = "grade_name") @Column(name = "grade_name")
private String gradeName; private String gradeName;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
private Integer status; private Integer status;
} }

View File

@@ -1,7 +1,7 @@
package com.orange.demo.statsservice.model; package com.orange.demo.statsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* SchoolInfo实体对象。 * SchoolInfo实体对象。
@@ -10,30 +10,31 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_school_info") @Table(name = "zz_school_info")
public class SchoolInfo { public class SchoolInfo {
/** /**
* 学校Id。 * 学校Id。
*/ */
@TableId(value = "school_id") @Id
@Column(name = "school_id")
private Long schoolId; private Long schoolId;
/** /**
* 学校名称。 * 学校名称。
*/ */
@TableField(value = "school_name") @Column(name = "school_name")
private String schoolName; private String schoolName;
/** /**
* 所在省Id。 * 所在省Id。
*/ */
@TableField(value = "province_id") @Column(name = "province_id")
private Long provinceId; private Long provinceId;
/** /**
* 所在城市Id。 * 所在城市Id。
*/ */
@TableField(value = "city_id") @Column(name = "city_id")
private Long cityId; private Long cityId;
} }

View File

@@ -1,6 +1,5 @@
package com.orange.demo.statsservice.model; package com.orange.demo.statsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.statsapi.vo.StudentActionStatsVo; import com.orange.demo.statsapi.vo.StudentActionStatsVo;
import com.orange.demo.courseclassapi.vo.AreaCodeVo; import com.orange.demo.courseclassapi.vo.AreaCodeVo;
import com.orange.demo.courseclassapi.vo.GradeVo; import com.orange.demo.courseclassapi.vo.GradeVo;
@@ -11,6 +10,7 @@ import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@@ -22,145 +22,146 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_student_action_stats") @Table(name = "zz_student_action_stats")
public class StudentActionStats { public class StudentActionStats {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "stats_id") @Id
@Column(name = "stats_id")
private Long statsId; private Long statsId;
/** /**
* 统计日期。 * 统计日期。
*/ */
@TableField(value = "stats_date") @Column(name = "stats_date")
private Date statsDate; private Date statsDate;
/** /**
* 统计小时。 * 统计小时。
*/ */
@TableField(value = "stats_month") @Column(name = "stats_month")
private Date statsMonth; private Date statsMonth;
/** /**
* 年级Id。 * 年级Id。
*/ */
@TableField(value = "grade_id") @Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 学生所在省Id。 * 学生所在省Id。
*/ */
@TableField(value = "province_id") @Column(name = "province_id")
private Long provinceId; private Long provinceId;
/** /**
* 学生所在城市Id。 * 学生所在城市Id。
*/ */
@TableField(value = "city_id") @Column(name = "city_id")
private Long cityId; private Long cityId;
/** /**
* 购课学币数量。 * 购课学币数量。
*/ */
@TableField(value = "buy_course_amount") @Column(name = "buy_course_amount")
private Integer buyCourseAmount; private Integer buyCourseAmount;
/** /**
* 购买课程次数。 * 购买课程次数。
*/ */
@TableField(value = "buy_course_count") @Column(name = "buy_course_count")
private Integer buyCourseCount; private Integer buyCourseCount;
/** /**
* 购买视频学币数量。 * 购买视频学币数量。
*/ */
@TableField(value = "buy_video_amount") @Column(name = "buy_video_amount")
private Integer buyVideoAmount; private Integer buyVideoAmount;
/** /**
* 购买视频次数。 * 购买视频次数。
*/ */
@TableField(value = "buy_video_count") @Column(name = "buy_video_count")
private Integer buyVideoCount; private Integer buyVideoCount;
/** /**
* 购买作业学币数量。 * 购买作业学币数量。
*/ */
@TableField(value = "buy_paper_amount") @Column(name = "buy_paper_amount")
private Integer buyPaperAmount; private Integer buyPaperAmount;
/** /**
* 购买作业次数。 * 购买作业次数。
*/ */
@TableField(value = "buy_paper_count") @Column(name = "buy_paper_count")
private Integer buyPaperCount; private Integer buyPaperCount;
/** /**
* 购买献花数量。 * 购买献花数量。
*/ */
@TableField(value = "buy_flower_amount") @Column(name = "buy_flower_amount")
private Integer buyFlowerAmount; private Integer buyFlowerAmount;
/** /**
* 购买献花次数。 * 购买献花次数。
*/ */
@TableField(value = "buy_flower_count") @Column(name = "buy_flower_count")
private Integer buyFlowerCount; private Integer buyFlowerCount;
/** /**
* 充值学币数量。 * 充值学币数量。
*/ */
@TableField(value = "recharge_coin_amount") @Column(name = "recharge_coin_amount")
private Integer rechargeCoinAmount; private Integer rechargeCoinAmount;
/** /**
* 充值学币次数。 * 充值学币次数。
*/ */
@TableField(value = "recharge_coin_count") @Column(name = "recharge_coin_count")
private Integer rechargeCoinCount; private Integer rechargeCoinCount;
/** /**
* 线下课程上课次数。 * 线下课程上课次数。
*/ */
@TableField(value = "do_course_count") @Column(name = "do_course_count")
private Integer doCourseCount; private Integer doCourseCount;
/** /**
* 观看视频次数。 * 观看视频次数。
*/ */
@TableField(value = "watch_video_count") @Column(name = "watch_video_count")
private Integer watchVideoCount; private Integer watchVideoCount;
/** /**
* 购买献花消费学币数量。 * 购买献花消费学币数量。
*/ */
@TableField(value = "watch_video_total_second") @Column(name = "watch_video_total_second")
private Integer watchVideoTotalSecond; private Integer watchVideoTotalSecond;
/** /**
* 做题数量。 * 做题数量。
*/ */
@TableField(value = "do_exercise_count") @Column(name = "do_exercise_count")
private Integer doExerciseCount; private Integer doExerciseCount;
/** /**
* 做题正确的数量。 * 做题正确的数量。
*/ */
@TableField(value = "do_exercise_correct_count") @Column(name = "do_exercise_correct_count")
private Integer doExerciseCorrectCount; private Integer doExerciseCorrectCount;
/** /**
* statsDate 范围过滤起始值(>=)。 * statsDate 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String statsDateStart; private String statsDateStart;
/** /**
* statsDate 范围过滤结束值(<=)。 * statsDate 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String statsDateEnd; private String statsDateEnd;
@RelationDict( @RelationDict(
@@ -169,7 +170,7 @@ public class StudentActionStats {
slaveModelClass = GradeVo.class, slaveModelClass = GradeVo.class,
slaveIdField = "gradeId", slaveIdField = "gradeId",
slaveNameField = "gradeName") slaveNameField = "gradeName")
@TableField(exist = false) @Transient
private Map<String, Object> gradeIdDictMap; private Map<String, Object> gradeIdDictMap;
@RelationDict( @RelationDict(
@@ -178,7 +179,7 @@ public class StudentActionStats {
slaveModelClass = AreaCodeVo.class, slaveModelClass = AreaCodeVo.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> provinceIdDictMap; private Map<String, Object> provinceIdDictMap;
@RelationDict( @RelationDict(
@@ -187,7 +188,7 @@ public class StudentActionStats {
slaveModelClass = AreaCodeVo.class, slaveModelClass = AreaCodeVo.class,
slaveIdField = "areaId", slaveIdField = "areaId",
slaveNameField = "areaName") slaveNameField = "areaName")
@TableField(exist = false) @Transient
private Map<String, Object> cityIdDictMap; private Map<String, Object> cityIdDictMap;
@Mapper @Mapper

View File

@@ -1,6 +1,5 @@
package com.orange.demo.statsservice.model; package com.orange.demo.statsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.statsapi.vo.StudentActionTransVo; import com.orange.demo.statsapi.vo.StudentActionTransVo;
import com.orange.demo.courseclassapi.client.SchoolInfoClient; import com.orange.demo.courseclassapi.client.SchoolInfoClient;
import com.orange.demo.courseclassapi.vo.SchoolInfoVo; import com.orange.demo.courseclassapi.vo.SchoolInfoVo;
@@ -14,6 +13,7 @@ import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import lombok.Data; import lombok.Data;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@@ -25,109 +25,110 @@ import java.util.Map;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_student_action_trans") @Table(name = "zz_student_action_trans")
public class StudentActionTrans { public class StudentActionTrans {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "trans_id") @Id
@Column(name = "trans_id")
private Long transId; private Long transId;
/** /**
* 学生Id。 * 学生Id。
*/ */
@TableField(value = "student_id") @Column(name = "student_id")
private Long studentId; private Long studentId;
/** /**
* 学生名称。 * 学生名称。
*/ */
@TableField(value = "student_name") @Column(name = "student_name")
private String studentName; private String studentName;
/** /**
* 学生校区。 * 学生校区。
*/ */
@TableField(value = "school_id") @Column(name = "school_id")
private Long schoolId; private Long schoolId;
/** /**
* 年级Id。 * 年级Id。
*/ */
@TableField(value = "grade_id") @Column(name = "grade_id")
private Integer gradeId; private Integer gradeId;
/** /**
* 行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)。 * 行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)。
*/ */
@TableField(value = "action_type") @Column(name = "action_type")
private Integer actionType; private Integer actionType;
/** /**
* 设备类型(0: iOS 1: Android 2: PC)。 * 设备类型(0: iOS 1: Android 2: PC)。
*/ */
@TableField(value = "device_type") @Column(name = "device_type")
private Integer deviceType; private Integer deviceType;
/** /**
* 看视频秒数。 * 看视频秒数。
*/ */
@TableField(value = "watch_video_seconds") @Column(name = "watch_video_seconds")
private Integer watchVideoSeconds; private Integer watchVideoSeconds;
/** /**
* 购买献花数量。 * 购买献花数量。
*/ */
@TableField(value = "flower_count") @Column(name = "flower_count")
private Integer flowerCount; private Integer flowerCount;
/** /**
* 购买作业数量。 * 购买作业数量。
*/ */
@TableField(value = "paper_count") @Column(name = "paper_count")
private Integer paperCount; private Integer paperCount;
/** /**
* 购买视频数量。 * 购买视频数量。
*/ */
@TableField(value = "video_count") @Column(name = "video_count")
private Integer videoCount; private Integer videoCount;
/** /**
* 购买课程数量。 * 购买课程数量。
*/ */
@TableField(value = "course_count") @Column(name = "course_count")
private Integer courseCount; private Integer courseCount;
/** /**
* 充值学币数量。 * 充值学币数量。
*/ */
@TableField(value = "coin_count") @Column(name = "coin_count")
private Integer coinCount; private Integer coinCount;
/** /**
* 做题是否正确标记。 * 做题是否正确标记。
*/ */
@TableField(value = "exercise_correct_flag") @Column(name = "exercise_correct_flag")
private Integer exerciseCorrectFlag; private Integer exerciseCorrectFlag;
/** /**
* 发生时间。 * 发生时间。
*/ */
@TableField(value = "create_time") @Column(name = "create_time")
private Date createTime; private Date createTime;
/** /**
* createTime 范围过滤起始值(>=)。 * createTime 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String createTimeStart; private String createTimeStart;
/** /**
* createTime 范围过滤结束值(<=)。 * createTime 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String createTimeEnd; private String createTimeEnd;
@RelationDict( @RelationDict(
@@ -136,7 +137,7 @@ public class StudentActionTrans {
slaveModelClass = SchoolInfoVo.class, slaveModelClass = SchoolInfoVo.class,
slaveIdField = "schoolId", slaveIdField = "schoolId",
slaveNameField = "schoolName") slaveNameField = "schoolName")
@TableField(exist = false) @Transient
private Map<String, Object> schoolIdDictMap; private Map<String, Object> schoolIdDictMap;
@RelationDict( @RelationDict(
@@ -145,19 +146,19 @@ public class StudentActionTrans {
slaveModelClass = GradeVo.class, slaveModelClass = GradeVo.class,
slaveIdField = "gradeId", slaveIdField = "gradeId",
slaveNameField = "gradeName") slaveNameField = "gradeName")
@TableField(exist = false) @Transient
private Map<String, Object> gradeIdDictMap; private Map<String, Object> gradeIdDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "actionType", masterIdField = "actionType",
constantDictClass = StudentActionType.class) constantDictClass = StudentActionType.class)
@TableField(exist = false) @Transient
private Map<String, Object> actionTypeDictMap; private Map<String, Object> actionTypeDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "deviceType", masterIdField = "deviceType",
constantDictClass = DeviceType.class) constantDictClass = DeviceType.class)
@TableField(exist = false) @Transient
private Map<String, Object> deviceTypeDictMap; private Map<String, Object> deviceTypeDictMap;
@Mapper @Mapper

View File

@@ -1,6 +1,5 @@
package com.orange.demo.statsservice.service.impl; package com.orange.demo.statsservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.statsservice.service.*; import com.orange.demo.statsservice.service.*;
import com.orange.demo.statsservice.dao.*; import com.orange.demo.statsservice.dao.*;
import com.orange.demo.statsservice.model.*; import com.orange.demo.statsservice.model.*;
@@ -76,8 +75,7 @@ public class StudentActionTransServiceImpl extends BaseService<StudentActionTran
public boolean update(StudentActionTrans studentActionTrans, StudentActionTrans originalStudentActionTrans) { public boolean update(StudentActionTrans studentActionTrans, StudentActionTrans originalStudentActionTrans) {
studentActionTrans.setCreateTime(originalStudentActionTrans.getCreateTime()); studentActionTrans.setCreateTime(originalStudentActionTrans.getCreateTime());
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<StudentActionTrans> uw = this.createUpdateQueryForNullValue(studentActionTrans, studentActionTrans.getTransId()); return studentActionTransMapper.updateByPrimaryKey(studentActionTrans) == 1;
return studentActionTransMapper.update(studentActionTrans, uw) == 1;
} }
/** /**
@@ -89,7 +87,8 @@ public class StudentActionTransServiceImpl extends BaseService<StudentActionTran
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long transId) { public boolean remove(Long transId) {
return studentActionTransMapper.deleteById(transId) == 1; // 这里先删除主数据
return this.removeById(transId);
} }
/** /**

View File

@@ -64,20 +64,23 @@
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" /> <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />
@@ -100,6 +103,7 @@
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" /> <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" /> <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" />
<orderEntry type="module" module-name="course-class-api" /> <orderEntry type="module" module-name="course-class-api" />
<orderEntry type="library" name="Maven: com.orange.demo:common-log:1.0.0" level="project" />
<orderEntry type="module" module-name="common-redis" /> <orderEntry type="module" module-name="common-redis" />
<orderEntry type="library" name="Maven: org.redisson:redisson:3.15.4" level="project" /> <orderEntry type="library" name="Maven: org.redisson:redisson:3.15.4" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.63.Final" level="project" /> <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.63.Final" level="project" />

View File

@@ -64,20 +64,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -20,6 +20,11 @@
<artifactId>upms-api</artifactId> <artifactId>upms-api</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.orange.demo</groupId>
<artifactId>common-log</artifactId>
<version>1.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.orange.demo</groupId> <groupId>com.orange.demo</groupId>
<artifactId>common-redis</artifactId> <artifactId>common-redis</artifactId>

View File

@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource; import javax.sql.DataSource;

View File

@@ -14,8 +14,7 @@ import com.orange.demo.common.core.util.*;
import com.orange.demo.common.redis.cache.SessionCacheHelper; import com.orange.demo.common.redis.cache.SessionCacheHelper;
import com.orange.demo.upmsapi.constant.SysUserStatus; import com.orange.demo.upmsapi.constant.SysUserStatus;
import com.orange.demo.upmsapi.constant.SysUserType; import com.orange.demo.upmsapi.constant.SysUserType;
import com.orange.demo.upmsservice.model.SysMenu; import com.orange.demo.upmsservice.model.*;
import com.orange.demo.upmsservice.model.SysUser;
import com.orange.demo.upmsservice.service.*; import com.orange.demo.upmsservice.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -165,9 +164,10 @@ public class LoginController {
} }
private JSONObject buildLoginData(SysUser user) { private JSONObject buildLoginData(SysUser user) {
int deviceType = MyCommonUtil.getDeviceType();
boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN; boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN;
TokenData tokenData = new TokenData(); TokenData tokenData = new TokenData();
String sessionId = user.getLoginName() + "_" + MyCommonUtil.generateUuid(); String sessionId = user.getLoginName() + "_" + deviceType + "_" + MyCommonUtil.generateUuid();
tokenData.setUserId(user.getUserId()); tokenData.setUserId(user.getUserId());
tokenData.setIsAdmin(isAdmin); tokenData.setIsAdmin(isAdmin);
tokenData.setLoginName(user.getLoginName()); tokenData.setLoginName(user.getLoginName());
@@ -175,6 +175,7 @@ public class LoginController {
tokenData.setSessionId(sessionId); tokenData.setSessionId(sessionId);
tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest())); tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest()));
tokenData.setLoginTime(new Date()); tokenData.setLoginTime(new Date());
tokenData.setDeviceType(deviceType);
// 这里手动将TokenData存入request便于OperationLogAspect统一处理操作日志。 // 这里手动将TokenData存入request便于OperationLogAspect统一处理操作日志。
TokenData.addToRequest(tokenData); TokenData.addToRequest(tokenData);
JSONObject jsonData = new JSONObject(); JSONObject jsonData = new JSONObject();

View File

@@ -1,5 +1,6 @@
package com.orange.demo.upmsservice.controller; package com.orange.demo.upmsservice.controller;
import com.alibaba.fastjson.TypeReference;
import com.github.pagehelper.page.PageMethod; import com.github.pagehelper.page.PageMethod;
import com.orange.demo.upmsservice.model.*; import com.orange.demo.upmsservice.model.*;
import com.orange.demo.upmsservice.service.*; import com.orange.demo.upmsservice.service.*;
@@ -52,7 +53,6 @@ public class SysUserController extends BaseController<SysUser, SysUserVo, Long>
* @param roleIdListString 逗号分隔的角色Id列表。 * @param roleIdListString 逗号分隔的角色Id列表。
* @return 应答结果对象包含新增用户的主键Id。 * @return 应答结果对象包含新增用户的主键Id。
*/ */
@SuppressWarnings("unchecked")
@ApiOperationSupport(ignoreParameters = { @ApiOperationSupport(ignoreParameters = {
"sysUserDto.userId", "sysUserDto.userId",
"sysUserDto.createTimeStart", "sysUserDto.createTimeStart",
@@ -65,11 +65,12 @@ public class SysUserController extends BaseController<SysUser, SysUserVo, Long>
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
} }
SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class); SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class);
CallResult result = sysUserService.verifyRelatedData(sysUser, null, roleIdListString); CallResult result = sysUserService.verifyRelatedData(
sysUser, null, roleIdListString);
if (!result.isSuccess()) { if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
} }
Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet"); Set<Long> roleIdSet = result.getData().getObject("roleIdSet", new TypeReference<Set<Long>>() {});
sysUserService.saveNew(sysUser, roleIdSet); sysUserService.saveNew(sysUser, roleIdSet);
return ResponseResult.success(sysUser.getUserId()); return ResponseResult.success(sysUser.getUserId());
} }
@@ -81,7 +82,6 @@ public class SysUserController extends BaseController<SysUser, SysUserVo, Long>
* @param roleIdListString 逗号分隔的角色Id列表。 * @param roleIdListString 逗号分隔的角色Id列表。
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@SuppressWarnings("unchecked")
@ApiOperationSupport(ignoreParameters = { @ApiOperationSupport(ignoreParameters = {
"sysUserDto.createTimeStart", "sysUserDto.createTimeStart",
"sysUserDto.createTimeEnd"}) "sysUserDto.createTimeEnd"})
@@ -97,11 +97,12 @@ public class SysUserController extends BaseController<SysUser, SysUserVo, Long>
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
} }
SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class); SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class);
CallResult result = sysUserService.verifyRelatedData(sysUser, originalUser, roleIdListString); CallResult result = sysUserService.verifyRelatedData(
sysUser, originalUser, roleIdListString);
if (!result.isSuccess()) { if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
} }
Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet"); Set<Long> roleIdSet = result.getData().getObject("roleIdSet", new TypeReference<Set<Long>>() {});
if (!sysUserService.update(sysUser, originalUser, roleIdSet)) { if (!sysUserService.update(sysUser, originalUser, roleIdSet)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
} }

View File

@@ -1,6 +1,6 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany; import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.model.BaseModel; import com.orange.demo.common.core.base.model.BaseModel;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
@@ -11,6 +11,7 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.*; import java.util.*;
/** /**
@@ -21,55 +22,56 @@ import java.util.*;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName(value = "zz_sys_menu") @Table(name = "zz_sys_menu")
public class SysMenu extends BaseModel { public class SysMenu extends BaseModel {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "menu_id") @Id
@Column(name = "menu_id")
private Long menuId; private Long menuId;
/** /**
* 父菜单Id目录菜单的父菜单为null。 * 父菜单Id目录菜单的父菜单为null。
*/ */
@TableField(value = "parent_id") @Column(name = "parent_id")
private Long parentId; private Long parentId;
/** /**
* 菜单显示名称。 * 菜单显示名称。
*/ */
@TableField(value = "menu_name") @Column(name = "menu_name")
private String menuName; private String menuName;
/** /**
* 菜单类型(0: 目录 1: 菜单 2: 按钮 3: UI片段)。 * 菜单类型(0: 目录 1: 菜单 2: 按钮 3: UI片段)。
*/ */
@TableField(value = "menu_type") @Column(name = "menu_type")
private Integer menuType; private Integer menuType;
/** /**
* 前端表单路由名称仅用于menu_type为1的菜单类型。 * 前端表单路由名称仅用于menu_type为1的菜单类型。
*/ */
@TableField(value = "form_router_name") @Column(name = "form_router_name")
private String formRouterName; private String formRouterName;
/** /**
* 在线表单主键Id仅用于在线表单绑定的菜单。 * 在线表单主键Id仅用于在线表单绑定的菜单。
*/ */
@TableField(value = "online_form_id") @Column(name = "online_form_id")
private Long onlineFormId; private Long onlineFormId;
/** /**
* 在线表单菜单的权限控制类型具体值可参考SysOnlineMenuPermType常量对象。 * 在线表单菜单的权限控制类型具体值可参考SysOnlineMenuPermType常量对象。
*/ */
@TableField(value = "online_menu_perm_type") @Column(name = "online_menu_perm_type")
private Integer onlineMenuPermType; private Integer onlineMenuPermType;
/** /**
* 菜单显示顺序 (值越小,排序越靠前)。 * 菜单显示顺序 (值越小,排序越靠前)。
*/ */
@TableField(value = "show_order") @Column(name = "show_order")
private Integer showOrder; private Integer showOrder;
/** /**
@@ -80,15 +82,15 @@ public class SysMenu extends BaseModel {
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
@TableField(value = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany( @RelationManyToMany(
relationMapperName = "sysMenuPermCodeMapper", relationMapperName = "sysMenuPermCodeMapper",
relationMasterIdField = "menuId", relationMasterIdField = "menuId",
relationModelClass = SysMenuPermCode.class) relationModelClass = SysMenuPermCode.class)
@TableField(exist = false) @Transient
private List<SysMenuPermCode> sysMenuPermCodeList; private List<SysMenuPermCode> sysMenuPermCodeList;
@Mapper @Mapper

View File

@@ -1,8 +1,9 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* 菜单与权限字关联实体对象。 * 菜单与权限字关联实体对象。
* *
@@ -10,18 +11,20 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_sys_menu_perm_code") @Table(name = "zz_sys_menu_perm_code")
public class SysMenuPermCode { public class SysMenuPermCode {
/** /**
* 关联菜单Id。 * 关联菜单Id。
*/ */
@TableField(value = "menu_id") @Id
@Column(name = "menu_id")
private Long menuId; private Long menuId;
/** /**
* 关联权限字Id。 * 关联权限字Id。
*/ */
@TableField(value = "perm_code_id") @Id
@Column(name = "perm_code_id")
private Long permCodeId; private Long permCodeId;
} }

View File

@@ -1,11 +1,12 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.base.model.BaseModel; import com.orange.demo.common.core.base.model.BaseModel;
import com.orange.demo.common.core.annotation.RelationDict; import com.orange.demo.common.core.annotation.RelationDict;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.persistence.*;
import java.util.*; import java.util.*;
/** /**
@@ -16,25 +17,26 @@ import java.util.*;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName(value = "zz_sys_perm") @Table(name = "zz_sys_perm")
public class SysPerm extends BaseModel { public class SysPerm extends BaseModel {
/** /**
* 权限Id。 * 权限Id。
*/ */
@TableId(value = "perm_id") @Id
@Column(name = "perm_id")
private Long permId; private Long permId;
/** /**
* 权限所在的权限模块Id。 * 权限所在的权限模块Id。
*/ */
@TableField(value = "module_id") @Column(name = "module_id")
private Long moduleId; private Long moduleId;
/** /**
* 权限名称。 * 权限名称。
*/ */
@TableField(value = "perm_name") @Column(name = "perm_name")
private String permName; private String permName;
/** /**
@@ -45,14 +47,14 @@ public class SysPerm extends BaseModel {
/** /**
* 权限在当前模块下的顺序,由小到大。 * 权限在当前模块下的顺序,由小到大。
*/ */
@TableField(value = "show_order") @Column(name = "show_order")
private Integer showOrder; private Integer showOrder;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
@TableField(value = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationDict( @RelationDict(
@@ -61,6 +63,6 @@ public class SysPerm extends BaseModel {
slaveModelClass = SysPermModule.class, slaveModelClass = SysPermModule.class,
slaveIdField = "moduleId", slaveIdField = "moduleId",
slaveNameField = "moduleName") slaveNameField = "moduleName")
@TableField(exist = false) @Transient
private Map<String, Object> moduleIdDictMap; private Map<String, Object> moduleIdDictMap;
} }

View File

@@ -1,6 +1,6 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany; import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.model.BaseModel; import com.orange.demo.common.core.base.model.BaseModel;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
@@ -11,6 +11,7 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.*; import java.util.*;
/** /**
@@ -21,57 +22,58 @@ import java.util.*;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName(value = "zz_sys_perm_code") @Table(name = "zz_sys_perm_code")
public class SysPermCode extends BaseModel { public class SysPermCode extends BaseModel {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "perm_code_id") @Id
@Column(name = "perm_code_id")
private Long permCodeId; private Long permCodeId;
/** /**
* 上级权限字Id。 * 上级权限字Id。
*/ */
@TableField(value = "parent_id") @Column(name = "parent_id")
private Long parentId; private Long parentId;
/** /**
* 权限字标识(一般为有含义的英文字符串)。 * 权限字标识(一般为有含义的英文字符串)。
*/ */
@TableField(value = "perm_code") @Column(name = "perm_code")
private String permCode; private String permCode;
/** /**
* 权限类型(0: 表单 1: UI片段 2: 操作)。 * 权限类型(0: 表单 1: UI片段 2: 操作)。
*/ */
@TableField(value = "perm_code_type") @Column(name = "perm_code_type")
private Integer permCodeType; private Integer permCodeType;
/** /**
* 显示名称。 * 显示名称。
*/ */
@TableField(value = "show_name") @Column(name = "show_name")
private String showName; private String showName;
/** /**
* 显示顺序(数值越小,越靠前)。 * 显示顺序(数值越小,越靠前)。
*/ */
@TableField(value = "show_order") @Column(name = "show_order")
private Integer showOrder; private Integer showOrder;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
@TableField(value = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany( @RelationManyToMany(
relationMapperName = "sysPermCodePermMapper", relationMapperName = "sysPermCodePermMapper",
relationMasterIdField = "permCodeId", relationMasterIdField = "permCodeId",
relationModelClass = SysPermCodePerm.class) relationModelClass = SysPermCodePerm.class)
@TableField(exist = false) @Transient
private List<SysPermCodePerm> sysPermCodePermList; private List<SysPermCodePerm> sysPermCodePermList;
@Mapper @Mapper

View File

@@ -1,8 +1,9 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* 权限字与权限资源关联实体对象。 * 权限字与权限资源关联实体对象。
* *
@@ -10,18 +11,20 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_sys_perm_code_perm") @Table(name = "zz_sys_perm_code_perm")
public class SysPermCodePerm { public class SysPermCodePerm {
/** /**
* 权限字Id。 * 权限字Id。
*/ */
@TableField(value = "perm_code_id") @Id
@Column(name = "perm_code_id")
private Long permCodeId; private Long permCodeId;
/** /**
* 权限Id。 * 权限Id。
*/ */
@TableField(value = "perm_id") @Id
@Column(name = "perm_id")
private Long permId; private Long permId;
} }

View File

@@ -1,10 +1,11 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.base.model.BaseModel; import com.orange.demo.common.core.base.model.BaseModel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.persistence.*;
import java.util.*; import java.util.*;
/** /**
@@ -15,46 +16,47 @@ import java.util.*;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName(value = "zz_sys_perm_module") @Table(name = "zz_sys_perm_module")
public class SysPermModule extends BaseModel { public class SysPermModule extends BaseModel {
/** /**
* 权限模块Id。 * 权限模块Id。
*/ */
@TableId(value = "module_id") @Id
@Column(name = "module_id")
private Long moduleId; private Long moduleId;
/** /**
* 上级权限模块Id。 * 上级权限模块Id。
*/ */
@TableField(value = "parent_id") @Column(name = "parent_id")
private Long parentId; private Long parentId;
/** /**
* 权限模块名称。 * 权限模块名称。
*/ */
@TableField(value = "module_name") @Column(name = "module_name")
private String moduleName; private String moduleName;
/** /**
* 权限模块类型(0: 普通模块 1: Controller模块)。 * 权限模块类型(0: 普通模块 1: Controller模块)。
*/ */
@TableField(value = "module_type") @Column(name = "module_type")
private Integer moduleType; private Integer moduleType;
/** /**
* 权限模块在当前层级下的顺序,由小到大。 * 权限模块在当前层级下的顺序,由小到大。
*/ */
@TableField(value = "show_order") @Column(name = "show_order")
private Integer showOrder; private Integer showOrder;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
@TableField(value = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@TableField(exist = false) @Transient
private List<SysPerm> sysPermList; private List<SysPerm> sysPermList;
} }

View File

@@ -1,8 +1,9 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* 白名单实体对象。 * 白名单实体对象。
* *
@@ -10,24 +11,25 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_sys_perm_whitelist") @Table(name = "zz_sys_perm_whitelist")
public class SysPermWhitelist { public class SysPermWhitelist {
/** /**
* 权限资源的URL。 * 权限资源的URL。
*/ */
@TableId(value = "perm_url") @Id
@Column(name = "perm_url")
private String permUrl; private String permUrl;
/** /**
* 权限资源所属模块名字(通常是Controller的名字)。 * 权限资源所属模块名字(通常是Controller的名字)。
*/ */
@TableField(value = "module_name") @Column(name = "module_name")
private String moduleName; private String moduleName;
/** /**
* 权限的名称。 * 权限的名称。
*/ */
@TableField(value = "perm_name") @Column(name = "perm_name")
private String permName; private String permName;
} }

View File

@@ -1,6 +1,6 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*; import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany; import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.model.BaseModel; import com.orange.demo.common.core.base.model.BaseModel;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
@@ -11,6 +11,7 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.*; import java.util.*;
/** /**
@@ -21,33 +22,34 @@ import java.util.*;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName(value = "zz_sys_role") @Table(name = "zz_sys_role")
public class SysRole extends BaseModel { public class SysRole extends BaseModel {
/** /**
* 主键Id。 * 主键Id。
*/ */
@TableId(value = "role_id") @Id
@Column(name = "role_id")
private Long roleId; private Long roleId;
/** /**
* 角色名称。 * 角色名称。
*/ */
@TableField(value = "role_name") @Column(name = "role_name")
private String roleName; private String roleName;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
@TableField(value = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany( @RelationManyToMany(
relationMapperName = "sysRoleMenuMapper", relationMapperName = "sysRoleMenuMapper",
relationMasterIdField = "roleId", relationMasterIdField = "roleId",
relationModelClass = SysRoleMenu.class) relationModelClass = SysRoleMenu.class)
@TableField(exist = false) @Transient
private List<SysRoleMenu> sysRoleMenuList; private List<SysRoleMenu> sysRoleMenuList;
@Mapper @Mapper

View File

@@ -1,8 +1,9 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* 角色菜单实体对象。 * 角色菜单实体对象。
* *
@@ -10,18 +11,20 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_sys_role_menu") @Table(name = "zz_sys_role_menu")
public class SysRoleMenu { public class SysRoleMenu {
/** /**
* 角色Id。 * 角色Id。
*/ */
@TableField(value = "role_id") @Id
@Column(name = "role_id")
private Long roleId; private Long roleId;
/** /**
* 菜单Id。 * 菜单Id。
*/ */
@TableField(value = "menu_id") @Id
@Column(name = "menu_id")
private Long menuId; private Long menuId;
} }

View File

@@ -1,6 +1,5 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.upmsapi.vo.SysUserVo; import com.orange.demo.upmsapi.vo.SysUserVo;
import com.orange.demo.upmsapi.constant.SysUserType; import com.orange.demo.upmsapi.constant.SysUserType;
import com.orange.demo.upmsapi.constant.SysUserStatus; import com.orange.demo.upmsapi.constant.SysUserStatus;
@@ -8,10 +7,12 @@ import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.annotation.RelationManyToMany; import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.model.BaseModel; import com.orange.demo.common.core.base.model.BaseModel;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.mapstruct.*; import org.mapstruct.*;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import java.util.Map; import java.util.Map;
import java.util.List; import java.util.List;
@@ -24,19 +25,20 @@ import java.util.List;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName(value = "zz_sys_user") @Table(name = "zz_sys_user")
public class SysUser extends BaseModel { public class SysUser extends BaseModel {
/** /**
* 用户Id。 * 用户Id。
*/ */
@TableId(value = "user_id") @Id
@Column(name = "user_id")
private Long userId; private Long userId;
/** /**
* 登录用户名。 * 登录用户名。
*/ */
@TableField(value = "login_name") @Column(name = "login_name")
private String loginName; private String loginName;
/** /**
@@ -47,44 +49,44 @@ public class SysUser extends BaseModel {
/** /**
* 用户显示名称。 * 用户显示名称。
*/ */
@TableField(value = "show_name") @Column(name = "show_name")
private String showName; private String showName;
/** /**
* 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。
*/ */
@TableField(value = "user_type") @Column(name = "user_type")
private Integer userType; private Integer userType;
/** /**
* 用户头像的Url。 * 用户头像的Url。
*/ */
@TableField(value = "head_image_url") @Column(name = "head_image_url")
private String headImageUrl; private String headImageUrl;
/** /**
* 用户状态(0: 正常 1: 锁定)。 * 用户状态(0: 正常 1: 锁定)。
*/ */
@TableField(value = "user_status") @Column(name = "user_status")
private Integer userStatus; private Integer userStatus;
/** /**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。 * 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/ */
@TableLogic @DeletedFlagColumn
@TableField(value = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
/** /**
* createTime 范围过滤起始值(>=)。 * createTime 范围过滤起始值(>=)。
*/ */
@TableField(exist = false) @Transient
private String createTimeStart; private String createTimeStart;
/** /**
* createTime 范围过滤结束值(<=)。 * createTime 范围过滤结束值(<=)。
*/ */
@TableField(exist = false) @Transient
private String createTimeEnd; private String createTimeEnd;
/** /**
@@ -94,19 +96,19 @@ public class SysUser extends BaseModel {
relationMapperName = "sysUserRoleMapper", relationMapperName = "sysUserRoleMapper",
relationMasterIdField = "userId", relationMasterIdField = "userId",
relationModelClass = SysUserRole.class) relationModelClass = SysUserRole.class)
@TableField(exist = false) @Transient
private List<SysUserRole> sysUserRoleList; private List<SysUserRole> sysUserRoleList;
@RelationConstDict( @RelationConstDict(
masterIdField = "userType", masterIdField = "userType",
constantDictClass = SysUserType.class) constantDictClass = SysUserType.class)
@TableField(exist = false) @Transient
private Map<String, Object> userTypeDictMap; private Map<String, Object> userTypeDictMap;
@RelationConstDict( @RelationConstDict(
masterIdField = "userStatus", masterIdField = "userStatus",
constantDictClass = SysUserStatus.class) constantDictClass = SysUserStatus.class)
@TableField(exist = false) @Transient
private Map<String, Object> userStatusDictMap; private Map<String, Object> userStatusDictMap;
@Mapper @Mapper

View File

@@ -1,8 +1,9 @@
package com.orange.demo.upmsservice.model; package com.orange.demo.upmsservice.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
/** /**
* 用户角色实体对象。 * 用户角色实体对象。
* *
@@ -10,18 +11,20 @@ import lombok.Data;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Data @Data
@TableName(value = "zz_sys_user_role") @Table(name = "zz_sys_user_role")
public class SysUserRole { public class SysUserRole {
/** /**
* 用户Id。 * 用户Id。
*/ */
@TableField(value = "user_id") @Id
@Column(name = "user_id")
private Long userId; private Long userId;
/** /**
* 角色Id。 * 角色Id。
*/ */
@TableField(value = "role_id") @Id
@Column(name = "role_id")
private Long roleId; private Long roleId;
} }

View File

@@ -154,10 +154,10 @@ public interface SysUserService extends IBaseService<SysUser, Long> {
/** /**
* 验证用户对象关联的数据是否都合法。 * 验证用户对象关联的数据是否都合法。
* *
* @param sysUser 当前操作的对象。 * @param sysUser 当前操作的对象。
* @param originalSysUser 原有对象。 * @param originalSysUser 原有对象。
* @param roleIdListString 逗号分隔的角色Id列表字符串。 * @param roleIds 逗号分隔的角色Id列表字符串。
* @return 验证结果。 * @return 验证结果。
*/ */
CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIdListString); CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIds);
} }

View File

@@ -2,9 +2,6 @@ package com.orange.demo.upmsservice.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.common.core.base.service.BaseService; import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper; import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper; import com.orange.demo.common.core.base.dao.BaseDaoMapper;
@@ -26,6 +23,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -76,12 +74,14 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
MyModelUtil.fillCommonsForInsert(sysMenu); MyModelUtil.fillCommonsForInsert(sysMenu);
sysMenuMapper.insert(sysMenu); sysMenuMapper.insert(sysMenu);
if (permCodeIdSet != null) { if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) { for (Long permCodeId : permCodeIdSet) {
SysMenuPermCode menuPermCode = new SysMenuPermCode(); SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(sysMenu.getMenuId()); menuPermCode.setMenuId(sysMenu.getMenuId());
menuPermCode.setPermCodeId(permCodeId); menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeMapper.insert(menuPermCode); sysMenuPermCodeList.add(menuPermCode);
} }
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
} }
// 判断当前菜单是否为指向在线表单的菜单,并将根据约定,动态插入两个子菜单。 // 判断当前菜单是否为指向在线表单的菜单,并将根据约定,动态插入两个子菜单。
if (sysMenu.getOnlineFormId() != null) { if (sysMenu.getOnlineFormId() != null) {
@@ -124,27 +124,30 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet) { public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet) {
MyModelUtil.fillCommonsForUpdate(sysMenu, originalSysMenu); MyModelUtil.fillCommonsForUpdate(sysMenu, originalSysMenu);
sysMenu.setMenuType(originalSysMenu.getMenuType()); sysMenu.setMenuType(originalSysMenu.getMenuType());
UpdateWrapper<SysMenu> uw = this.createUpdateQueryForNullValue(sysMenu, sysMenu.getMenuId()); sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysMenuMapper.update(sysMenu, uw) != 1) { if (sysMenuMapper.updateByPrimaryKey(sysMenu) != 1) {
return false; return false;
} }
SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode(); SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode();
deletedMenuPermCode.setMenuId(sysMenu.getMenuId()); deletedMenuPermCode.setMenuId(sysMenu.getMenuId());
sysMenuPermCodeMapper.delete(new QueryWrapper<>(deletedMenuPermCode)); sysMenuPermCodeMapper.delete(deletedMenuPermCode);
if (permCodeIdSet != null) { if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) { for (Long permCodeId : permCodeIdSet) {
SysMenuPermCode menuPermCode = new SysMenuPermCode(); SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(sysMenu.getMenuId()); menuPermCode.setMenuId(sysMenu.getMenuId());
menuPermCode.setPermCodeId(permCodeId); menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeMapper.insert(menuPermCode); sysMenuPermCodeList.add(menuPermCode);
} }
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
} }
// 如果当前菜单的在线表单Id变化了就需要同步更新他的内置子菜单也同步更新。 // 如果当前菜单的在线表单Id变化了就需要同步更新他的内置子菜单也同步更新。
if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) { if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) {
SysMenu onlineSubMenu = new SysMenu(); SysMenu onlineSubMenu = new SysMenu();
onlineSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); onlineSubMenu.setOnlineFormId(sysMenu.getOnlineFormId());
sysMenuMapper.update(onlineSubMenu, Example e = new Example(SysMenu.class);
new QueryWrapper<SysMenu>().lambda().eq(SysMenu::getParentId, sysMenu.getMenuId())); e.createCriteria().andEqualTo("parentId", sysMenu.getMenuId());
sysMenuMapper.updateByExampleSelective(onlineSubMenu, e);
} }
return true; return true;
} }
@@ -159,18 +162,23 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
@Override @Override
public boolean remove(SysMenu menu) { public boolean remove(SysMenu menu) {
Long menuId = menu.getMenuId(); Long menuId = menu.getMenuId();
if (sysMenuMapper.deleteById(menuId) != 1) { if (!this.removeById(menuId)) {
return false; return false;
} }
SysRoleMenu roleMenu = new SysRoleMenu(); SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setMenuId(menuId); roleMenu.setMenuId(menuId);
sysRoleMenuMapper.delete(new QueryWrapper<>(roleMenu)); sysRoleMenuMapper.delete(roleMenu);
SysMenuPermCode menuPermCode = new SysMenuPermCode(); SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(menuId); menuPermCode.setMenuId(menuId);
sysMenuPermCodeMapper.delete(new QueryWrapper<>(menuPermCode)); sysMenuPermCodeMapper.delete(menuPermCode);
// 如果为指向在线表单的菜单,则连同删除子菜单 // 如果为指向在线表单的菜单,则连同删除子菜单
if (menu.getOnlineFormId() != null) { if (menu.getOnlineFormId() != null) {
sysMenuMapper.delete(new QueryWrapper<SysMenu>().lambda().eq(SysMenu::getParentId, menuId)); Example e = new Example(SysMenu.class);
Example.Criteria c = e.createCriteria().andEqualTo("parentId", menuId);
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
SysMenu deletedSubMenu = new SysMenu();
deletedSubMenu.setDeletedFlag(GlobalDeletedFlag.DELETED);
sysMenuMapper.updateByExampleSelective(deletedSubMenu, e);
} }
return true; return true;
} }
@@ -182,11 +190,12 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
*/ */
@Override @Override
public Collection<SysMenu> getAllMenuList() { public Collection<SysMenu> getAllMenuList() {
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>(); Example e = new Example(SysMenu.class);
queryWrapper.orderByAsc(this.safeMapToColumnName("showOrder")); e.orderBy("showOrder");
queryWrapper.in(this.safeMapToColumnName("menuType"), Example.Criteria c = e.createCriteria();
Arrays.asList(SysMenuType.TYPE_MENU, SysMenuType.TYPE_DIRECTORY)); c.andIn("menuType", Arrays.asList(SysMenuType.TYPE_MENU, SysMenuType.TYPE_DIRECTORY));
return sysMenuMapper.selectList(queryWrapper); c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
return sysMenuMapper.selectByExample(e);
} }
/** /**
@@ -285,12 +294,12 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
*/ */
@Override @Override
public List<SysMenu> getAllOnlineMenuList(Integer menuType) { public List<SysMenu> getAllOnlineMenuList(Integer menuType) {
LambdaQueryWrapper<SysMenu> queryWrapper = Example e = new Example(SysMenu.class);
new QueryWrapper<SysMenu>().lambda().isNotNull(SysMenu::getOnlineFormId); Example.Criteria c = e.createCriteria().andIsNotNull("onlineFormId");
if (menuType != null) { if (menuType != null) {
queryWrapper.eq(SysMenu::getMenuType, menuType); c.andEqualTo("menuType", menuType);
} }
return sysMenuMapper.selectList(queryWrapper); return sysMenuMapper.selectByExample(e);
} }
/** /**

View File

@@ -1,8 +1,6 @@
package com.orange.demo.upmsservice.service.impl; package com.orange.demo.upmsservice.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.orange.demo.common.core.base.service.BaseService; import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper; import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper; import com.orange.demo.common.core.base.dao.BaseDaoMapper;
@@ -95,12 +93,14 @@ public class SysPermCodeServiceImpl extends BaseService<SysPermCode, Long> imple
MyModelUtil.fillCommonsForInsert(sysPermCode); MyModelUtil.fillCommonsForInsert(sysPermCode);
sysPermCodeMapper.insert(sysPermCode); sysPermCodeMapper.insert(sysPermCode);
if (permIdSet != null) { if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) { for (Long permId : permIdSet) {
SysPermCodePerm permCodePerm = new SysPermCodePerm(); SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); permCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
permCodePerm.setPermId(permId); permCodePerm.setPermId(permId);
sysPermCodePermMapper.insert(permCodePerm); sysPermCodePermList.add(permCodePerm);
} }
sysPermCodePermMapper.insertList(sysPermCodePermList);
} }
return sysPermCode; return sysPermCode;
} }
@@ -117,22 +117,23 @@ public class SysPermCodeServiceImpl extends BaseService<SysPermCode, Long> imple
@Override @Override
public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet) { public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet) {
sysPermCode.setParentId(originalSysPermCode.getParentId()); sysPermCode.setParentId(originalSysPermCode.getParentId());
sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL);
MyModelUtil.fillCommonsForUpdate(sysPermCode, originalSysPermCode); MyModelUtil.fillCommonsForUpdate(sysPermCode, originalSysPermCode);
UpdateWrapper<SysPermCode> uw = if (sysPermCodeMapper.updateByPrimaryKey(sysPermCode) != 1) {
this.createUpdateQueryForNullValue(sysPermCode, sysPermCode.getPermCodeId());
if (sysPermCodeMapper.update(sysPermCode, uw) != 1) {
return false; return false;
} }
SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm(); SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm();
deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
sysPermCodePermMapper.delete(new QueryWrapper<>(deletedPermCodePerm)); sysPermCodePermMapper.delete(deletedPermCodePerm);
if (permIdSet != null) { if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) { for (Long permId : permIdSet) {
SysPermCodePerm permCodePerm = new SysPermCodePerm(); SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); permCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
permCodePerm.setPermId(permId); permCodePerm.setPermId(permId);
sysPermCodePermMapper.insert(permCodePerm); sysPermCodePermList.add(permCodePerm);
} }
sysPermCodePermMapper.insertList(sysPermCodePermList);
} }
return true; return true;
} }
@@ -146,15 +147,15 @@ public class SysPermCodeServiceImpl extends BaseService<SysPermCode, Long> imple
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long permCodeId) { public boolean remove(Long permCodeId) {
if (sysPermCodeMapper.deleteById(permCodeId) != 1) { if (!this.removeById(permCodeId)) {
return false; return false;
} }
SysMenuPermCode menuPermCode = new SysMenuPermCode(); SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setPermCodeId(permCodeId); menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeMapper.delete(new QueryWrapper<>(menuPermCode)); sysMenuPermCodeMapper.delete(menuPermCode);
SysPermCodePerm permCodePerm = new SysPermCodePerm(); SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(permCodeId); permCodePerm.setPermCodeId(permCodeId);
sysPermCodePermMapper.delete(new QueryWrapper<>(permCodePerm)); sysPermCodePermMapper.delete(permCodePerm);
return true; return true;
} }

View File

@@ -71,7 +71,8 @@ public class SysPermModuleServiceImpl extends BaseService<SysPermModule, Long> i
@Override @Override
public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) { public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) {
MyModelUtil.fillCommonsForUpdate(sysPermModule, originalSysPermModule); MyModelUtil.fillCommonsForUpdate(sysPermModule, originalSysPermModule);
return sysPermModuleMapper.updateById(sysPermModule) != 0; sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysPermModuleMapper.updateByPrimaryKey(sysPermModule) != 0;
} }
/** /**
@@ -83,7 +84,7 @@ public class SysPermModuleServiceImpl extends BaseService<SysPermModule, Long> i
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long moduleId) { public boolean remove(Long moduleId) {
return sysPermModuleMapper.deleteById(moduleId) == 1; return this.removeById(moduleId);
} }
/** /**

View File

@@ -1,6 +1,5 @@
package com.orange.demo.upmsservice.service.impl; package com.orange.demo.upmsservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.orange.demo.common.core.base.service.BaseService; import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper; import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
@@ -19,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
@@ -78,7 +78,8 @@ public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements Sy
@Override @Override
public boolean update(SysPerm perm, SysPerm originalPerm) { public boolean update(SysPerm perm, SysPerm originalPerm) {
MyModelUtil.fillCommonsForUpdate(perm, originalPerm); MyModelUtil.fillCommonsForUpdate(perm, originalPerm);
return sysPermMapper.updateById(perm) != 0; perm.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysPermMapper.updateByPrimaryKeySelective(perm) != 0;
} }
/** /**
@@ -90,12 +91,12 @@ public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements Sy
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long permId) { public boolean remove(Long permId) {
if (sysPermMapper.deleteById(permId) != 1) { if (!this.removeById(permId)) {
return false; return false;
} }
SysPermCodePerm permCodePerm = new SysPermCodePerm(); SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermId(permId); permCodePerm.setPermId(permId);
sysPermCodePermMapper.delete(new QueryWrapper<>(permCodePerm)); sysPermCodePermMapper.delete(permCodePerm);
return true; return true;
} }
@@ -107,13 +108,17 @@ public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements Sy
*/ */
@Override @Override
public List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter) { public List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter) {
QueryWrapper<SysPerm> queryWrapper = new QueryWrapper<>(); Example e = new Example(SysPerm.class);
queryWrapper.orderByAsc(this.safeMapToColumnName("showOrder")); e.orderBy("showOrder");
queryWrapper.eq(ObjectUtil.isNotNull(sysPermFilter.getModuleId()), Example.Criteria c = e.createCriteria();
this.safeMapToColumnName("moduleId"), sysPermFilter.getModuleId()); if (ObjectUtil.isNotNull(sysPermFilter.getModuleId())) {
queryWrapper.like(ObjectUtil.isNotNull(sysPermFilter.getUrl()), c.andEqualTo("moduleId", sysPermFilter.getModuleId());
this.safeMapToColumnName("url"), "%" + sysPermFilter.getUrl() + "%"); }
List<SysPerm> permList = sysPermMapper.selectList(queryWrapper); if (ObjectUtil.isNotNull(sysPermFilter.getUrl())) {
c.andLike("url", "%" + sysPermFilter.getUrl() + "%");
}
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
List<SysPerm> permList = sysPermMapper.selectByExample(e);
// 这里因为权限只有字典数据,所以仅仅做字典关联。 // 这里因为权限只有字典数据,所以仅仅做字典关联。
this.buildRelationForDataList(permList, MyRelationParam.dictOnly()); this.buildRelationForDataList(permList, MyRelationParam.dictOnly());
return permList; return permList;

View File

@@ -1,6 +1,5 @@
package com.orange.demo.upmsservice.service.impl; package com.orange.demo.upmsservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService; import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.base.dao.BaseDaoMapper; import com.orange.demo.common.core.base.dao.BaseDaoMapper;
@@ -71,12 +70,14 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy
MyModelUtil.fillCommonsForInsert(role); MyModelUtil.fillCommonsForInsert(role);
sysRoleMapper.insert(role); sysRoleMapper.insert(role);
if (menuIdSet != null) { if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) { for (Long menuId : menuIdSet) {
SysRoleMenu roleMenu = new SysRoleMenu(); SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getRoleId()); roleMenu.setRoleId(role.getRoleId());
roleMenu.setMenuId(menuId); roleMenu.setMenuId(menuId);
sysRoleMenuMapper.insert(roleMenu); roleMenuList.add(roleMenu);
} }
sysRoleMenuMapper.insertList(roleMenuList);
} }
return role; return role;
} }
@@ -92,20 +93,23 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) { public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) {
role.setDeletedFlag(GlobalDeletedFlag.NORMAL);
MyModelUtil.fillCommonsForUpdate(role, originalRole); MyModelUtil.fillCommonsForUpdate(role, originalRole);
if (sysRoleMapper.updateById(role) != 1) { if (sysRoleMapper.updateByPrimaryKey(role) != 1) {
return false; return false;
} }
SysRoleMenu deletedRoleMenu = new SysRoleMenu(); SysRoleMenu deletedRoleMenu = new SysRoleMenu();
deletedRoleMenu.setRoleId(role.getRoleId()); deletedRoleMenu.setRoleId(role.getRoleId());
sysRoleMenuMapper.delete(new QueryWrapper<>(deletedRoleMenu)); sysRoleMenuMapper.delete(deletedRoleMenu);
if (menuIdSet != null) { if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) { for (Long menuId : menuIdSet) {
SysRoleMenu roleMenu = new SysRoleMenu(); SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getRoleId()); roleMenu.setRoleId(role.getRoleId());
roleMenu.setMenuId(menuId); roleMenu.setMenuId(menuId);
sysRoleMenuMapper.insert(roleMenu); roleMenuList.add(roleMenu);
} }
sysRoleMenuMapper.insertList(roleMenuList);
} }
return true; return true;
} }
@@ -119,15 +123,15 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long roleId) { public boolean remove(Long roleId) {
if (sysRoleMapper.deleteById(roleId) != 1) { if (!this.removeById(roleId)) {
return false; return false;
} }
SysRoleMenu roleMenu = new SysRoleMenu(); SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(roleId); roleMenu.setRoleId(roleId);
sysRoleMenuMapper.delete(new QueryWrapper<>(roleMenu)); sysRoleMenuMapper.delete(roleMenu);
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
sysUserRoleMapper.delete(new QueryWrapper<>(userRole)); sysUserRoleMapper.delete(userRole);
return true; return true;
} }
@@ -151,9 +155,7 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void addUserRoleList(List<SysUserRole> userRoleList) { public void addUserRoleList(List<SysUserRole> userRoleList) {
for (SysUserRole userRole : userRoleList) { sysUserRoleMapper.insertList(userRoleList);
sysUserRoleMapper.insert(userRole);
}
} }
/** /**
@@ -169,7 +171,7 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
userRole.setUserId(userId); userRole.setUserId(userId);
return sysUserRoleMapper.delete(new QueryWrapper<>(userRole)) == 1; return sysUserRoleMapper.delete(userRole) == 1;
} }
/** /**

View File

@@ -1,7 +1,5 @@
package com.orange.demo.upmsservice.service.impl; package com.orange.demo.upmsservice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.demo.upmsservice.service.*; import com.orange.demo.upmsservice.service.*;
import com.orange.demo.upmsservice.dao.*; import com.orange.demo.upmsservice.dao.*;
@@ -21,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -66,7 +65,8 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
public SysUser getSysUserByLoginName(String loginName) { public SysUser getSysUserByLoginName(String loginName) {
SysUser filter = new SysUser(); SysUser filter = new SysUser();
filter.setLoginName(loginName); filter.setLoginName(loginName);
return sysUserMapper.selectOne(new QueryWrapper<>(filter)); filter.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysUserMapper.selectOne(filter);
} }
/** /**
@@ -86,12 +86,14 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
MyModelUtil.fillCommonsForInsert(user); MyModelUtil.fillCommonsForInsert(user);
sysUserMapper.insert(user); sysUserMapper.insert(user);
if (CollectionUtils.isNotEmpty(roleIdSet)) { if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) { for (Long roleId : roleIdSet) {
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId()); userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
sysUserRoleMapper.insert(userRole); userRoleList.add(userRole);
} }
sysUserRoleMapper.insertList(userRoleList);
} }
return user; return user;
} }
@@ -110,21 +112,23 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
user.setLoginName(originalUser.getLoginName()); user.setLoginName(originalUser.getLoginName());
user.setPassword(originalUser.getPassword()); user.setPassword(originalUser.getPassword());
MyModelUtil.fillCommonsForUpdate(user, originalUser); MyModelUtil.fillCommonsForUpdate(user, originalUser);
UpdateWrapper<SysUser> uw = this.createUpdateQueryForNullValue(user, user.getUserId()); user.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysUserMapper.update(user, uw) != 1) { if (sysUserMapper.updateByPrimaryKey(user) != 1) {
return false; return false;
} }
// 先删除原有的User-Role关联关系再重新插入新的关联关系 // 先删除原有的User-Role关联关系再重新插入新的关联关系
SysUserRole deletedUserRole = new SysUserRole(); SysUserRole deletedUserRole = new SysUserRole();
deletedUserRole.setUserId(user.getUserId()); deletedUserRole.setUserId(user.getUserId());
sysUserRoleMapper.delete(new QueryWrapper<>(deletedUserRole)); sysUserRoleMapper.delete(deletedUserRole);
if (CollectionUtils.isNotEmpty(roleIdSet)) { if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) { for (Long roleId : roleIdSet) {
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId()); userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
sysUserRoleMapper.insert(userRole); userRoleList.add(userRole);
} }
sysUserRoleMapper.insertList(userRoleList);
} }
return true; return true;
} }
@@ -138,10 +142,13 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean changePassword(Long userId, String newPass) { public boolean changePassword(Long userId, String newPass) {
Example e = new Example(SysUser.class);
e.createCriteria()
.andEqualTo(super.idFieldName, userId)
.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
SysUser updatedUser = new SysUser(); SysUser updatedUser = new SysUser();
updatedUser.setUserId(userId);
updatedUser.setPassword(passwordEncoder.encode(newPass)); updatedUser.setPassword(passwordEncoder.encode(newPass));
return sysUserMapper.updateById(updatedUser) == 1; return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1;
} }
/** /**
@@ -153,12 +160,13 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(Long userId) { public boolean remove(Long userId) {
if (sysUserMapper.deleteById(userId) == 0) { // 这里先删除主数据
if (!this.removeById(userId)) {
return false; return false;
} }
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setUserId(userId); userRole.setUserId(userId);
sysUserRoleMapper.delete(new QueryWrapper<>(userRole)); sysUserRoleMapper.delete(userRole);
return true; return true;
} }
@@ -301,19 +309,19 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
/** /**
* 验证用户对象关联的数据是否都合法。 * 验证用户对象关联的数据是否都合法。
* *
* @param sysUser 当前操作的对象。 * @param sysUser 当前操作的对象。
* @param originalSysUser 原有对象。 * @param originalSysUser 原有对象。
* @param roleIdListString 逗号分隔的角色Id列表字符串。 * @param roleIds 逗号分隔的角色Id列表字符串。
* @return 验证结果。 * @return 验证结果。
*/ */
@Override @Override
public CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIdListString) { public CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIds) {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
if (StringUtils.isBlank(roleIdListString)) { if (StringUtils.isBlank(roleIds)) {
return CallResult.error("数据验证失败,用户的角色数据不能为空!"); return CallResult.error("数据验证失败,用户的角色数据不能为空!");
} }
Set<Long> roleIdSet = Arrays.stream( Set<Long> roleIdSet = Arrays.stream(
roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); roleIds.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) { if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) {
return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!"); return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!");
} }

View File

@@ -63,20 +63,23 @@
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" /> <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />
@@ -99,6 +102,7 @@
<orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" /> <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" /> <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" /> <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" />
<orderEntry type="library" name="Maven: com.orange.demo:common-log:1.0.0" level="project" />
<orderEntry type="module" module-name="common-redis" /> <orderEntry type="module" module-name="common-redis" />
<orderEntry type="library" name="Maven: org.redisson:redisson:3.15.4" level="project" /> <orderEntry type="library" name="Maven: org.redisson:redisson:3.15.4" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.63.Final" level="project" /> <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.63.Final" level="project" />

View File

@@ -77,20 +77,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -97,9 +97,9 @@
<version>${druid.version}</version> <version>${druid.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>tk.mybatis</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mapper-spring-boot-starter</artifactId>
<version>${mybatisplus.version}</version> <version>${mybatis-mapper.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>com.github.pagehelper</groupId>

View File

@@ -0,0 +1,16 @@
package com.orange.demo.common.core.annotation;
import java.lang.annotation.*;
/**
* 主要用于标记逻辑删除字段。
*
* @author Jerry
* @date 2020-08-08
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DeletedFlagColumn {
}

View File

@@ -27,7 +27,7 @@ import java.util.Map;
@Slf4j @Slf4j
public class DataSourceResolveAspect { public class DataSourceResolveAspect {
private Map<Class<? extends DataSourceResolver>, DataSourceResolver> resolverMap = new HashMap<>(); private final Map<Class<? extends DataSourceResolver>, DataSourceResolver> resolverMap = new HashMap<>();
/** /**
* 所有配置MyDataSourceResovler注解的Service实现类。 * 所有配置MyDataSourceResovler注解的Service实现类。

View File

@@ -10,8 +10,6 @@ import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.Serializable;
/** /**
* 字典缓存同步的AOP。该AOP的优先级必须比事务切面的优先级高因此会在事务外执行该切面的代码。 * 字典缓存同步的AOP。该AOP的优先级必须比事务切面的优先级高因此会在事务外执行该切面的代码。
* *
@@ -41,23 +39,23 @@ public class DictCacheSyncAspect {
Object arg = joinPoint.getArgs()[0]; Object arg = joinPoint.getArgs()[0];
if ("saveNew".equals(methodName)) { if ("saveNew".equals(methodName)) {
Object data = joinPoint.proceed(); Object data = joinPoint.proceed();
BaseDictService<Object, Serializable> service = BaseDictService<Object, Object> service =
(BaseDictService<Object, Serializable>) joinPoint.getTarget(); (BaseDictService<Object, Object>) joinPoint.getTarget();
// 这里参数必须使用saveNew方法的返回对象因为里面包含实际主键值。 // 这里参数必须使用saveNew方法的返回对象因为里面包含实际主键值。
service.putDictionaryCache(data); service.putDictionaryCache(data);
return data; return data;
} else if ("update".equals(methodName)) { } else if ("update".equals(methodName)) {
Object data = joinPoint.proceed(); Object data = joinPoint.proceed();
BaseDictService<Object, Serializable> service = BaseDictService<Object, Object> service =
(BaseDictService<Object, Serializable>) joinPoint.getTarget(); (BaseDictService<Object, Object>) joinPoint.getTarget();
// update的方法返回的是boolean因此这里的参数需要使用第一个参数即可。 // update的方法返回的是boolean因此这里的参数需要使用第一个参数即可。
service.putDictionaryCache(arg); service.putDictionaryCache(arg);
return data; return data;
} else { } else {
// remove // remove
BaseDictService<Object, Serializable> service = BaseDictService<Object, Object> service =
(BaseDictService<Object, Serializable>) joinPoint.getTarget(); (BaseDictService<Object, Object>) joinPoint.getTarget();
service.removeDictionaryCache((Serializable) arg); service.removeDictionaryCache(arg);
return joinPoint.proceed(); return joinPoint.proceed();
} }
} }

View File

@@ -2,7 +2,6 @@ package com.orange.demo.common.core.base.controller;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.common.core.base.mapper.BaseModelMapper; import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.base.service.IBaseService; import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.common.core.constant.AggregationKind; import com.orange.demo.common.core.constant.AggregationKind;
@@ -19,7 +18,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.io.Serializable; import javax.persistence.Id;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.util.LinkedList; import java.util.LinkedList;
@@ -38,7 +37,7 @@ import java.util.stream.Collectors;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Slf4j @Slf4j
public abstract class BaseController<M, V, K extends Serializable> { public abstract class BaseController<M, V, K> {
/** /**
* 当前Service关联的主Model实体对象的Class。 * 当前Service关联的主Model实体对象的Class。
@@ -69,7 +68,7 @@ public abstract class BaseController<M, V, K extends Serializable> {
domainVoClass = (Class<V>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; domainVoClass = (Class<V>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
Field[] fields = ReflectUtil.getFields(modelClass); Field[] fields = ReflectUtil.getFields(modelClass);
for (Field field : fields) { for (Field field : fields) {
if (null != field.getAnnotation(TableId.class)) { if (null != field.getAnnotation(Id.class)) {
idFieldName = field.getName(); idFieldName = field.getName();
break; break;
} }

View File

@@ -1,8 +1,10 @@
package com.orange.demo.common.core.base.dao; package com.orange.demo.common.core.base.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -14,7 +16,8 @@ import java.util.Map;
* @author Jerry * @author Jerry
* @date 2020-08-08 * @date 2020-08-08
*/ */
public interface BaseDaoMapper<M> extends BaseMapper<M> { @RegisterMapper
public interface BaseDaoMapper<M> extends Mapper<M>, InsertListMapper<M> {
/** /**
* 根据指定的表名、显示字段列表、过滤条件字符串和分组字段,返回聚合计算后的查询结果。 * 根据指定的表名、显示字段列表、过滤条件字符串和分组字段,返回聚合计算后的查询结果。

View File

@@ -1,8 +1,8 @@
package com.orange.demo.common.core.base.model; package com.orange.demo.common.core.base.model;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import java.util.Date; import java.util.Date;
/** /**
@@ -17,24 +17,24 @@ public class BaseModel {
/** /**
* 创建者Id。 * 创建者Id。
*/ */
@TableField(value = "create_user_id") @Column(name = "create_user_id")
private Long createUserId; private Long createUserId;
/** /**
* 创建时间。 * 创建时间。
*/ */
@TableField(value = "create_time") @Column(name = "create_time")
private Date createTime; private Date createTime;
/** /**
* 更新者Id。 * 更新者Id。
*/ */
@TableField(value = "update_user_id") @Column(name = "update_user_id")
private Long updateUserId; private Long updateUserId;
/** /**
* 更新时间。 * 更新时间。
*/ */
@TableField(value = "update_time") @Column(name = "update_time")
private Date updateTime; private Date updateTime;
} }

View File

@@ -1,7 +1,6 @@
package com.orange.demo.common.core.base.service; package com.orange.demo.common.core.base.service;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag; import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.exception.MyRuntimeException; import com.orange.demo.common.core.exception.MyRuntimeException;
import com.orange.demo.common.core.cache.DictionaryCache; import com.orange.demo.common.core.cache.DictionaryCache;
@@ -9,8 +8,8 @@ import com.orange.demo.common.core.object.TokenData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.io.Serializable;
import java.util.*; import java.util.*;
/** /**
@@ -23,7 +22,7 @@ import java.util.*;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Slf4j @Slf4j
public abstract class BaseDictService<M, K extends Serializable> extends BaseService<M, K> implements IBaseDictService<M, K> { public abstract class BaseDictService<M, K> extends BaseService<M, K> implements IBaseDictService<M, K> {
/** /**
* 缓存池对象。 * 缓存池对象。
@@ -90,7 +89,15 @@ public abstract class BaseDictService<M, K extends Serializable> extends BaseSer
if (tenantIdField != null) { if (tenantIdField != null) {
ReflectUtil.setFieldValue(data, tenantIdField, TokenData.takeFromRequest().getTenantId()); ReflectUtil.setFieldValue(data, tenantIdField, TokenData.takeFromRequest().getTenantId());
} }
return mapper().updateById(data) == 1; if (deletedFlagFieldName != null) {
try {
setDeletedFlagMethod.invoke(data, GlobalDeletedFlag.NORMAL);
} catch (Exception e) {
log.error("Failed to call reflection [setDeletedFlagMethod] in BaseDictService.update.", e);
throw new MyRuntimeException(e);
}
}
return mapper().updateByPrimaryKey(data) == 1;
} }
/** /**
@@ -102,7 +109,7 @@ public abstract class BaseDictService<M, K extends Serializable> extends BaseSer
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean remove(K id) { public boolean remove(K id) {
return mapper().deleteById(id) == 1; return this.removeById(id);
} }
/** /**
@@ -111,16 +118,15 @@ public abstract class BaseDictService<M, K extends Serializable> extends BaseSer
* @param id 主键Id。 * @param id 主键Id。
* @return 主键关联的数据不存在返回null。 * @return 主键关联的数据不存在返回null。
*/ */
@SuppressWarnings("unchecked")
@Override @Override
public M getById(Serializable id) { public M getById(K id) {
M data = dictionaryCache.get((K) id); M data = dictionaryCache.get(id);
if (data != null) { if (data != null) {
return data; return data;
} }
data = super.getById(id); data = super.getById(id);
if (data != null) { if (data != null) {
this.dictionaryCache.put((K) id, data); this.dictionaryCache.put(id, data);
} }
return data; return data;
} }
@@ -214,10 +220,8 @@ public abstract class BaseDictService<M, K extends Serializable> extends BaseSer
List<M> dataList = this.getInList((Set<K>) inFilterValues); List<M> dataList = this.getInList((Set<K>) inFilterValues);
return dataList.size() == inFilterValues.size(); return dataList.size() == inFilterValues.size();
} }
String columnName = this.safeMapToColumnName(inFilterField); Example e = this.makeDefaultInListExample(inFilterField, inFilterValues, null);
QueryWrapper<M> queryWrapper = new QueryWrapper<>(); return mapper().selectCountByExample(e) == inFilterValues.size();
queryWrapper.in(columnName, inFilterValues);
return mapper().selectCount(queryWrapper) == inFilterValues.size();
} }
/** /**

View File

@@ -1,10 +1,5 @@
package com.orange.demo.common.core.base.service; package com.orange.demo.common.core.base.service;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.annotation.*; import com.orange.demo.common.core.annotation.*;
@@ -13,7 +8,6 @@ import com.orange.demo.common.core.base.client.BaseClient;
import com.orange.demo.common.core.constant.AggregationKind; import com.orange.demo.common.core.constant.AggregationKind;
import com.orange.demo.common.core.constant.AggregationType; import com.orange.demo.common.core.constant.AggregationType;
import com.orange.demo.common.core.constant.GlobalDeletedFlag; import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.exception.InvalidDataFieldException;
import com.orange.demo.common.core.exception.MyRuntimeException; import com.orange.demo.common.core.exception.MyRuntimeException;
import com.orange.demo.common.core.exception.RemoteDataBuildException; import com.orange.demo.common.core.exception.RemoteDataBuildException;
import com.orange.demo.common.core.object.*; import com.orange.demo.common.core.object.*;
@@ -27,14 +21,20 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.io.Serializable; import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Consumer;
import java.util.function.Supplier;
import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.*;
@@ -47,7 +47,7 @@ import static java.util.stream.Collectors.*;
* @date 2020-08-08 * @date 2020-08-08
*/ */
@Slf4j @Slf4j
public abstract class BaseService<M, K extends Serializable> extends ServiceImpl<BaseDaoMapper<M>, M> implements IBaseService<M, K> { public abstract class BaseService<M, K> implements IBaseService<M, K> {
/** /**
* 当前Service关联的主Model实体对象的Class。 * 当前Service关联的主Model实体对象的Class。
*/ */
@@ -156,11 +156,6 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
private static final String AND_OP = " AND "; private static final String AND_OP = " AND ";
@Override
public BaseDaoMapper<M> getBaseMapper() {
return mapper();
}
/** /**
* 构造函数在实例化的时候一次性完成所有有关主Model对象信息的加载。 * 构造函数在实例化的时候一次性完成所有有关主Model对象信息的加载。
*/ */
@@ -168,7 +163,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
public BaseService() { public BaseService() {
modelClass = (Class<M>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; modelClass = (Class<M>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
idFieldClass = (Class<K>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; idFieldClass = (Class<K>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
this.tableName = modelClass.getAnnotation(TableName.class).value(); this.tableName = modelClass.getAnnotation(Table.class).name();
Field[] fields = ReflectUtil.getFields(modelClass); Field[] fields = ReflectUtil.getFields(modelClass);
for (Field field : fields) { for (Field field : fields) {
initializeField(field); initializeField(field);
@@ -176,10 +171,10 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
} }
private void initializeField(Field field) { private void initializeField(Field field) {
if (idFieldName == null && null != field.getAnnotation(TableId.class)) { if (idFieldName == null && null != field.getAnnotation(Id.class)) {
idFieldName = field.getName(); idFieldName = field.getName();
TableId c = field.getAnnotation(TableId.class); Column c = field.getAnnotation(Column.class);
idColumnName = c == null ? idFieldName : c.value(); idColumnName = c == null ? idFieldName : c.name();
setIdFieldMethod = ReflectUtil.getMethod( setIdFieldMethod = ReflectUtil.getMethod(
modelClass, "set" + StringUtils.capitalize(idFieldName), idFieldClass); modelClass, "set" + StringUtils.capitalize(idFieldName), idFieldClass);
getIdFieldMethod = ReflectUtil.getMethod( getIdFieldMethod = ReflectUtil.getMethod(
@@ -187,18 +182,21 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
} }
if (updateTimeFieldName == null && null != field.getAnnotation(JobUpdateTimeColumn.class)) { if (updateTimeFieldName == null && null != field.getAnnotation(JobUpdateTimeColumn.class)) {
updateTimeFieldName = field.getName(); updateTimeFieldName = field.getName();
updateTimeColumnName = this.safeMapToColumnName(updateTimeFieldName); Column c = field.getAnnotation(Column.class);
updateTimeColumnName = c == null ? updateTimeFieldName : c.name();
} }
if (deletedFlagFieldName == null && null != field.getAnnotation(TableLogic.class)) { if (deletedFlagFieldName == null && null != field.getAnnotation(DeletedFlagColumn.class)) {
deletedFlagFieldName = field.getName(); deletedFlagFieldName = field.getName();
deletedFlagColumnName = this.safeMapToColumnName(deletedFlagFieldName); Column c = field.getAnnotation(Column.class);
deletedFlagColumnName = c == null ? deletedFlagFieldName : c.name();
setDeletedFlagMethod = ReflectUtil.getMethod( setDeletedFlagMethod = ReflectUtil.getMethod(
modelClass, "set" + StringUtils.capitalize(deletedFlagFieldName), Integer.class); modelClass, "set" + StringUtils.capitalize(deletedFlagFieldName), Integer.class);
} }
if (tenantIdFieldName == null && null != field.getAnnotation(TenantFilterColumn.class)) { if (tenantIdFieldName == null && null != field.getAnnotation(TenantFilterColumn.class)) {
tenantIdField = field; tenantIdField = field;
tenantIdFieldName = field.getName(); tenantIdFieldName = field.getName();
tenantIdColumnName = this.safeMapToColumnName(tenantIdFieldName); Column c = field.getAnnotation(Column.class);
tenantIdColumnName = c == null ? tenantIdFieldName : c.name();
} }
} }
@@ -221,6 +219,31 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
return false; return false;
} }
/**
* 基于主键Id删除数据。如果包含逻辑删除字段则进行逻辑删除。
*
* @param id 主键Id值。
* @return true删除成功false数据不存在。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removeById(K id) {
if (this.deletedFlagFieldName == null) {
return mapper().deleteByPrimaryKey(id) == 1;
}
try {
Example e = new Example(modelClass);
Example.Criteria c = e.createCriteria().andEqualTo(idFieldName, id);
c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
M data = modelClass.newInstance();
setDeletedFlagMethod.invoke(data, GlobalDeletedFlag.DELETED);
return mapper().updateByExampleSelective(data, e) == 1;
} catch (Exception ex) {
log.error("Failed to call reflection method in BaseService.removeById.", ex);
throw new MyRuntimeException(ex);
}
}
/** /**
* 根据过滤条件删除数据。 * 根据过滤条件删除数据。
* *
@@ -230,7 +253,25 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public Integer removeBy(M filter) { public Integer removeBy(M filter) {
return mapper().delete(new QueryWrapper<>(filter)); if (deletedFlagFieldName == null) {
return mapper().delete(filter);
}
Example e = new Example(modelClass);
Example.Criteria c = e.createCriteria();
Field[] fields = ReflectUtil.getFields(modelClass);
for (Field field : fields) {
if (field.getAnnotation(Transient.class) == null) {
this.assembleCriteriaByFilter(filter, field, c);
}
}
try {
M deletedObject = modelClass.newInstance();
this.setDeletedFlagMethod.invoke(deletedObject, GlobalDeletedFlag.DELETED);
return mapper().updateByExampleSelective(deletedObject, e);
} catch (Exception ex) {
log.error("Failed to call reflection method in BaseService.removeBy.", ex);
throw new MyRuntimeException(ex);
}
} }
/** /**
@@ -258,8 +299,27 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
if (fieldName.equals(this.idFieldName)) { if (fieldName.equals(this.idFieldName)) {
return this.existId((K) fieldValue); return this.existId((K) fieldValue);
} }
String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); Example e = new Example(modelClass);
return mapper().selectCount(new QueryWrapper<M>().eq(columnName, fieldValue)) == 1; e.createCriteria().andEqualTo(fieldName, fieldValue);
return mapper().selectCountByExample(e) == 1;
}
/**
* 获取主键Id关联的数据。
*
* @param id 主键Id
* @return 主键关联的数据不存在返回null。
*/
@Override
public M getById(K id) {
if (deletedFlagFieldName == null) {
return mapper().selectByPrimaryKey(id);
}
Example e = new Example(modelClass);
e.createCriteria()
.andEqualTo(idFieldName, id)
.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
return mapper().selectOneByExample(e);
} }
/** /**
@@ -275,9 +335,12 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
if (filterField.equals(idFieldName)) { if (filterField.equals(idFieldName)) {
return this.getById((K) filterValue); return this.getById((K) filterValue);
} }
String columnName = this.safeMapToColumnName(filterField); Example e = new Example(modelClass);
QueryWrapper<M> queryWrapper = new QueryWrapper<M>().eq(columnName, filterValue); Example.Criteria c = e.createCriteria().andEqualTo(filterField, filterValue);
return mapper().selectOne(queryWrapper); if (deletedFlagFieldName != null) {
c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
}
return mapper().selectOneByExample(e);
} }
/** /**
@@ -302,7 +365,12 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
*/ */
@Override @Override
public List<M> getAllList() { public List<M> getAllList() {
return mapper().selectList(Wrappers.emptyWrapper()); if (deletedFlagFieldName == null) {
return mapper().selectAll();
}
Example e = new Example(modelClass);
e.createCriteria().andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
return mapper().selectByExample(e);
} }
/** /**
@@ -313,11 +381,14 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
*/ */
@Override @Override
public List<M> getAllListByOrder(String... orderByProperties) { public List<M> getAllListByOrder(String... orderByProperties) {
String[] columns = new String[orderByProperties.length]; Example e = new Example(modelClass);
for (int i = 0; i < orderByProperties.length; i++) { for (String orderByProperty : orderByProperties) {
columns[i] = this.safeMapToColumnName(orderByProperties[i]); e.orderBy(orderByProperty);
} }
return mapper().selectList(new QueryWrapper<M>().orderByAsc(columns)); if (deletedFlagFieldName != null) {
e.and().andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
}
return mapper().selectByExample(e);
} }
/** /**
@@ -346,8 +417,8 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
if (CollectionUtils.isEmpty(inFilterValues)) { if (CollectionUtils.isEmpty(inFilterValues)) {
return true; return true;
} }
String column = this.safeMapToColumnName(inFilterField); Example e = this.makeDefaultInListExample(inFilterField, inFilterValues, null);
return mapper().selectCount(new QueryWrapper<M>().in(column, inFilterValues)) == inFilterValues.size(); return mapper().selectCountByExample(e) == inFilterValues.size();
} }
/** /**
@@ -386,12 +457,8 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
if (CollectionUtils.isEmpty(inFilterValues)) { if (CollectionUtils.isEmpty(inFilterValues)) {
return new LinkedList<>(); return new LinkedList<>();
} }
String column = this.safeMapToColumnName(inFilterField); Example e = this.makeDefaultInListExample(inFilterField, inFilterValues, orderBy);
QueryWrapper<M> queryWrapper = new QueryWrapper<M>().in(column, inFilterValues); return mapper().selectByExample(e);
if (StringUtils.isNotBlank(orderBy)) {
queryWrapper.last(orderBy);
}
return mapper().selectList(queryWrapper);
} }
/** /**
@@ -402,7 +469,16 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
*/ */
@Override @Override
public int getCountByFilter(M filter) { public int getCountByFilter(M filter) {
return mapper().selectCount(new QueryWrapper<>(filter)); if (deletedFlagFieldName == null) {
return mapper().selectCount(filter);
}
try {
setDeletedFlagMethod.invoke(filter, GlobalDeletedFlag.NORMAL);
return mapper().selectCount(filter);
} catch (Exception e) {
log.error("Failed to call reflection [setDeletedFlagMethod] in BaseService.getCountByFilter.", e);
throw new MyRuntimeException(e);
}
} }
/** /**
@@ -424,7 +500,42 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
*/ */
@Override @Override
public List<M> getListByFilter(M filter) { public List<M> getListByFilter(M filter) {
return mapper().selectList(new QueryWrapper<>(filter)); if (filter == null) {
return this.getAllList();
}
if (deletedFlagFieldName == null) {
return mapper().select(filter);
}
try {
setDeletedFlagMethod.invoke(filter, GlobalDeletedFlag.NORMAL);
return mapper().select(filter);
} catch (Exception ex) {
log.error("Failed to call reflection code of BaseService.getListByFilter.", ex);
throw new MyRuntimeException(ex);
}
}
private void assembleCriteriaByFilter(M filter, Field field, Example.Criteria c) {
int modifiers = field.getModifiers();
// transient类型的字段不能作为查询条件
int transientMask = 128;
if ((modifiers & transientMask) != 0 || Modifier.isStatic(modifiers)) {
return;
}
if (field.getName().equals(deletedFlagFieldName)) {
c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
} else {
ReflectUtil.setAccessible(field);
try {
Object o = field.get(filter);
if (o != null) {
c.andEqualTo(field.getName(), field.get(filter));
}
} catch (IllegalAccessException ex) {
log.error("Failed to call reflection code of BaseService.getListByFilter.", ex);
throw new MyRuntimeException(ex);
}
}
} }
/** /**
@@ -436,14 +547,17 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
*/ */
@Override @Override
public List<M> getListByParentId(String parentIdFieldName, K parentId) { public List<M> getListByParentId(String parentIdFieldName, K parentId) {
QueryWrapper<M> queryWrapper = new QueryWrapper<>(); Example e = new Example(modelClass);
String parentIdColumn = this.safeMapToColumnName(parentIdFieldName); Example.Criteria c = e.createCriteria();
if (parentId != null) { if (parentId != null) {
queryWrapper.eq(parentIdColumn, parentId); c.andEqualTo(parentIdFieldName, parentId);
} else { } else {
queryWrapper.isNull(parentIdColumn); c.andIsNull(parentIdFieldName);
} }
return mapper().selectList(queryWrapper); if (deletedFlagFieldName != null) {
c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
}
return mapper().selectByExample(e);
} }
/** /**
@@ -473,21 +587,32 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
*/ */
@Override @Override
public List<M> getListByCondition(List<String> selectList, M filter, String whereClause, String orderBy) { public List<M> getListByCondition(List<String> selectList, M filter, String whereClause, String orderBy) {
QueryWrapper<M> queryWrapper = new QueryWrapper<>(filter); Example e = new Example(modelClass);
Example.Criteria c = null;
if (CollectionUtils.isNotEmpty(selectList)) { if (CollectionUtils.isNotEmpty(selectList)) {
String[] columns = new String[selectList.size()]; String[] selectFields = new String[selectList.size()];
for (int i = 0; i < selectList.size(); i++) { selectList.toArray(selectFields);
columns[i] = this.safeMapToColumnName(selectList.get(i)); e.selectProperties(selectFields);
}
queryWrapper.select(columns);
}
if (StringUtils.isNotBlank(whereClause)) {
queryWrapper.apply(whereClause);
} }
if (StringUtils.isNotBlank(orderBy)) { if (StringUtils.isNotBlank(orderBy)) {
queryWrapper.last(" ORDER BY " + orderBy); e.setOrderByClause(orderBy);
} }
return mapper().selectList(queryWrapper); if (filter != null) {
c = e.createCriteria();
Field[] fields = ReflectUtil.getFields(modelClass);
for (Field field : fields) {
if (field.getAnnotation(Transient.class) == null) {
this.assembleCriteriaByFilter(filter, field, c);
}
}
}
if (StringUtils.isNotBlank(whereClause)) {
if (c == null) {
c = e.createCriteria();
}
c.andCondition(whereClause);
}
return mapper().selectByExample(e);
} }
/** /**
@@ -592,7 +717,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
* *
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。 * @param relationParam 实体对象数据组装的参数构建器。
* @param batchSize 每批集成的记录数量。小于等于时将不做分批处理。 * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。
*/ */
@Override @Override
public void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, int batchSize) { public void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, int batchSize) {
@@ -613,7 +738,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
* *
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。 * @param relationParam 实体对象数据组装的参数构建器。
* @param batchSize 每批集成的记录数量。小于等于时将不做分批处理。 * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/ */
@Override @Override
@@ -786,10 +911,9 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
continue; continue;
} }
Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
String masterIdColumn = this.safeMapToColumnName(relationStruct.masterIdField.getName()); Example e = new Example(relationStruct.relationManyToMany.relationModelClass());
Map<String, Object> filterMap = new HashMap<>(1); e.createCriteria().andEqualTo(relationStruct.masterIdField.getName(), masterIdValue);
filterMap.put(masterIdColumn, masterIdValue); List<?> manyToManyList = relationStruct.manyToManyMapper.selectByExample(e);
List<?> manyToManyList = relationStruct.manyToManyMapper.selectByMap(filterMap);
ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, manyToManyList); ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, manyToManyList);
} }
} }
@@ -1180,7 +1304,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
if (CollectionUtils.isEmpty(masterIdSet)) { if (CollectionUtils.isEmpty(masterIdSet)) {
continue; continue;
} }
BaseService<Object, Serializable> relationService = relationStruct.localService; BaseService<Object, Object> relationService = relationStruct.localService;
List<Object> relationList = List<Object> relationList =
relationService.getInList(relationStruct.relationOneToOne.slaveIdField(), masterIdSet); relationService.getInList(relationStruct.relationOneToOne.slaveIdField(), masterIdSet);
MyModelUtil.makeOneToOneRelation( MyModelUtil.makeOneToOneRelation(
@@ -1189,8 +1313,8 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
if (withDict && relationStruct.relationOneToOne.loadSlaveDict() if (withDict && relationStruct.relationOneToOne.loadSlaveDict()
&& CollectionUtils.isNotEmpty(relationList)) { && CollectionUtils.isNotEmpty(relationList)) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
BaseService<Object, Serializable> proxyTarget = BaseService<Object, Object> proxyTarget =
(BaseService<Object, Serializable>) AopTargetUtil.getTarget(relationService); (BaseService<Object, Object>) AopTargetUtil.getTarget(relationService);
// 关联常量字典 // 关联常量字典
proxyTarget.buildConstDictForDataList(relationList, ignoreFields); proxyTarget.buildConstDictForDataList(relationList, ignoreFields);
// 关联本地字典。 // 关联本地字典。
@@ -1219,14 +1343,14 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
} }
Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (id != null) { if (id != null) {
BaseService<Object, Serializable> relationService = relationStruct.localService; BaseService<Object, Object> relationService = relationStruct.localService;
Object relationObject = relationService.getOne(relationStruct.relationOneToOne.slaveIdField(), id); Object relationObject = relationService.getOne(relationStruct.relationOneToOne.slaveIdField(), id);
ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject);
// 仅仅当需要加载从表字典关联时,才去加载。 // 仅仅当需要加载从表字典关联时,才去加载。
if (withDict && relationStruct.relationOneToOne.loadSlaveDict() && relationObject != null) { if (withDict && relationStruct.relationOneToOne.loadSlaveDict() && relationObject != null) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
BaseService<Object, Serializable> proxyTarget = BaseService<Object, Object> proxyTarget =
(BaseService<Object, Serializable>) AopTargetUtil.getTarget(relationService); (BaseService<Object, Object>) AopTargetUtil.getTarget(relationService);
// 关联常量字典 // 关联常量字典
proxyTarget.buildConstDictForData(relationObject, ignoreFields); proxyTarget.buildConstDictForData(relationObject, ignoreFields);
// 关联本地字典。 // 关联本地字典。
@@ -1258,7 +1382,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
.collect(toSet()); .collect(toSet());
// 从主表集合中抽取主表关联字段的集合再以in list形式去从表中查询。 // 从主表集合中抽取主表关联字段的集合再以in list形式去从表中查询。
if (CollectionUtils.isNotEmpty(masterIdSet)) { if (CollectionUtils.isNotEmpty(masterIdSet)) {
BaseService<Object, Serializable> relationService = relationStruct.localService; BaseService<Object, Object> relationService = relationStruct.localService;
List<Object> relationList = List<Object> relationList =
relationService.getInList(relationStruct.relationOneToMany.slaveIdField(), masterIdSet); relationService.getInList(relationStruct.relationOneToMany.slaveIdField(), masterIdSet);
MyModelUtil.makeOneToManyRelation( MyModelUtil.makeOneToManyRelation(
@@ -1283,7 +1407,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
} }
Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (id != null) { if (id != null) {
BaseService<Object, Serializable> relationService = relationStruct.localService; BaseService<Object, Object> relationService = relationStruct.localService;
Set<Object> masterIdSet = new HashSet<>(1); Set<Object> masterIdSet = new HashSet<>(1);
masterIdSet.add(id); masterIdSet.add(id);
List<Object> relationObject = relationService.getInList( List<Object> relationObject = relationService.getInList(
@@ -1611,6 +1735,23 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
} }
} }
@Transactional(rollbackFor = Exception.class)
@Override
public void saveInternal(List<M> dataList, Supplier<K> idGenerator, Consumer<List<M>> batchInserter) {
if (CollectionUtils.isEmpty(dataList)) {
return;
}
dataList.stream().filter(c -> ReflectUtil.getFieldValue(c, idFieldName) == null)
.forEach(o -> ReflectUtil.setFieldValue(o, idFieldName, idGenerator.get()));
if (batchInserter != null) {
batchInserter.accept(dataList);
} else {
for (M data : dataList) {
mapper().insert(data);
}
}
}
/** /**
* 缺省实现返回null在进行一对多和多对多聚合计算时没有额外的自定义过滤条件。如有需要需子类自行实现。 * 缺省实现返回null在进行一对多和多对多聚合计算时没有额外的自定义过滤条件。如有需要需子类自行实现。
* *
@@ -1658,97 +1799,32 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
} }
/** /**
* 因为Mybatis Plus中QueryWrapper的条件方法都要求传入数据表字段名因此提供该函数将 * 通过(In-list)条件和orderBy条件构建Example对象以供后续的查询操作使用。
* Java实体对象的字段名转换为数据表字段名如果不存在会抛出异常。
* 另外在MyModelUtil.mapToColumnName有一级缓存对于查询过的对象字段都会放到缓存中
* 下次映射转换的时候,会直接从缓存获取。
* *
* @param fieldName Java实体对象的字段 * @param inFilterField 参与(In-list)过滤的Java字段。
* @return 对应的数据表字段名 * @param inFilterValues 参与(In-list)过滤的字段值集合
* @param orderBy 排序字段。
* @param <T> in 属性字段的类型。
* @return 构建后的Example对象。
*/ */
protected String safeMapToColumnName(String fieldName) { protected <T> Example makeDefaultInListExample(String inFilterField, Collection<T> inFilterValues, String orderBy) {
String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); Set<T> inFilterValueSet;
if (columnName == null) { Example e = new Example(modelClass);
throw new InvalidDataFieldException(modelClass.getSimpleName(), fieldName); if (StringUtils.isNotBlank(orderBy)) {
e.setOrderByClause(orderBy);
} }
return columnName; if (inFilterValues instanceof Set) {
} inFilterValueSet = (Set<T>) inFilterValues;
} else {
/** inFilterValueSet = new HashSet<>(inFilterValues.size());
* 因为Mybatis Plus在update的时候不能将实体对象中值为null的字段更新为null inFilterValueSet.addAll(inFilterValues);
* 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。
* 该函数会遍历实体对象中,所有不包含@Transient注解没有transient修饰符的字段如果
* 当前对象的该字段值为null则会调用UpdateWrapper的set方法将该字段赋值为null。
* 相比于其他重载方法该方法会将参数中的主键id设置到UpdateWrapper的过滤条件中。
*
* @param o 实体对象。
* @param id 实体对象的主键值。
* @return 创建后的UpdateWrapper。
*/
protected UpdateWrapper<M> createUpdateQueryForNullValue(M o, K id) {
UpdateWrapper<M> uw = createUpdateQueryForNullValue(o, modelClass);
try {
M filter = modelClass.newInstance();
this.setIdFieldMethod.invoke(filter, id);
uw.setEntity(filter);
} catch (Exception e) {
log.error("Failed to call reflection code of BaseService.createUpdateQueryForNullValue.", e);
throw new MyRuntimeException(e);
} }
return uw; Example.Criteria c = e.createCriteria();
} c.andIn(inFilterField, inFilterValueSet);
if (deletedFlagFieldName != null) {
/** c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
* 因为Mybatis Plus在update的时候不能将实体对象中值为null的字段更新为null
* 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。
* 该函数会遍历实体对象中,所有不包含@Transient注解没有transient修饰符的字段如果
* 当前对象的该字段值为null则会调用UpdateWrapper的set方法将该字段赋值为null。
*
* @param o 实体对象。
* @return 创建后的UpdateWrapper。
*/
protected UpdateWrapper<M> createUpdateQueryForNullValue(M o) {
return createUpdateQueryForNullValue(o, modelClass);
}
/**
* 因为Mybatis Plus在update的时候不能将实体对象中值为null的字段更新为null
* 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。
* 该函数会遍历实体对象中,所有不包含@Transient注解没有transient修饰符的字段如果
* 当前对象的该字段值为null则会调用UpdateWrapper的set方法将该字段赋值为null。
*
* @param o 实体对象。
* @param clazz 实体对象的class。
* @return 创建后的UpdateWrapper。
*/
public static <T> UpdateWrapper<T> createUpdateQueryForNullValue(T o, Class<T> clazz) {
UpdateWrapper<T> uw = new UpdateWrapper<>();
Field[] fields = ReflectUtil.getFields(clazz);
List<String> nullColumnList = new LinkedList<>();
for (Field field : fields) {
TableField tableField = field.getAnnotation(TableField.class);
if (tableField == null || tableField.exist()) {
int modifiers = field.getModifiers();
// transient类型的字段不能作为查询条件静态字段和逻辑删除都不考虑。
int transientMask = 128;
if ((modifiers & transientMask) == 1
|| Modifier.isStatic(modifiers)
|| field.getAnnotation(TableLogic.class) != null) {
continue;
}
// 仅当实体对象参数中当前字段值为null的时候才会赋值给UpdateWrapper。
// 以便在后续的更新中可以将这些null字段的值设置到数据库表对应的字段中。
if (ReflectUtil.getFieldValue(o, field) == null) {
nullColumnList.add(MyModelUtil.safeMapToColumnName(field.getName(), clazz));
}
}
} }
if (CollectionUtils.isNotEmpty(nullColumnList)) { return e;
for (String nullColumn : nullColumnList) {
uw.set(nullColumn, null);
}
}
return uw;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -1838,7 +1914,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
relationStruct.localService = ApplicationContextHolder.getBean( relationStruct.localService = ApplicationContextHolder.getBean(
StringUtils.uncapitalize(relationOneToOne.slaveServiceName())); StringUtils.uncapitalize(relationOneToOne.slaveServiceName()));
} else { } else {
relationStruct.localService = (BaseService<Object, Serializable>) relationStruct.localService = (BaseService<Object, Object>)
ApplicationContextHolder.getBean(relationOneToOne.slaveServiceClass()); ApplicationContextHolder.getBean(relationOneToOne.slaveServiceClass());
} }
localRelationOneToOneStructList.add(relationStruct); localRelationOneToOneStructList.add(relationStruct);
@@ -1854,7 +1930,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
relationStruct.localService = ApplicationContextHolder.getBean( relationStruct.localService = ApplicationContextHolder.getBean(
StringUtils.uncapitalize(relationOneToMany.slaveServiceName())); StringUtils.uncapitalize(relationOneToMany.slaveServiceName()));
} else { } else {
relationStruct.localService = (BaseService<Object, Serializable>) relationStruct.localService = (BaseService<Object, Object>)
ApplicationContextHolder.getBean(relationOneToMany.slaveServiceClass()); ApplicationContextHolder.getBean(relationOneToMany.slaveServiceClass());
} }
localRelationOneToManyStructList.add(relationStruct); localRelationOneToManyStructList.add(relationStruct);
@@ -1901,7 +1977,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
relationStruct.localService = relationStruct.localService =
ApplicationContextHolder.getBean(StringUtils.uncapitalize(relationDict.slaveServiceName())); ApplicationContextHolder.getBean(StringUtils.uncapitalize(relationDict.slaveServiceName()));
} else { } else {
relationStruct.localService = (BaseService<Object, Serializable>) relationStruct.localService = (BaseService<Object, Object>)
ApplicationContextHolder.getBean(relationDict.slaveServiceClass()); ApplicationContextHolder.getBean(relationDict.slaveServiceClass());
} }
localRelationDictStructList.add(relationStruct); localRelationDictStructList.add(relationStruct);
@@ -1923,7 +1999,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
relationStruct.localService = ApplicationContextHolder.getBean( relationStruct.localService = ApplicationContextHolder.getBean(
StringUtils.uncapitalize(relationOneToManyAggregation.slaveServiceName())); StringUtils.uncapitalize(relationOneToManyAggregation.slaveServiceName()));
} else { } else {
relationStruct.localService = (BaseService<Object, Serializable>) relationStruct.localService = (BaseService<Object, Object>)
ApplicationContextHolder.getBean(relationOneToManyAggregation.slaveServiceClass()); ApplicationContextHolder.getBean(relationOneToManyAggregation.slaveServiceClass());
} }
localRelationOneToManyAggrStructList.add(relationStruct); localRelationOneToManyAggrStructList.add(relationStruct);
@@ -1942,7 +2018,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
relationStruct.localService = ApplicationContextHolder.getBean( relationStruct.localService = ApplicationContextHolder.getBean(
StringUtils.uncapitalize(relationManyToManyAggregation.slaveServiceName())); StringUtils.uncapitalize(relationManyToManyAggregation.slaveServiceName()));
} else { } else {
relationStruct.localService = (BaseService<Object, Serializable>) relationStruct.localService = (BaseService<Object, Object>)
ApplicationContextHolder.getBean(relationManyToManyAggregation.slaveServiceClass()); ApplicationContextHolder.getBean(relationManyToManyAggregation.slaveServiceClass());
} }
localRelationManyToManyAggrStructList.add(relationStruct); localRelationManyToManyAggrStructList.add(relationStruct);
@@ -2335,7 +2411,7 @@ public abstract class BaseService<M, K extends Serializable> extends ServiceImpl
static class LocalRelationStruct extends RelationStruct { static class LocalRelationStruct extends RelationStruct {
private Field equalOneToOneRelationField; private Field equalOneToOneRelationField;
private BaseService<Object, Serializable> localService; private BaseService<Object, Object> localService;
private BaseDaoMapper<Object> manyToManyMapper; private BaseDaoMapper<Object> manyToManyMapper;
private Map<Object, String> dictMap; private Map<Object, String> dictMap;
private RelationDict relationDict; private RelationDict relationDict;

View File

@@ -1,6 +1,5 @@
package com.orange.demo.common.core.base.service; package com.orange.demo.common.core.base.service;
import java.io.Serializable;
import java.util.List; import java.util.List;
/** /**
@@ -11,7 +10,7 @@ import java.util.List;
* @author Jerry * @author Jerry
* @date 2020-08-08 * @date 2020-08-08
*/ */
public interface IBaseDictService<M, K extends Serializable> extends IBaseService<M, K> { public interface IBaseDictService<M, K> extends IBaseService<M, K> {
/** /**
* 重新加载数据库中所有当前表数据到系统内存。 * 重新加载数据库中所有当前表数据到系统内存。

View File

@@ -1,10 +1,10 @@
package com.orange.demo.common.core.base.service; package com.orange.demo.common.core.base.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.orange.demo.common.core.object.MyRelationParam; import com.orange.demo.common.core.object.MyRelationParam;
import java.io.Serializable;
import java.util.*; import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
/** /**
* 所有Service的接口。 * 所有Service的接口。
@@ -14,7 +14,15 @@ import java.util.*;
* @author Jerry * @author Jerry
* @date 2020-08-08 * @date 2020-08-08
*/ */
public interface IBaseService<M, K extends Serializable> extends IService<M>{ public interface IBaseService<M, K> {
/**
* 基于主键Id删除数据。如果包含逻辑删除字段则进行逻辑删除。
*
* @param id 主键Id值。
* @return true删除成功false数据不存在。
*/
boolean removeById(K id);
/** /**
* 根据过滤条件删除数据。 * 根据过滤条件删除数据。
@@ -42,6 +50,14 @@ public interface IBaseService<M, K extends Serializable> extends IService<M>{
*/ */
boolean existId(K id); boolean existId(K id);
/**
* 获取主键Id关联的数据。
*
* @param id 主键Id。
* @return 主键关联的数据不存在返回null。
*/
M getById(K id);
/** /**
* 返回符合 filterField = filterValue 条件的一条数据。 * 返回符合 filterField = filterValue 条件的一条数据。
* *
@@ -218,7 +234,7 @@ public interface IBaseService<M, K extends Serializable> extends IService<M>{
* *
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。 * @param relationParam 实体对象数据组装的参数构建器。
* @param batchSize 每批集成的记录数量。小于等于时将不做分批处理。 * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。
*/ */
void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, int batchSize); void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, int batchSize);
@@ -236,7 +252,7 @@ public interface IBaseService<M, K extends Serializable> extends IService<M>{
* *
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。 * @param relationParam 实体对象数据组装的参数构建器。
* @param batchSize 每批集成的记录数量。小于等于时将不做分批处理。 * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/ */
void buildRelationForDataList( void buildRelationForDataList(
@@ -274,4 +290,16 @@ public interface IBaseService<M, K extends Serializable> extends IService<M>{
* 仅仅在spring boot 启动后的监听器事件中调用缓存所有service的关联关系加速后续的数据绑定效率。 * 仅仅在spring boot 启动后的监听器事件中调用缓存所有service的关联关系加速后续的数据绑定效率。
*/ */
void loadLocalRelationStruct(); void loadLocalRelationStruct();
/**
* 内部使用的批量保存方法。在使用前要确保清楚该方法的实现功能。
* 该方法通常用于从表数据的批量更新,为了保证已有数据的主键不变,我们通常会在执行该方法前,根据主表的关联数据,
* 删除从表中的数据。之后在迭代参数dataList并将没有主键值的对象视为新对象该方法将为这些新对象生成主键值。
* 其他包含主键值的对象为已有对象不做任何修改。填充主键后将dataList集合中的数据批量插入到数据表。
*
* @param dataList 待操作的数据列表。
* @param idGenerator 主键值生成器方法。
* @param batchInserter 批量插入方法。
*/
void saveInternal(List<M> dataList, Supplier<K> idGenerator, Consumer<List<M>> batchInserter);
} }

View File

@@ -29,6 +29,9 @@ public class FeignConfig implements RequestInterceptor {
requestTemplate.header(TokenData.REQUEST_ATTRIBUTE_NAME, tokenData); requestTemplate.header(TokenData.REQUEST_ATTRIBUTE_NAME, tokenData);
} }
String traceId = ContextUtil.getHttpRequest().getHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID); String traceId = ContextUtil.getHttpRequest().getHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID);
if (StringUtils.isBlank(traceId)) {
traceId = (String) ContextUtil.getHttpRequest().getAttribute(ApplicationConstant.HTTP_HEADER_TRACE_ID);
}
if (StringUtils.isNotBlank(traceId)) { if (StringUtils.isNotBlank(traceId)) {
requestTemplate.header(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); requestTemplate.header(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId);
} }

View File

@@ -0,0 +1,59 @@
package com.orange.demo.common.core.constant;
import java.util.HashMap;
import java.util.Map;
/**
* App 登录的设备类型。
*
* @author Jerry
* @date 2020-08-08
*/
public final class AppDeviceType {
/**
* 移动端 (如果不考虑区分android或ios的可以使用该值)
*/
public static final int MOBILE = 0;
/**
* android
*/
public static final int ANDROID = 1;
/**
* iOS
*/
public static final int IOS = 2;
/**
* 微信公众号和小程序
*/
public static final int WEIXIN = 3;
/**
* PC WEB
*/
public static final int WEB = 4;
private static final Map<Object, String> DICT_MAP = new HashMap<>(5);
static {
DICT_MAP.put(MOBILE, "移动端");
DICT_MAP.put(ANDROID, "Android");
DICT_MAP.put(IOS, "iOS");
DICT_MAP.put(WEIXIN, "微信");
DICT_MAP.put(WEB, "PC WEB");
}
/**
* 判断参数是否为当前常量字典的合法值。
*
* @param value 待验证的参数值。
* @return 合法返回true否则false。
*/
public static boolean isValid(Integer value) {
return value != null && DICT_MAP.containsKey(value);
}
/**
* 私有构造函数,明确标识该常量类的作用。
*/
private AppDeviceType() {
}
}

View File

@@ -55,4 +55,8 @@ public class LoginUserInfo {
* 登录时间。 * 登录时间。
*/ */
private Date loginTime; private Date loginTime;
/**
* 登录设备类型。
*/
private Integer deviceType;
} }

View File

@@ -131,7 +131,7 @@ public class ResponseResult<T> {
* @return 返回创建的ResponseResult实例对象 * @return 返回创建的ResponseResult实例对象
*/ */
public static <T> ResponseResult<T> error(String errorCode, String errorMessage) { public static <T> ResponseResult<T> error(String errorCode, String errorMessage) {
return new ResponseResult<>(false, errorCode, errorMessage); return new ResponseResult<>(errorCode, errorMessage);
} }
/** /**
@@ -213,8 +213,8 @@ public class ResponseResult<T> {
} }
private ResponseResult(boolean success, String errorCode, String errorMessage) { private ResponseResult(String errorCode, String errorMessage) {
this.success = success; this.success = false;
this.errorCode = errorCode; this.errorCode = errorCode;
this.errorMessage = errorMessage; this.errorMessage = errorMessage;
} }

View File

@@ -37,6 +37,10 @@ public class TokenData {
* 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 * 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。
*/ */
private Long deptId; private Long deptId;
/**
* 用户的部门岗位Id。多个岗位之间逗号分隔。仅当系统支持岗位时有值。
*/
private String deptPostIds;
/** /**
* 租户Id。 * 租户Id。
* 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 * 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。
@@ -54,6 +58,10 @@ public class TokenData {
* 用户显示名称。 * 用户显示名称。
*/ */
private String showName; private String showName;
/**
* 设备类型。参考 AppDeviceType。
*/
private Integer deviceType;
/** /**
* 标识不同登录的会话Id。 * 标识不同登录的会话Id。
*/ */

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import com.orange.demo.common.core.constant.AppDeviceType;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.Validation; import javax.validation.Validation;
@@ -168,6 +169,24 @@ public class MyCommonUtil {
return new String[]{}; return new String[]{};
} }
/**
* 获取请求头中的设备信息。
*
* @return 设备类型具体值可参考AppDeviceType常量类。
*/
public static int getDeviceType() {
// 缺省都按照Web登录方式设置如果前端header中的值为不合法值这里也不会报错而是使用Web缺省方式。
int deviceType = AppDeviceType.WEB;
String deviceTypeString = ContextUtil.getHttpRequest().getHeader("deviceType");
if (StrUtil.isNotBlank(deviceTypeString)) {
Integer type = Integer.valueOf(deviceTypeString);
if (AppDeviceType.isValid(type)) {
deviceType = type;
}
}
return deviceType;
}
/** /**
* 私有构造函数,明确标识该常量类的作用。 * 私有构造函数,明确标识该常量类的作用。
*/ */

View File

@@ -2,19 +2,22 @@ package com.orange.demo.common.core.util;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.baomidou.mybatisplus.annotation.*;
import com.orange.demo.common.core.exception.InvalidDataFieldException; import com.orange.demo.common.core.exception.InvalidDataFieldException;
import com.orange.demo.common.core.annotation.*; import com.orange.demo.common.core.annotation.*;
import com.orange.demo.common.core.exception.MyRuntimeException; import com.orange.demo.common.core.exception.MyRuntimeException;
import com.orange.demo.common.core.object.TokenData; import com.orange.demo.common.core.object.TokenData;
import com.orange.demo.common.core.object.Tuple2; import com.orange.demo.common.core.object.Tuple2;
import com.orange.demo.common.core.upload.UploadStoreInfo; import com.orange.demo.common.core.upload.UploadStoreInfo;
import com.google.common.base.CaseFormat;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import tk.mybatis.mapper.entity.Example;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.lang.reflect.Modifier;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -204,20 +207,8 @@ public class MyModelUtil {
if (field == null) { if (field == null) {
return null; return null;
} }
TableField c = field.getAnnotation(TableField.class); Column c = field.getAnnotation(Column.class);
String columnName = null; String columnName = c == null ? fieldName : c.name();
if (c == null) {
TableId id = field.getAnnotation(TableId.class);
if (id != null) {
columnName = id.value();
}
}
if (columnName == null) {
columnName = c == null ? CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName) : c.value();
if (StringUtils.isBlank(columnName)) {
columnName = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName);
}
}
// 这里缺省情况下都是按照整型去处理,因为他覆盖太多的类型了。 // 这里缺省情况下都是按照整型去处理,因为他覆盖太多的类型了。
// 如Integer/Long/Double/BigDecimal可根据实际情况完善和扩充。 // 如Integer/Long/Double/BigDecimal可根据实际情况完善和扩充。
String typeName = field.getType().getSimpleName(); String typeName = field.getType().getSimpleName();
@@ -240,8 +231,8 @@ public class MyModelUtil {
* @return Model对象对应的数据表名称。 * @return Model对象对应的数据表名称。
*/ */
public static String mapToTableName(Class<?> modelClazz) { public static String mapToTableName(Class<?> modelClazz) {
TableName t = modelClazz.getAnnotation(TableName.class); Table t = modelClazz.getAnnotation(Table.class);
return t == null ? null : t.value(); return t == null ? null : t.name();
} }
/** /**
@@ -614,6 +605,43 @@ public class MyModelUtil {
return isMap ? BeanUtil.beanToMap(model) : model; return isMap ? BeanUtil.beanToMap(model) : model;
} }
/**
* 转换过滤对象到与其等效的Example对象。
*
* @param filterModel 过滤对象。
* @param modelClass 过滤对象的Class对象。
* @param <T> 过滤对象类型。
* @return 转换后的Example对象。
*/
public static <T> Example convertFilterModelToExample(T filterModel, Class<T> modelClass) {
if (filterModel == null) {
return null;
}
Example e = new Example(modelClass);
Example.Criteria c = e.createCriteria();
Field[] fields = ReflectUtil.getFields(modelClass);
for (Field field : fields) {
if (field.getAnnotation(Transient.class) == null) {
int modifiers = field.getModifiers();
// transient类型的字段不能作为查询条件
if ((modifiers & 128) != 0 || Modifier.isStatic(modifiers)) {
continue;
}
ReflectUtil.setAccessible(field);
try {
Object o = field.get(filterModel);
if (o != null) {
c.andEqualTo(field.getName(), field.get(filterModel));
}
} catch (IllegalAccessException ex) {
log.error("Failed to call reflection code.", ex);
throw new MyRuntimeException(ex);
}
}
}
return e;
}
/** /**
* 获取上传字段的存储信息。 * 获取上传字段的存储信息。
* *

View File

@@ -27,6 +27,17 @@ public class RedisKeyUtil {
return "SESSIONID__" + loginName + "_"; return "SESSIONID__" + loginName + "_";
} }
/**
* 获取指定用户Id和登录设备类型的session缓存的键前缀。
*
* @param loginName 指定的用户登录名。
* @param deviceType 设备类型。
* @return session缓存的键前缀。
*/
public static String getSessionIdPrefix(String loginName, int deviceType) {
return "SESSIONID__" + loginName + "_" + deviceType + "_";
}
/** /**
* 计算SessionId返回存储于Redis中的键。 * 计算SessionId返回存储于Redis中的键。
* *

View File

@@ -64,20 +64,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -65,20 +65,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -82,20 +82,23 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" /> <orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.14.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.5" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" /> <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" /> <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />

View File

@@ -40,7 +40,8 @@
<!-- 数据库工具版本 --> <!-- 数据库工具版本 -->
<druid.version>1.2.6</druid.version> <druid.version>1.2.6</druid.version>
<mybatisplus.version>3.4.2</mybatisplus.version> <mybatis-mapper.version>2.1.5</mybatis-mapper.version>
<mybatis-generator.version>1.3.7</mybatis-generator.version>
<pagehelper.version>1.3.0</pagehelper.version> <pagehelper.version>1.3.0</pagehelper.version>
<redisson.version>3.15.4</redisson.version> <redisson.version>3.15.4</redisson.version>
<qdox.version>2.0.0</qdox.version> <qdox.version>2.0.0</qdox.version>

View File

@@ -25,13 +25,15 @@ sequence:
# zk中生成WorkNode的路径。不同的业务可以使用不同的路径以免冲突。 # zk中生成WorkNode的路径。不同的业务可以使用不同的路径以免冲突。
zkPath: com/orange/demo zkPath: com/orange/demo
mybatis-plus: # mybatis的基本配置
mapper-locations: classpath:com/orange/demo/*/dao/mapper/*Mapper.xml mybatis:
type-aliases-package: com.orange.demo.*.model mapperLocations: classpath:com/orange/demo/*/dao/mapper/*Mapper.xml
global-config: typeAliasesPackage: com.orange.demo.*.model
db-config:
logic-delete-value: -1 mapper:
logic-not-delete-value: 1 mappers: tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.additional.insert.InsertListMapper
not-empty: false
identity: MYSQL
pagehelper: pagehelper:
helperDialect: mysql helperDialect: mysql

View File

@@ -25,13 +25,15 @@ sequence:
# zk中生成WorkNode的路径。不同的业务可以使用不同的路径以免冲突。 # zk中生成WorkNode的路径。不同的业务可以使用不同的路径以免冲突。
zkPath: com/orange/demo zkPath: com/orange/demo
mybatis-plus: # mybatis的基本配置
mapper-locations: classpath:com/orange/demo/*/dao/mapper/*Mapper.xml mybatis:
type-aliases-package: com.orange.demo.*.model mapperLocations: classpath:com/orange/demo/*/dao/mapper/*Mapper.xml
global-config: typeAliasesPackage: com.orange.demo.*.model
db-config:
logic-delete-value: -1 mapper:
logic-not-delete-value: 1 mappers: tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.additional.insert.InsertListMapper
not-empty: false
identity: MYSQL
pagehelper: pagehelper:
helperDialect: mysql helperDialect: mysql

View File

@@ -27,13 +27,14 @@ sequence:
# zk中生成WorkNode的路径。不同的业务可以使用不同的路径以免冲突。 # zk中生成WorkNode的路径。不同的业务可以使用不同的路径以免冲突。
zkPath: com/orange/demo zkPath: com/orange/demo
mybatis-plus: mybatis:
mapper-locations: classpath:com/orange/demo/*/dao/mapper/*Mapper.xml,com/orange/demo/common/datasync/dao/mapper/*Mapper.xml,com/orange/demo/common/log/dao/mapper/*Mapper.xml mapperLocations: classpath:com/orange/demo/*/dao/mapper/*Mapper.xml,com/orange/demo/common/datasync/dao/mapper/*Mapper.xml,com/orange/demo/common/log/dao/mapper/*Mapper.xml
type-aliases-package: com.orange.demo.*.model,com.orange.demo.common.datasync.model,com.orange.demo.common.log.model typeAliasesPackage: com.orange.demo.*.model,com.orange.demo.common.datasync.model,com.orange.demo.common.log.model
global-config:
db-config: mapper:
logic-delete-value: -1 mappers: tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.additional.insert.InsertListMapper
logic-not-delete-value: 1 not-empty: false
identity: MYSQL
pagehelper: pagehelper:
helperDialect: mysql helperDialect: mysql

View File

@@ -0,0 +1,110 @@
PINPOINT_VERSION=2.0.1
SPRING_PROFILES=release
### Pinpoint-Hbase
PINPOINT_HBASE_NAME=pinpoint-hbase
#config for hbase in external docker
EXTERNAL_HBASE_PORT=2180
### Pinpoint-mysql
MYSQL_ROOT_PASSWORD=root123
MYSQL_USER=admin
MYSQL_PASSWORD=admin
MYSQL_DATABASE=pinpoint
### Pinpoint-Web
PINPOINT_WEB_NAME=pinpoint-web
WEB_PAGE_PORT=8079
CLUSTER_ENABLE=true
#CLUSTER_WEB_TCP_PORT=9997
CLUSTER_ZOOKEEPER_ADDRESS=zoo1
ADMIN_PASSWORD=admin
ANALYTICS=true
HBASE_HOST=pinpoint-hbase
HBASE_PORT=2181
WEB_DEBUG_LEVEL=INFO
BATCH_ENABLE=false
BATCH_SERVER_IP=127.0.0.127
BATCH_FLINK_SERVER=pinpoint-flink-jobmanager
CONFIG_SHOW_APPLICATIONSTAT=true
JDBC_DRIVER=com.mysql.jdbc.Driver
JDBC_URL=jdbc:mysql://pinpoint-mysql:3306/pinpoint?characterEncoding=UTF-8
JDBC_USERNAME=admin
JDBC_PASSWORD=admin
MAIL_HOST=stmp.test.com
MAIL_PORT=123
MAIL_USERNAME=user
MAIL_PASSWORD=pass
MAIL_PROPERTIES_MAIL_TRANSPORT_PROTOCOL=smtp
MAIL_PROPERTIES_MAIL_SMTP_AUTH=true
MAIL_PROPERTIES_MAIL_SMTP_PORT=587
MAIL_PROPERTIES_MAIL_SMTP_FROM=test@example.com
MAIL_PROPERTIES_MAIL_STARTTLS_ENABLE=true
MAIL_PROPERTIES_MAIL_STARTTLS_REQUIRED=true
MAIL_PROPERTIES_MAIL_DEBUG=false
### Pinpoint-Collector
PINPOINT_COLLECTOR_NAME=pinpoint-collector
COLLECTOR_RECEIVER_AGENT_PORT=9991
COLLECTOR_RECEIVER_METADATA_PORT=9991
COLLECTOR_RECEIVER_STAT_PORT=9992
COLLECTOR_RECEIVER_SPAN_PORT=9993
COLLECTOR_RECEIVER_BASE_PORT=9994
COLLECTOR_RECEIVER_STAT_UDP_PORT=9995
COLLECTOR_RECEIVER_SPAN_UDP_PORT=9996
FLINK_CLUSTER_ENABLE=true
FLINK_CLUSTER_ZOOKEEPER_ADDRESS=zoo1
COLLECTOR_DEBUG_LEVEL=INFO
### Pinpoint-Agent
PINPOINT_AGENT_NAME=pinpoint-agent
#network module(GRPC,THRIFT)
PROFILER_TRANSPORT_MODULE=GRPC
#collector information required
COLLECTOR_IP=pinpoint-collector
PROFILER_TRANSPORT_AGENT_COLLECTOR_PORT=9991
PROFILER_TRANSPORT_METADATA_COLLECTOR_PORT=9991
PROFILER_TRANSPORT_STAT_COLLECTOR_PORT=9992
PROFILER_TRANSPORT_SPAN_COLLECTOR_PORT=9993
COLLECTOR_TCP_PORT=9994
COLLECTOR_STAT_PORT=9995
COLLECTOR_SPAN_PORT=9996
# Set sampling rate. If you set it to N, 1 out of N transaction will be sampled.
PROFILER_SAMPLING_RATE=1
AGENT_ID=app-in-docker
APP_NAME=quickapp
AGENT_DEBUG_LEVEL=INFO
### Pinpoint-flink
PINPOINT_FLINK_NAME=pinpoint-flink
FLINK_WEB_PORT=8099
### Pinpoint-quickstart
APP_PORT=8000

View File

@@ -0,0 +1 @@
.idea/

Some files were not shown because too many files have changed in this diff Show More