diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/ExternalAppFormDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/ExternalAppFormDTO.java
index 00b99a500e..8a1b6713c0 100644
--- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/ExternalAppFormDTO.java
+++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/ExternalAppFormDTO.java
@@ -20,6 +20,15 @@ public class ExternalAppFormDTO {
     @NotBlank(message = "缺少所属客户ID", groups = { AddExternalApp.class, UpdateExternalApp.class })
     private String customerId;
 
+    /**
+     * 客户类型
+     * external:外部
+     * internal:内部
+     */
+    @NotBlank(message = "缺少客户类型", groups = { AddExternalApp.class, UpdateExternalApp.class })
+    private String customerType;
+
+
     private Integer pageNo = 1;
     private Integer pageSize = 10;
 
diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/ExternalAppResultDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/ExternalAppResultDTO.java
index e4cf3fedb6..93fba80fa2 100644
--- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/ExternalAppResultDTO.java
+++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/ExternalAppResultDTO.java
@@ -21,6 +21,10 @@ public class ExternalAppResultDTO {
      */
     private String customerName;
 
+    private String customerType;
+
+    private String customerTypeName;
+
     /**
      * 秘钥
      */
diff --git a/epmet-module/epmet-common-service/common-service-server/pom.xml b/epmet-module/epmet-common-service/common-service-server/pom.xml
index 3988353e35..a81498d9a8 100644
--- a/epmet-module/epmet-common-service/common-service-server/pom.xml
+++ b/epmet-module/epmet-common-service/common-service-server/pom.xml
@@ -64,6 +64,12 @@
             jjwt
             0.7.0
         
+
+        
+            com.epmet
+            oper-crm-client
+            2.0.0
+        
     
 
     
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ExternalAppController.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ExternalAppController.java
index c272d83675..ffab33bbbe 100644
--- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ExternalAppController.java
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/ExternalAppController.java
@@ -66,8 +66,9 @@ public class ExternalAppController {
 
         String appName = formDTO.getAppName();
         String customerId = formDTO.getCustomerId();
+        String customerType = formDTO.getCustomerType();
 
-        ExternalAppResultDTO dto = externalAppService.add(appName, customerId);
+        ExternalAppResultDTO dto = externalAppService.add(appName, customerId, customerType);
         return new Result().ok(dto);
     }
 
@@ -84,8 +85,9 @@ public class ExternalAppController {
         String appId = formDTO.getAppId();
         String appName = formDTO.getAppName();
         String customerId = formDTO.getCustomerId();
+        String customerType = formDTO.getCustomerType();
 
-        ExternalAppResultDTO dto = externalAppService.updateById(appId, appName, customerId);
+        ExternalAppResultDTO dto = externalAppService.updateById(appId, appName, customerId, customerType);
         return new Result().ok(dto);
     }
 
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/entity/ExternalAppEntity.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/entity/ExternalAppEntity.java
index e4a4056108..421e9712f5 100644
--- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/entity/ExternalAppEntity.java
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/entity/ExternalAppEntity.java
@@ -48,4 +48,6 @@ public class ExternalAppEntity extends BaseEpmetEntity {
 	 */
 	private String customerId;
 
+	private String customerType;
+
 }
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/enu/CustomerTypeEnum.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/enu/CustomerTypeEnum.java
new file mode 100644
index 0000000000..c8ecc22dab
--- /dev/null
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/enu/CustomerTypeEnum.java
@@ -0,0 +1,41 @@
+package com.epmet.enu;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 客户类型枚举
+ */
+public enum CustomerTypeEnum {
+
+    INTERNAL("internal", "内部客户"),
+    EXTERNAL("external", "外部客户"),
+    UN_KNOW("unknow", "未知类型");
+
+    private String type;
+    private String name;
+
+    CustomerTypeEnum(String type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    public static String getName(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        for (CustomerTypeEnum value : CustomerTypeEnum.values()) {
+            if (value.type.equals(type)) {
+                return value.name;
+            }
+        }
+        return UN_KNOW.name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ExternalAppService.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ExternalAppService.java
index a2352ec41e..4d5d847e68 100644
--- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ExternalAppService.java
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/ExternalAppService.java
@@ -29,9 +29,9 @@ import java.util.List;
  * @since v1.0.0 2020-08-18
  */
 public interface ExternalAppService {
-    ExternalAppResultDTO add(String appName, String customerId);
+    ExternalAppResultDTO add(String appName, String customerId, String customerType);
 
-    ExternalAppResultDTO updateById(String appId, String appName, String customerId);
+    ExternalAppResultDTO updateById(String appId, String appName, String customerId, String customerType);
 
     PageData listPage(Integer pageNo, Integer pageSize, String customerId);
 
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ExternalAppServiceImpl.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ExternalAppServiceImpl.java
index c6b106c1a5..db3267c600 100644
--- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ExternalAppServiceImpl.java
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ExternalAppServiceImpl.java
@@ -20,15 +20,23 @@ package com.epmet.service.impl;
 import com.epmet.commons.tools.exception.EpmetErrorCode;
 import com.epmet.commons.tools.exception.RenException;
 import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.redis.RedisKeys;
+import com.epmet.commons.tools.redis.RedisUtils;
+import com.epmet.commons.tools.utils.Result;
 import com.epmet.dao.ExternalAppDao;
 import com.epmet.dao.ExternalAppSecretDao;
 import com.epmet.dao.ExternalCustomerDao;
+import com.epmet.dto.CustomerDTO;
 import com.epmet.dto.result.ExternalAppResultDTO;
 import com.epmet.entity.ExternalAppEntity;
 import com.epmet.entity.ExternalAppSecretEntity;
+import com.epmet.enu.CustomerTypeEnum;
+import com.epmet.feign.OperCrmOpenFeignClient;
 import com.epmet.service.ExternalAppService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -45,6 +53,8 @@ import java.util.UUID;
 @Service
 public class ExternalAppServiceImpl implements ExternalAppService {
 
+    private static Logger logger = LoggerFactory.getLogger(ExternalAppServiceImpl.class);
+
     @Autowired
     private ExternalAppDao externalAppDao;
 
@@ -54,24 +64,42 @@ public class ExternalAppServiceImpl implements ExternalAppService {
     @Autowired
     private ExternalCustomerDao externalCustomerDao;
 
+    @Autowired
+    private OperCrmOpenFeignClient operCrmOpenFeignClient;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
     @Transactional
     @Override
-    public ExternalAppResultDTO add(String appName, String customerId) {
+    public ExternalAppResultDTO add(String appName, String customerId, String customerType) {
         Integer count = externalAppDao.countByAppNameAndCustomerId(appName, customerId);
         if (count > 0) {
             throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_EXISTS.getCode(),
                     EpmetErrorCode.OPER_EXTERNAL_APP_EXISTS.getMsg());
         }
 
-        if (externalCustomerDao.selectById(customerId) == null) {
+        if (CustomerTypeEnum.EXTERNAL.getType().equals(customerType) && externalCustomerDao.selectById(customerId) == null) {
             throw new RenException(EpmetErrorCode.OPER_EXTERNAL_CUSTOMER_NOT_EXISTS.getCode(),
                     EpmetErrorCode.OPER_EXTERNAL_CUSTOMER_NOT_EXISTS.getMsg());
         }
 
+        if (CustomerTypeEnum.INTERNAL.getType().equals(customerType)) {
+            CustomerDTO form = new CustomerDTO();
+            form.setId(customerId);
+            Result customerInfoRst = operCrmOpenFeignClient.getCustomerInfo(form);
+            if (customerInfoRst.success() && customerInfoRst.getData() == null) {
+                throw new RenException(EpmetErrorCode.OPER_EXTERNAL_CUSTOMER_NOT_EXISTS.getCode(),
+                        EpmetErrorCode.OPER_EXTERNAL_CUSTOMER_NOT_EXISTS.getMsg());
+            }
+
+        }
+
         // 应用表插入
         ExternalAppEntity appEntity = new ExternalAppEntity();
         appEntity.setAppName(appName);
         appEntity.setCustomerId(customerId);
+        appEntity.setCustomerType(customerType);
         externalAppDao.insert(appEntity);
 
         // 秘钥表插入
@@ -98,7 +126,7 @@ public class ExternalAppServiceImpl implements ExternalAppService {
     }
 
     @Override
-    public ExternalAppResultDTO updateById(String appId, String appName, String customerId) {
+    public ExternalAppResultDTO updateById(String appId, String appName, String customerId, String customerType) {
         ExternalAppEntity exists = externalAppDao.selectById(appId);
         if (exists == null) {
             throw new RenException(EpmetErrorCode.OPER_EXTERNAL_CUSTOMER_NOT_EXISTS.getCode(),
@@ -113,6 +141,7 @@ public class ExternalAppServiceImpl implements ExternalAppService {
 
         exists.setAppName(appName);
         exists.setCustomerId(customerId);
+        exists.setCustomerType(customerType);
         externalAppDao.updateById(exists);
 
         ExternalAppResultDTO resultDTO = new ExternalAppResultDTO();
@@ -126,6 +155,26 @@ public class ExternalAppServiceImpl implements ExternalAppService {
     public PageData listPage(Integer pageNo, Integer pageSize, String customerId) {
         PageHelper.startPage(pageNo, pageSize);
         List list = externalAppDao.list(customerId);
+        for (ExternalAppResultDTO app : list) {
+            // 设置客户类型中文
+            app.setCustomerTypeName(CustomerTypeEnum.getName(app.getCustomerType()));
+
+            if (CustomerTypeEnum.INTERNAL.getType().equals(app.getCustomerType())) {
+                // 如果是内部客户,那么需要去oper_crm库查询客户信息
+                CustomerDTO form = new CustomerDTO();
+                form.setId(app.getCustomerId());
+                Result customerInfoRst = operCrmOpenFeignClient.getCustomerInfo(form);
+                if (! customerInfoRst.success()) {
+                    logger.error("common service->ExternalAppServiceImpl#listPage查询内部客户失败:{}", customerInfoRst.getInternalMsg());
+                    continue;
+                }
+                // 设置客户名称
+                CustomerDTO customerInfo = customerInfoRst.getData();
+                if (customerInfo != null) {
+                    app.setCustomerName(customerInfo.getCustomerName());
+                }
+            }
+        }
         PageInfo pageInfo = new PageInfo<>(list);
         return new PageData<>(list, pageInfo.getTotal());
     }
@@ -140,8 +189,11 @@ public class ExternalAppServiceImpl implements ExternalAppService {
     public String resetSecret(String appId) {
         String secret = genSecret();
         if (externalAppSecretDao.updateSecret(appId, secret) > 0) {
+            // 删除外部应用的秘钥缓存,再次使用的时候将主动加载入缓存
+            redisUtils.delete(RedisKeys.getExternalAppSecretKey(appId));
             return secret;
         }
+
         return null;
     }
 
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.4__add_extcustomer_type.sql b/epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.4__add_extcustomer_type.sql
new file mode 100644
index 0000000000..fb82b44bcd
--- /dev/null
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.4__add_extcustomer_type.sql
@@ -0,0 +1 @@
+alter table external_app add column CUSTOMER_TYPE varchar(20) not null after CUSTOMER_ID;
\ No newline at end of file
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppDao.xml b/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppDao.xml
index 62d5823a96..8ce99b1a67 100644
--- a/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppDao.xml
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppDao.xml
@@ -7,6 +7,7 @@
         
         
         
+        
         
         
         
@@ -33,10 +34,11 @@
         ea.APP_NAME,
         ea.CUSTOMER_ID,
         ec.CUSTOMER_NAME ,
+        ea.CUSTOMER_TYPE,
         eas.SECRET
         FROM
         external_app ea
-        INNER JOIN external_customer ec ON ( ea.CUSTOMER_ID = ec.ID )
+        LEFT JOIN external_customer ec ON ( ea.CUSTOMER_ID = ec.ID )
         LEFT JOIN external_app_secret eas ON (ea.ID = eas.APP_ID)
         
             ea.DEL_FLAG = 0
diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppSecretDao.xml b/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppSecretDao.xml
index 995dbd0270..a192df36b1 100644
--- a/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppSecretDao.xml
+++ b/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppSecretDao.xml
@@ -19,7 +19,7 @@
     
         update external_app_secret
         set SECRET=#{secret}
-        where ID = #{appId}
+        where APP_ID = #{appId}