diff --git a/build.gradle b/build.gradle
index b11247b..a6a32e0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,7 +9,7 @@
 apply plugin: 'io.spring.dependency-management'
 
 group = 'com.supwisdom'
-version = payapiVersion
+version = waterManagerVersion
 sourceCompatibility = jdkVersion
 
 repositories {
@@ -18,7 +18,7 @@
 
 war {
     manifest {
-        attributes('Payapi-Version': rootProject.version)
+        attributes('WaterManager-Version': rootProject.version)
         writeTo(project.buildDir.toString() + "/classes/MATE-INF.MF")
     }
 }
@@ -28,8 +28,6 @@
     implementation 'org.springframework.boot:spring-boot-starter-data-redis'
     implementation 'org.springframework.boot:spring-boot-starter-web'
     implementation 'org.springframework.boot:spring-boot-starter-security'
-    implementation 'org.springframework.security:spring-security-oauth2-client'
-    implementation 'org.springframework.security:spring-security-oauth2-jose'
     implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.1.RELEASE'
 //    implementation 'org.springframework.security.oauth:spring-security-oauth2'
     implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
@@ -55,7 +53,6 @@
     implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
     implementation group: 'taglibs', name: 'standard', version: '1.1.2'
     implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
-    implementation 'org.flywaydb:flyway-core'
     implementation files('libs/ojdbc6.jar')
 
 
diff --git a/config/application-devel-oracle.properties b/config/application-devel-oracle.properties
index d1fe9ba..06303ad 100644
--- a/config/application-devel-oracle.properties
+++ b/config/application-devel-oracle.properties
@@ -6,7 +6,7 @@
 # Oracle settings
 spring.datasource.platform=oracle
 spring.datasource.url=jdbc:oracle:thin:@172.28.201.101:47922:orcl
-spring.datasource.username=dlpay
+spring.datasource.username=water
 spring.datasource.password=kingstar
 spring.datasource.driver-class-oracle.jdbc.driver.OracleDriver
 
diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties
index b6561aa..65c5880 100644
--- a/config/application-devel-pg-local.properties
+++ b/config/application-devel-pg-local.properties
@@ -5,8 +5,8 @@
 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
 # Postgresql settings
 spring.datasource.platform=postgresql
-spring.datasource.url=jdbc:postgresql://localhost:5432/payapi
-spring.datasource.username=payapi
+spring.datasource.url=jdbc:postgresql://localhost:5432/watermanager
+spring.datasource.username=watermanager
 spring.datasource.password=123456
 database.dbtype=postgresql
 # Redis settings
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 5bbedd3..fe41dd4 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -5,8 +5,8 @@
 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
 # Postgresql settings
 spring.datasource.platform=postgresql
-spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/payapi
-spring.datasource.username=payapi
+spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/watermanager
+spring.datasource.username=watermanager
 spring.datasource.password=123456
 database.dbtype=postgresql
 # Redis settings
diff --git a/gradle.properties b/gradle.properties
index f72e65c..9d1aa55 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
 springbootVersion = 2.1.3.RELEASE
 kotlinVersion = 1.3.31
-payapiVersion = 1.0
+waterManagerVersion = 1.0
 jdkVersion = 1.8
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index ec967da..a10a9fb 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -16,5 +16,5 @@
         gradlePluginPortal()
     }
 }
-rootProject.name = 'payapi'
+rootProject.name = 'watermanager'
 
diff --git a/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt b/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt
index b03a1dc..44be3ce 100644
--- a/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt
+++ b/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt
@@ -6,7 +6,7 @@
 class ServletInitializer : SpringBootServletInitializer() {
 
 	override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
-		return application.sources(PayApiApplication::class.java)
+		return application.sources(WaterManagerApplication::class.java)
 	}
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
deleted file mode 100644
index 785ef41..0000000
--- a/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.supwisdom.dlpay.framework.core;
-
-import com.supwisdom.dlpay.framework.domain.TSettleLog;
-import com.supwisdom.dlpay.framework.domain.TTaskLock;
-import com.supwisdom.dlpay.framework.service.DayendSettleService;
-import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.util.StringUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-@Component
-public class DayendSettleTask {
-  @Autowired
-  private SystemUtilService systemUtilService;
-  @Autowired
-  private DayendSettleService dayendSettleService;
-
-  private TSettleLog settleLog;
-
-  private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
-
-//  @Scheduled(cron="0 3/30 2-3 * * ? ")
-  @Scheduled(cron="0 0/2 * * * ? ")
-  public void doSettleTask() {
-    if (logger.isDebugEnabled()) logger.debug("进入日结算任务！");
-
-    TTaskLock lock = null;
-    try {
-      try {
-        lock = systemUtilService.doLockTask("DAYENDSETTLETASK", 30, "日终结算");
-        if (lock == null) {
-          if (logger.isDebugEnabled()) logger.debug("日终结算正在其他服务器上执行");
-          return;
-        }
-      } catch (Exception e) {
-        return;
-      }
-
-      settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
-
-      //step1: 账户校验(fixme: 清算任务？)
-      long t1 = System.currentTimeMillis();
-      if (!checkAccounts()) {
-        logger.error("账户余额校验出错，退出结算！");
-        return;
-      }
-      long t2 = System.currentTimeMillis();
-      logger.info("===== step1: 日终结算【账户校验】耗时 " + (t2 - t1) + " ms");
-
-      //step2: 对账判断(fixme: 清算任务？)
-      long t3 = System.currentTimeMillis();
-      if (!checkChkfiles()) {
-        logger.error("对账未完成，退出结算！");
-        return;
-      }
-      long t4 = System.currentTimeMillis();
-      logger.info("===== step2: 日终结算【对账判断】耗时 " + (t4 - t3) + " ms");
-
-      //step3: 日结
-      long t5 = System.currentTimeMillis();
-      if (!doSettleProcess()) {
-        logger.error("日结出错：" + settleLog.getErrmsg());
-        return;
-      }
-      long t6 = System.currentTimeMillis();
-      logger.info("===== step3: 日终结算【日结】耗时 " + (t6 - t5) + " ms");
-
-
-    } catch (Exception e) {
-      logger.error("日终结算报错：" + (!StringUtil.isEmpty(e.getMessage()) ? e.getMessage() : e.getClass().getName()));
-      e.printStackTrace();
-    } finally {
-      if (null != lock) {
-        lock.setTaskstatus(0);
-        lock.setTasktime(systemUtilService.getSysdatetime().getHostdatetime());
-        systemUtilService.updateTaskLock(lock);
-      }
-    }
-  }
-
-  private boolean checkAccounts() {
-    //TODO: 账户余额校验，生成账户日结表数据
-    return true;
-  }
-
-  private boolean checkChkfiles() {
-    //TODO: 结算前是否要求所有对账完成
-    return true;
-  }
-
-  private boolean doSettleProcess() {
-    try {
-      boolean ret = dayendSettleService.doDayendSettle();
-      if (ret) {
-        dayendSettleService.doUpdateSettleLog(settleLog.update("0", "成功结算"));
-      }
-      return ret;
-    } catch (Exception e) {
-      if (!StringUtil.isEmpty(e.getMessage())) {
-        dayendSettleService.doUpdateSettleLog(settleLog.update("-9", e.getMessage()));
-      } else {
-        e.printStackTrace();
-        dayendSettleService.doUpdateSettleLog(settleLog.update("-8", e.getClass().getName()));
-      }
-      return false;
-    }
-  }
-}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt
similarity index 94%
rename from src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
rename to src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt
index 6810f89..73c71d8 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay
 
-import com.fasterxml.jackson.databind.ser.std.StringSerializer
 import io.lettuce.core.ReadFrom
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.boot.autoconfigure.SpringBootApplication
@@ -68,8 +67,8 @@
 
 @SpringBootApplication
 @EnableScheduling
-class PayApiApplication
+class WaterManagerApplication
 
 fun main(args: Array<String>) {
-    runApplication<PayApiApplication>(*args)
+    runApplication<WaterManagerApplication>(*args)
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/migration.kt b/src/main/kotlin/com/supwisdom/dlpay/migration.kt
deleted file mode 100644
index c9fe298..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/migration.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.supwisdom.dlpay
-
-import org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer
-import org.flywaydb.core.Flyway
-import org.springframework.context.annotation.Bean
-import org.springframework.context.annotation.Configuration
-import org.springframework.context.annotation.DependsOn
-
-
-@Configuration
-class MigrationConfiguration {
-
-    /**
-     * Override default flyway initializer to do nothing
-     */
-    @Bean
-    fun flywayInitializer(flyway: Flyway): FlywayMigrationInitializer {
-        return FlywayMigrationInitializer(flyway) { }
-    }
-
-
-    /**
-     * Create a second flyway initializer to run after jpa has created the schema
-     */
-    @Bean
-    @DependsOn("entityManagerFactory")
-    fun delayedFlywayInitializer(flyway: Flyway): FlywayMigrationInitializer {
-        return FlywayMigrationInitializer(flyway, null)
-    }
-
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/oauth.kt b/src/main/kotlin/com/supwisdom/dlpay/oauth.kt
deleted file mode 100644
index 6f310a5..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/oauth.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.supwisdom.dlpay
-
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.context.annotation.Configuration
-import org.springframework.data.redis.connection.RedisConnectionFactory
-import org.springframework.security.authentication.AuthenticationManager
-import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer
-import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter
-import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer
-import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer
-import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter
-import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer
-import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer
-import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer
-import org.springframework.security.oauth2.provider.ClientDetails
-import org.springframework.security.oauth2.provider.ClientDetailsService
-import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore
-
-
-class OAuthDetailService : ClientDetailsService {
-
-    override fun loadClientByClientId(clientId: String?): ClientDetails {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-}
-
-@Configuration
-class OAuth2Config {
-    @Configuration
-    @EnableResourceServer
-    class ResourceServerConfiguration : ResourceServerConfigurerAdapter() {
-        override fun configure(resources: ResourceServerSecurityConfigurer?) {
-            resources?.resourceId("payapi")?.stateless(true)
-        }
-    }
-
-    @Configuration
-    @EnableAuthorizationServer
-    class AuthorizationServerConfigure : AuthorizationServerConfigurerAdapter() {
-
-        @Autowired
-        private lateinit var redisConnectionFactory: RedisConnectionFactory
-
-        @Autowired
-        private lateinit var authenticationManager: AuthenticationManager
-
-        override fun configure(security: AuthorizationServerSecurityConfigurer?) {
-            security?.allowFormAuthenticationForClients()
-        }
-
-        override fun configure(clients: ClientDetailsServiceConfigurer?) {
-            clients?.withClientDetails(OAuthDetailService())
-        }
-
-        override fun configure(endpoints: AuthorizationServerEndpointsConfigurer?) {
-            endpoints?.tokenStore(RedisTokenStore(redisConnectionFactory))
-                    ?.authenticationManager(authenticationManager)
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.1__init_paytype.sql b/src/main/resources/db/migration/V1.1__init_paytype.sql
deleted file mode 100644
index 0dfd06c..0000000
--- a/src/main/resources/db/migration/V1.1__init_paytype.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- 支付方式
-Insert into TB_PAYTYPE (PAYTYPE,DPS_ENABLE,ENABLE,REVERSE_ENABLE) values ('yktpay','no','yes','yes');
-
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appid',null,'100005');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse');
