Forráskód Böngészése

Merge remote-tracking branch 'origin/门店-获取TUC仿石漆服务商人员25818' into 登录权限部分调整

# Conflicts:
#	suishenbang-system/src/main/java/com/dgtly/system/domain/SysUser.java
zxfqwert 3 hónapja
szülő
commit
98ca7f75e2
23 módosított fájl, 1372 hozzáadás és 143 törlés
  1. 4 1
      suishenbang-admin/src/main/resources/application-prod.yml
  2. 10 0
      suishenbang-admin/src/main/resources/application-uat.yml
  3. 11 1
      suishenbang-api/src/main/resources/application-prod.yml
  4. 11 1
      suishenbang-api/src/main/resources/application-uat.yml
  5. 110 11
      suishenbang-common/src/main/java/com/dgtly/common/utils/http/HttpUtils.java
  6. 15 0
      suishenbang-quartz/src/main/java/com/dgtly/quartz/task/RyTask.java
  7. 156 20
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java
  8. 335 0
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/ShopUserTypeComponent.java
  9. 1 1
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/utils/CustomerAccessTokenUtil.java
  10. 10 9
      suishenbang-system/src/main/java/com/dgtly/system/domain/SysUser.java
  11. 31 7
      suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserExt.java
  12. 176 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserShopExt.java
  13. 13 11
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysRoleMapper.java
  14. 12 8
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserRoleMapper.java
  15. 79 0
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserShopExtMapper.java
  16. 61 0
      suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserShopExtService.java
  17. 44 22
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserServiceImpl.java
  18. 97 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserShopExtServiceImpl.java
  19. 23 14
      suishenbang-system/src/main/resources/mapper/system/SysRoleMapper.xml
  20. 24 18
      suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml
  21. 13 9
      suishenbang-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
  22. 13 10
      suishenbang-system/src/main/resources/mapper/system/SysUserSalesExtMapper.xml
  23. 123 0
      suishenbang-system/src/main/resources/mapper/system/SysUserShopExtMapper.xml

+ 4 - 1
suishenbang-admin/src/main/resources/application-prod.yml

@@ -23,7 +23,10 @@ customer:
   appsecret: d5c234b37e9f9ecb47a71ba6a788bd3e
   #正式域名 https://ac.nipponpaint.com.cn
   domain: https://ac.nipponpaint.com.cn
-
+shop:
+  appid: ap4f8e6a38b6142187
+  appsecret: d5c234b37e9f9ecb47a71ba6a788bd3e
+  tokenUrl: http://esbgateway.nipponpaint.com.cn/NPeportal/auth/jwt/v1/gettoken
 qiyeweixin:
   #企业微信id
   corpid: ww5444eb205d75e730

+ 10 - 0
suishenbang-admin/src/main/resources/application-uat.yml

@@ -24,6 +24,11 @@ customer:
   appsecret: d5c234b37e9f9ecb47a71ba6a788bd3e
   #正式域名 https://ac.nipponpaint.com.cn
   domain: https://ac.nipponpaint.com.cn
+shop:
+  appid: ap4f8e6a38b6142187 #aq5e65db1640384765
+  appsecret: d5c234b37e9f9ecb47a71ba6a788bd3e  #f6ff802d16cf8e2718e90b7ba3252805
+  tokenUrl: http://esbgateway.nipponpaint.com.cn/NPeportal/auth/jwt/v1/gettoken
+
 
 #hana数据库数据同步配置
 hana:
@@ -109,6 +114,11 @@ spring:
     tmsToken: EZS2020
     suishenbang: https://suishenbangtest.nipponpaint.com.cn/oneportal
 
+  esb:
+    XAppId: Rg0YtNTe #yOQIfSJF
+    APiKey: VOw81LBuXDSSRx4v #aUK5WZTmWjzn1foC
+    shopStoneLikePaint: http://esbgateway.nipponpaint.com.cn/NPeportal/api/diydt/v3/texturewall/staff/list #http://esbgateway-test.nipponpaint.com.cn/NPeportal/api/diydt/v3/texturewall/staff/list
+
   mail:
     #邮件服务器地址
     host: mail.dgtis.com

+ 11 - 1
suishenbang-api/src/main/resources/application-prod.yml

@@ -41,7 +41,7 @@ server:
     max-threads: 800
     # Tomcat启动初始化的线程数,默认值25
     min-spare-threads: 30
- 
+
 # 日志配置
 logging:
   level:
@@ -74,6 +74,11 @@ spring:
     tmsUrl: https://lb.lutms.com/wuliu/apissbzt/ssb_update_authFile.do
     tmsToken: EZS2020
     suishenbang: https://suishenbang.nipponpaint.com.cn/oneportal
+  esb:
+    XAppId: Rg0YtNTe #yOQIfSJF
+    APiKey: VOw81LBuXDSSRx4v #aUK5WZTmWjzn1foC
+    shopStoneLikePaint: http://esbgateway.nipponpaint.com.cn/NPeportal/api/diydt/v3/texturewall/staff/list #http://esbgateway-test.nipponpaint.com.cn/NPeportal/api/diydt/v3/texturewall/staff/list
+
   mail:
     #邮件服务器地址
     host: mail.dgtis.com
@@ -124,6 +129,11 @@ mybatis:
     mapperLocations: classpath*:mapper/**/*Mapper.xml
     # 加载全局的配置文件
     configLocation: classpath:mybatis/mybatis-config.xml
+shop:
+  appid: ap4f8e6a38b6142187
+  appsecret: d5c234b37e9f9ecb47a71ba6a788bd3e
+  tokenUrl: http://esbgateway.nipponpaint.com.cn/NPeportal/auth/jwt/v1/gettoken
+
 qiyeweixin:
   #企业微信id
   corpid: ww5444eb205d75e730

+ 11 - 1
suishenbang-api/src/main/resources/application-uat.yml

@@ -42,7 +42,7 @@ server:
     max-threads: 800
     # Tomcat启动初始化的线程数,默认值25
     min-spare-threads: 30
- 
+
 # 日志配置
 logging:
   level:
@@ -76,6 +76,11 @@ spring:
     tmsUrl: https://lbtest.lutms.com/wuliu/apissbzt/ssb_update_authFile.do
     tmsToken: EZS2020
     suishenbang: https://suishenbangtest.nipponpaint.com.cn/oneportal
+  esb:
+    XAppId: Rg0YtNTe #yOQIfSJF
+    APiKey: VOw81LBuXDSSRx4v #aUK5WZTmWjzn1foC
+    shopStoneLikePaint: http://esbgateway.nipponpaint.com.cn/NPeportal/api/diydt/v3/texturewall/staff/list #http://esbgateway-test.nipponpaint.com.cn/NPeportal/api/diydt/v3/texturewall/staff/list
+
   mail:
     #邮件服务器地址
     host: mail.dgtis.com
@@ -126,6 +131,11 @@ mybatis:
     mapperLocations: classpath*:mapper/**/*Mapper.xml
     # 加载全局的配置文件
     configLocation: classpath:mybatis/mybatis-config.xml
+shop:
+  appid: ap4f8e6a38b6142187
+  appsecret: d5c234b37e9f9ecb47a71ba6a788bd3e
+  tokenUrl: http://esbgateway.nipponpaint.com.cn/NPeportal/auth/jwt/v1/gettoken
+
 qiyeweixin:
   #企业微信id
   corpid: ww5444eb205d75e730

+ 110 - 11
suishenbang-common/src/main/java/com/dgtly/common/utils/http/HttpUtils.java

@@ -1,17 +1,12 @@
 package com.dgtly.common.utils.http;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
-import java.net.URL;
-import java.net.URLConnection;
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.text.ParseException;
+import java.util.Map;
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
@@ -27,7 +22,7 @@ import org.springframework.http.HttpEntity;
 
 /**
  * 通用http发送方法
- * 
+ *
  * @author dgtly
  */
 public class HttpUtils
@@ -272,6 +267,110 @@ public class HttpUtils
         }
         return result.toString();
     }
+    /**
+     * @description: 向指定 URL 发送GET方法的请求
+     * @param: [url, headers, params]
+     * @return: java.lang.String
+     * @author: njs
+     * @date: 2025/8/18 16:19
+     */
+    public static String get(String url, Map<String, String> headers, Map<String, Object> params) {
+        StringBuilder result = new StringBuilder(1024); // 初始化容量
+        try {
+            // 构建带参数的URL
+            StringBuilder paramBuilder = new StringBuilder();
+            if (params != null && !params.isEmpty()) {
+                for (Map.Entry<String, Object> entry : params.entrySet()) {
+                   if(entry.getValue() != null){
+                    if (paramBuilder.length() != 0) {
+                        paramBuilder.append("&");
+                    }
+                       String key = entry.getKey();
+                       String value = String.valueOf(entry.getValue());
+
+
+                       try {
+                           // 对键进行编码(键通常不需要预先编码)
+                           String encodedKey = URLEncoder.encode(key, StandardCharsets.UTF_8.name());
+
+                           // 检查值是否已经URL编码过
+                           if (isUrlEncoded(value)) {
+                               // 如果已经编码过,直接使用
+                               paramBuilder.append(encodedKey).append("=").append(value);
+                           } else {
+                               // 如果未编码,进行编码
+                               String encodedValue = URLEncoder.encode(value, StandardCharsets.UTF_8.name());
+                               paramBuilder.append(encodedKey).append("=").append(encodedValue);
+                           }
+                       } catch (UnsupportedEncodingException e) {
+                           throw new RuntimeException("UTF-8 encoding not supported", e);
+                       }
+
+                   }
+                }
+            }
+            String urlNameString = url + "?" + paramBuilder.toString();
+            log.info("sendGet - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+
+            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
+            // 设置请求头
+            if (headers != null && !headers.isEmpty()) {
+                for (Map.Entry<String, String> entry : headers.entrySet()) {
+                    connection.setRequestProperty(entry.getKey(), entry.getValue());
+                }
+            }
+
+            // 默认请求头
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/5.0 (compatible; Java client)");
+            connection.setConnectTimeout(10000);
+            connection.setReadTimeout(10000);
+            connection.connect();
+
+            int responseCode = connection.getResponseCode();
+            if (responseCode >= 200 && responseCode < 300) {
+                try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
+                    log.info("read success url - {}", realUrl);
+                    String line;
+                    while ((line = in.readLine()) != null) {
+                        result.append(line);
+                    }
+                    log.info("recv - {}", result);
+                }
+            } else {
+                log.error("调用HttpUtils.sendGet失败,响应码:{},url={}", responseCode, url);
+                throw new BusinessException("调用HttpUtils.sendGet失败,响应码:" + responseCode + ",url=" + url);
+            }
+
+        } catch (ConnectException e) {
+            log.error("调用HttpUtils.sendGet ConnectException, url={}", url, e);
+            throw new BusinessException("调用HttpUtils.sendGet ConnectException, url=" + url);
+        } catch (SocketTimeoutException e) {
+            log.error("调用HttpUtils.sendGet SocketTimeoutException, url={}", url, e);
+            throw new BusinessException("调用HttpUtils.sendGet SocketTimeoutException, url=" + url);
+        } catch (IOException e) {
+            log.error("调用HttpUtils.sendGet IOException, url={}", url, e);
+            throw new BusinessException("调用HttpUtils.sendGet IOException, url=" + url);
+        } catch (Exception e) {
+            log.error("调用HttpUtils.sendGet Exception, url={}", url, e);
+            throw new BusinessException("调用HttpUtils.sendGet Exception, url=" + url);
+        }
+
+        return result.toString();
+    }
+
+    // 简单检查是否已编码
+    // 改进的URL编码检测方法
+    private static boolean isUrlEncoded(String value) {
+        if (value == null || value.isEmpty()) {
+            return false;
+        }
+        // 检查是否包含URL编码特征字符
+        return value.contains("%") && value.matches(".*%[0-9A-Fa-f]{2}.*");
+    }
+
 
 
     /**
@@ -591,4 +690,4 @@ public class HttpUtils
 
 
 
-}
+}

+ 15 - 0
suishenbang-quartz/src/main/java/com/dgtly/quartz/task/RyTask.java

@@ -4,6 +4,7 @@ import com.dgtly.common.utils.StringUtils;
 import com.dgtly.sync.service.AnalysisDiyCustomerComponent;
 import com.dgtly.sync.service.HanaOrderComponent;
 import com.dgtly.sync.service.RelationCustomerOnlineComponent;
+import com.dgtly.sync.service.ShopUserTypeComponent;
 import com.dgtly.system.service.ISysUserOrderAuthorService;
 import com.dgtly.system.service.HanaSalesOrderService;
 import com.dgtly.wxportal.service.IWxSendMessageService;
@@ -11,6 +12,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.text.ParseException;
+
 /**
  * 定时任务调度测试
  *
@@ -33,6 +36,8 @@ public class RyTask
     private IWxSendMessageService wxSendMessageService;
     @Autowired
     private HanaSalesOrderService HanaSalesOrderService;
+    @Autowired
+    private ShopUserTypeComponent shopUserTypeComponent;
 
 //    private static RyTask ryTask;
 //    @PostConstruct
@@ -63,6 +68,16 @@ public class RyTask
     public void analyDiyCustomer1(){
         analysisDiyCustomerComponent.analyDiyCustomer1();
     }
+    /**
+     * @description: 获取TUC仿石漆服务商人员
+     * @param: []
+     * @return: void
+     * @author: njs
+     * @date: 2025/8/18 13:53
+     */
+    public void shopStoneLikePaint() throws ParseException {
+        shopUserTypeComponent.shopStoneLikePaint();
+    }
     /*立邦DIY人员定时同步*/
   /*  public void analyCwCustomer(){
         analysisDiyCustomerComponent.analyCwCustomer();

+ 156 - 20
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java

@@ -20,6 +20,7 @@ import com.dgtly.system.domain.SysUser;
 import com.dgtly.system.domain.SysUserExt;
 import com.dgtly.system.mapper.SysUserExtMapper;
 import com.dgtly.system.mapper.SysUserMapper;
+import com.dgtly.system.mapper.SysUserShopExtMapper;
 import com.dgtly.system.service.IAssRelcustomerinfoService;
 import com.dgtly.system.service.ISysConfigService;
 import com.dgtly.system.service.impl.SysUserServiceImpl;
@@ -61,6 +62,9 @@ public class AnalysisDiyCustomerComponent {
     private SyncFailDetailMapper syncFailDetailMapper;
     @Autowired
     private IAssRelcustomerinfoService assRelcustomerinfoService;
+
+    @Autowired
+    private SysUserShopExtMapper userShopExtMapper;
     private Long deptId;
     //老板角色
     private Long[] roleIds;
@@ -850,18 +854,51 @@ public class AnalysisDiyCustomerComponent {
                                         if(assRelcustomerinfoList !=null && assRelcustomerinfoList.size()>0){
                                             assRelcustomerinfoService.deleteAssRelcustomerinfoByUserId(u.getUserId().toString(), vo.getCustomerCode());
                                         }else{
-                                                u.setQuit("2");
-                                                sysUserService.updateUserInfo(u);
+                                                //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                                if(("1").equals(u.getIsShopAccount())){
+                                                    SysUserExt userExt = u.getSysUserExt();
+                                                    if(userExt !=null){
+                                                        userExt.setDelFlag("2");
+                                                        userExt.setDelTime(new Date());
+                                                        sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                                    }
+
+                                                }else{
+                                                    u.setQuit("2");
+                                                    sysUserService.updateUserInfo(u);
+                                                }
                                         }
                                     }
                                 }
+                            }else{
+                                //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                if(("1").equals(u.getIsShopAccount())){
+                                    SysUserExt userExt = u.getSysUserExt();
+                                    if(userExt !=null){
+                                        userExt.setDelFlag("2");
+                                        userExt.setDelTime(new Date());
+                                        sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                    }
+
+                                }else{
+                                    u.setQuit("2");
+                                    sysUserService.updateUserInfo(u);
+                                }
+                            }
+                        }else{
+                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                            if(("1").equals(u.getIsShopAccount())){
+                                SysUserExt userExt = u.getSysUserExt();
+                                if(userExt !=null){
+                                    userExt.setDelFlag("2");
+                                    userExt.setDelTime(new Date());
+                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                }
+
                             }else{
                                 u.setQuit("2");
                                 sysUserService.updateUserInfo(u);
                             }
-                        }else{
-                            u.setQuit("2");
-                            sysUserService.updateUserInfo(u);
                         }
                     }
                 }
@@ -1609,18 +1646,51 @@ public class AnalysisDiyCustomerComponent {
                                         if(assRelcustomerinfoList !=null && assRelcustomerinfoList.size()>0){
                                             assRelcustomerinfoService.deleteAssRelcustomerinfoByUserId(u.getUserId().toString(), vo.getCustomerCode());
                                         }else{
-                                            u.setQuit("2");
-                                            sysUserService.updateUserInfo(u);
+                                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                            if(("1").equals(u.getIsShopAccount())){
+                                                SysUserExt userExt = u.getSysUserExt();
+                                                if(userExt !=null){
+                                                    userExt.setDelFlag("2");
+                                                    userExt.setDelTime(new Date());
+                                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                                }
+
+                                            }else{
+                                                u.setQuit("2");
+                                                sysUserService.updateUserInfo(u);
+                                            }
                                         }
                                     }
                                 }
+                            }else{
+                                //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                if(("1").equals(u.getIsShopAccount())){
+                                    SysUserExt userExt = u.getSysUserExt();
+                                    if(userExt !=null){
+                                        userExt.setDelFlag("2");
+                                        userExt.setDelTime(new Date());
+                                        sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                    }
+
+                                }else{
+                                    u.setQuit("2");
+                                    sysUserService.updateUserInfo(u);
+                                }
+                            }
+                        }else{
+                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                            if(("1").equals(u.getIsShopAccount())){
+                                SysUserExt userExt = u.getSysUserExt();
+                                if(userExt !=null){
+                                    userExt.setDelFlag("2");
+                                    userExt.setDelTime(new Date());
+                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                }
+
                             }else{
                                 u.setQuit("2");
                                 sysUserService.updateUserInfo(u);
                             }
-                        }else{
-                            u.setQuit("2");
-                            sysUserService.updateUserInfo(u);
                         }
                     }
                 }
@@ -1836,18 +1906,51 @@ public class AnalysisDiyCustomerComponent {
                                         if(assRelcustomerinfoList !=null && assRelcustomerinfoList.size()>0){
                                             assRelcustomerinfoService.deleteAssRelcustomerinfoByUserId(u.getUserId().toString(), vo.getCustomerCode());
                                         }else{
-                                            u.setQuit("2");
-                                            sysUserService.updateUserInfo(u);
+                                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                            if(("1").equals(u.getIsShopAccount())){
+                                                SysUserExt userExt = u.getSysUserExt();
+                                                if(userExt !=null){
+                                                    userExt.setDelFlag("2");
+                                                    userExt.setDelTime(new Date());
+                                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                                }
+
+                                            }else{
+                                                u.setQuit("2");
+                                                sysUserService.updateUserInfo(u);
+                                            }
                                         }
                                     }
                                 }
+                            }else{
+                                //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                if(("1").equals(u.getIsShopAccount())){
+                                    SysUserExt userExt = u.getSysUserExt();
+                                    if(userExt !=null){
+                                        userExt.setDelFlag("2");
+                                        userExt.setDelTime(new Date());
+                                        sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                    }
+
+                                }else{
+                                    u.setQuit("2");
+                                    sysUserService.updateUserInfo(u);
+                                }
+                            }
+                        }else{
+                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                            if(("1").equals(u.getIsShopAccount())){
+                                SysUserExt userExt = u.getSysUserExt();
+                                if(userExt !=null){
+                                    userExt.setDelFlag("2");
+                                    userExt.setDelTime(new Date());
+                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                }
+
                             }else{
                                 u.setQuit("2");
                                 sysUserService.updateUserInfo(u);
                             }
-                        }else{
-                            u.setQuit("2");
-                            sysUserService.updateUserInfo(u);
                         }
                     }
                 }
@@ -2082,18 +2185,51 @@ public class AnalysisDiyCustomerComponent {
                                         if(assRelcustomerinfoList !=null && assRelcustomerinfoList.size()>0){
                                             assRelcustomerinfoService.deleteAssRelcustomerinfoByUserId(u.getUserId().toString(), vo.getCustomerCode());
                                         }else{
-                                            u.setQuit("2");
-                                            sysUserService.updateUserInfo(u);
+                                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                            if(("1").equals(u.getIsShopAccount())){
+                                                SysUserExt userExt = u.getSysUserExt();
+                                                if(userExt !=null){
+                                                    userExt.setDelFlag("2");
+                                                    userExt.setDelTime(new Date());
+                                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                                }
+
+                                            }else{
+                                                u.setQuit("2");
+                                                sysUserService.updateUserInfo(u);
+                                            }
                                         }
                                     }
                                 }
+                            }else{
+                                //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                                if(("1").equals(u.getIsShopAccount())){
+                                    SysUserExt userExt = u.getSysUserExt();
+                                    if(userExt !=null){
+                                        userExt.setDelFlag("2");
+                                        userExt.setDelTime(new Date());
+                                        sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                    }
+
+                                }else{
+                                    u.setQuit("2");
+                                    sysUserService.updateUserInfo(u);
+                                }
+                            }
+                        }else{
+                            //检测用户是否还有门店账号标识,有则把用户扩展信息离职掉,没有则主账号离职+扩展信息离职
+                            if(("1").equals(u.getIsShopAccount())){
+                                SysUserExt userExt = u.getSysUserExt();
+                                if(userExt !=null){
+                                    userExt.setDelFlag("2");
+                                    userExt.setDelTime(new Date());
+                                    sysUserExtMapper.updateSysUserExt(u.getSysUserExt());
+                                }
+
                             }else{
                                 u.setQuit("2");
                                 sysUserService.updateUserInfo(u);
                             }
-                        }else{
-                            u.setQuit("2");
-                            sysUserService.updateUserInfo(u);
                         }
                     }
                 }

+ 335 - 0
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/ShopUserTypeComponent.java

@@ -0,0 +1,335 @@
+package com.dgtly.sync.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.utils.ShiroSaltUtil;
+import com.dgtly.common.utils.http.HttpUtils;
+import com.dgtly.common.utils.security.EncryptPassWordClass;
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.mapper.SyncFailDetailMapper;
+import com.dgtly.system.domain.SysUser;
+import com.dgtly.system.domain.SysUserExt;
+import com.dgtly.system.domain.SysUserShopExt;
+import com.dgtly.system.mapper.*;
+import com.dgtly.system.service.ISysConfigService;
+import com.dgtly.system.service.impl.SysUserServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Component
+public class ShopUserTypeComponent {
+
+    private static final Logger log = LoggerFactory.getLogger(ShopUserTypeComponent.class);
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private SysUserExtMapper sysUserExtMapper;
+
+    @Autowired
+    private SysUserShopExtMapper userShopExtMapper;
+
+    @Autowired
+    private SysRoleMapper roleMapper;
+
+    @Autowired
+    private SysUserServiceImpl sysUserService;
+
+    @Autowired
+    private SysUserRoleMapper userRoleMapper;
+
+    @Value(value = "${shop.appid:none}")
+    private String appid;
+
+    @Value(value = "${shop.appsecret:none}")
+    private String appsecret;
+
+    @Value(value = "${shop.tokenUrl:none}")
+    private String tokenUrl;
+
+    @Value(value = "${spring.esb.XAppId}")
+    private String ssbAppid;
+
+    @Value(value = "${spring.esb.APiKey}")
+    private String ssbApiKey;
+
+    @Value(value = "${spring.esb.shopStoneLikePaint}")
+    private String stoneLikePaintUrl;
+
+
+
+    /**
+     * @description: 获取TUC仿石漆服务商人员
+     * @param: []
+     * @return: com.dgtly.sync.domain.SyncLog
+     * @author: njs
+     * @date: 2025/8/18 14:09
+     */
+    public void shopStoneLikePaint() throws ParseException {
+        //获取请求参数
+        Map<String, String> tokenHeaders =this.HeaderToMap();
+        Map<String, Object> params = new HashMap<>();
+        params.put("appid", appid);
+        params.put("appsecret", appsecret);
+        // 发送GET请求,包含URL、请求头和请求参数
+        String token = null;
+        try {
+            token = HttpUtils.get(tokenUrl, tokenHeaders, params);
+            if (token == null || token.isEmpty()) {
+                // 处理空返回值的情况
+                log.error("HTTP请求返回空结果");
+            }
+        } catch (Exception e) {
+            // 处理HTTP请求异常
+            log.error("HTTP请求失败: " + e.getMessage());
+            // 可以选择重试或抛出异常
+        }
+
+        JSONObject jsonObject = JSON.parseObject(token);
+        if(jsonObject !=null && jsonObject.containsKey("access_token")){
+            String shopToken = jsonObject.getString("access_token");
+            String url = stoneLikePaintUrl;
+            Map<String, String> stoneLikePaintHeaders =this.HeaderToMap();
+            Map<String, Object> stoneParams = new HashMap<>();
+            stoneParams.put("access_token", shopToken);
+            stoneParams.put("page", 1);
+            stoneParams.put("page_size", 100);
+            String dateString = userShopExtMapper.searchRunTime();
+            // 截取前3位毫秒数
+            String truncatedDate = dateString.substring(0, dateString.lastIndexOf('.') + 4);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
+            Date date = sdf.parse(truncatedDate);
+            String runTime = sdf.format(date);
+            //获取上次同步时间进行增量同步
+            if(runTime !=null && !runTime.isEmpty()){
+                 stoneParams.put("datetime_start", runTime);
+            }
+            //TUC仿石漆服务商人员-0
+            Long roleId = roleMapper.selectRoleIdByRoleKey("shopStoneLikePaint");
+            String stoneLikePaintUser =HttpUtils.get(url, stoneLikePaintHeaders, stoneParams);
+            JSONObject stoneLikeJson = JSONObject.parseObject(stoneLikePaintUser);
+            if(stoneLikeJson !=null &&  stoneLikeJson.getString("code").equals("0")){
+                Integer count = stoneLikeJson.getInteger("count");
+                if(count > 100){
+                    int num = 0;
+                    if (count % 100 != 0) {
+                        num = (count / 100) + 2;
+                    } else {
+                        num = (count / 100) + 1;
+                    }
+                    for (int i = 1; i < num; i++) {
+                        stoneParams.put("page", i);
+                        Map<String, String> headerUuid =this.HeaderToMap();
+                        try {
+                        String stoneLikeUser =HttpUtils.get(url, headerUuid, stoneParams);
+                        JSONObject stoneUserJson = JSONObject.parseObject(stoneLikeUser);
+                        if(stoneUserJson !=null &&  stoneUserJson.getString("code").equals("0")){
+                            JSONArray stoneUserArray = stoneUserJson.getJSONArray("data");
+                            buildShopUser(stoneUserArray,"0",roleId);
+                        }
+                        }catch (Exception e) {
+                            log.error("循环获取获取TUC仿石漆服务商人员列表接口错误!第" + i + "页");
+                            throw e;
+                        }
+                    }
+
+                }else{
+                    JSONArray stoneUserArray = stoneLikeJson.getJSONArray("data");
+                    buildShopUser(stoneUserArray,"0",roleId);
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * @description: 构建门店用户信息
+     * @param: [json, Usertype, roleId, deptId]
+     * @return: void
+     * @author: njs
+     * @date: 2025/8/19 13:40
+     */
+    public void buildShopUser(JSONArray jsonArray,String usertype,Long roleId){
+        int count = 0;
+        List<SyncFailDetail> failDetails = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jo = jsonArray.getJSONObject(i);
+            Set<String> loginNameSet = sysUserService.selectAllUserLoginName();
+            loginNameSet = loginNameSet.stream().map(String::toUpperCase).collect(Collectors.toSet());
+            try {
+                String userName = jo.getString("staff_name");
+                String userPhone = jo.getString("staff_mobile");
+                //是否同步企业微信
+                Boolean isSync = jo.getBoolean("is_synced_to_wecom");
+                //是否有效用户
+                Boolean isActive = jo.getBoolean("is_active");
+                String subOfficeCode = jo.getString("office_code");
+                String subOfficeName = jo.getString("office_name");
+                String shopCode = jo.getString("organization_code");
+                String shopName = jo.getString("organization_name");
+                String dataUpdateTime = jo.getString("update_datetime");
+                String dataUserId = jo.getString("id");
+                /*人员信息是否有效,true有效,false无效。是否同步到企微 */
+                String loginName ="";
+                if(isActive && isSync){
+                    loginName = jo.getString("wecom_userid");
+                }else{
+                    //先判断该用户是否存在在处理离职和去掉角色,否则直接跳出循环不处理
+                    //离职掉该门店和用户关联关系
+                    if(!isActive){
+                        //用户无效后接口获取不到企微id,需从关联表查询
+                        loginName = userShopExtMapper.selectLoginNameByUserId(dataUserId,shopCode,usertype);
+                        if(loginName !=null && !loginName.isEmpty()){
+                            //查询用户信息
+                            SysUser user = sysUserMapper.selectUserByLoginName(loginName);
+                            userShopExtMapper.deleteUserShopExt(user.getUserId().toString(),loginName,shopCode,usertype);
+                            //去掉该用户和角色的关联关系
+                            userRoleMapper.deleteUserRoleByUserIdAndExt(user.getUserId(),roleId,usertype);
+                            //离职处理以及用户主信息是否有门店账号处理需要添加
+                            //查询门店用户表是否存在用户和其他门店的关联关系,如果存在就不离职,不存在查询是否有经销商的关联关系,如果存在就不离职,不存在就离职
+                            SysUserShopExt shop = new SysUserShopExt();
+                            shop.setUserId(user.getUserId().toString());
+                            shop.setDelFlag("0");
+                            List<SysUserShopExt>  shopExtList = userShopExtMapper.selectSysUserShopExtList(shop);
+                            if(shopExtList == null || shopExtList.size() == 0){
+                                    //在查用户经销商扩展信息
+                                    SysUserExt userCustomerExt = sysUserExtMapper.selectSysUserExtById(user.getUserId());
+                                    user.setIsShopAccount("0");
+                                    if(userCustomerExt == null){
+                                        //离职处理2
+                                        user.setQuit("2");
+                                    }
+                                    //修改用户信息
+                                    sysUserMapper.updateUser(user);
+
+                            }
+                        }
+                    }
+                    continue;
+                }
+
+
+                if (!loginNameSet.contains(loginName.toUpperCase().trim())) {
+
+                    /** =============用户基本信息构建 start===============*/
+                    SysUser user = new SysUser();
+                    user.setLoginName(loginName);
+                    log.info("门店新用户"+loginName +"门店类型身份"+usertype);
+                    user.setUserName(userName);
+                    user.setPhonenumber(userPhone);
+                    user.setPassword(loginName);
+                    user.setSalt(ShiroSaltUtil.randomSalt());
+                    user.setPassword(EncryptPassWordClass.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+                    user.setIsShopAccount("1");
+                    user.setRoleId(roleId);
+                    /** =============用户基本信息构建 end===============*/
+                    insertUserAndExt(user);
+                    //查询用户信息
+                    SysUser userVoExt = sysUserMapper.selectUserByLoginName(loginName);
+                    // 新增用户与角色管理
+                    user.setUserId(userVoExt.getUserId());
+                    sysUserService.insertShopUserRole(user);
+                    /**======== 构建门店用户扩展信息表 start===============*/
+                    SysUserShopExt shopExt = new SysUserShopExt();
+                    shopExt.setLoginName(loginName);
+                    shopExt.setShopCode(shopCode);
+                    shopExt.setShopName(shopName);
+                    shopExt.setSubofficeCode(subOfficeCode);
+                    shopExt.setSubofficeName(subOfficeName);
+                    shopExt.setIsShopType(usertype);
+                    shopExt.setUserUpdateTime(dataUpdateTime);
+                    shopExt.setDelFlag("0");
+                    shopExt.setConstraintUserId(dataUserId);
+                    //用户id
+                    shopExt.setUserId(userVoExt.getUserId().toString());
+                    userShopExtMapper.insertSysUserShopExt(shopExt);
+                    count++;
+                    loginNameSet.add(loginName);
+                } else {
+                    /*已经存在的,需增加用户标识,然后增加门店用户扩展信息*/
+                    SysUser user = sysUserMapper.selectUserByLoginName(loginName);
+                    user.setPhonenumber(userPhone);
+                    //允许同步自动用户
+                    if (("0").equals(user.getIsSync())) {
+                        //查询该用户是否存在该接口返回中
+                        user.setPhonenumber(userPhone);
+                        user.setUserName(userName);
+                        user.setIsShopAccount("1");
+                        sysUserService.updateUserInfo(user);
+
+                        /**======== 构建门店用户扩展信息表 start===============*/
+                        //先删除用户门店扩展表,再插入
+                        userShopExtMapper.deletePhysicsUserShopExt(user.getUserId().toString(),loginName,shopCode,usertype);
+                        SysUserShopExt shopExt = new SysUserShopExt();
+                        shopExt.setLoginName(loginName);
+                        shopExt.setShopCode(shopCode);
+                        shopExt.setShopName(shopName);
+                        shopExt.setSubofficeCode(subOfficeCode);
+                        shopExt.setSubofficeName(subOfficeName);
+                        shopExt.setIsShopType(usertype);
+                        shopExt.setUserUpdateTime(dataUpdateTime);
+                        shopExt.setDelFlag("0");
+                        shopExt.setConstraintUserId(dataUserId);
+                        //用户id
+                        shopExt.setUserId(user.getUserId().toString());
+                        userShopExtMapper.insertSysUserShopExt(shopExt);
+                    }
+                }
+            }catch (Exception e){
+                log.error("门店用户数据分析异常"+e.getMessage());
+                e.printStackTrace();
+                SyncFailDetail syncFailDetail = new SyncFailDetail();
+                syncFailDetail.setFailReason(e.getMessage());
+                syncFailDetail.setDataJson(jo.toJSONString());
+                syncFailDetail.setFailLevel("1");
+                syncFailDetail.setExceptionType(e.getClass().getSimpleName());
+                failDetails.add(syncFailDetail);
+            }
+        }
+
+    }
+
+    /**
+     * @description: 新esbq请求头
+     * @param: []
+     * @return: java.util.Map<java.lang.String,java.lang.String>
+     * @author: njs
+     * @date: 2025/8/21 15:55
+     */
+    public  Map<String, String> HeaderToMap() {
+        String XAppId = ssbAppid;
+        String APiKey = ssbApiKey;
+        Map<String, String> headers = new HashMap<String, String>(2);
+        headers.put("X-App-Id", XAppId);
+        headers.put("X-Timestamp", new Date().toString());
+        headers.put("X-Sequence-No", UUID.randomUUID().toString());
+        headers.put("APIKey", APiKey);
+        headers.put("Accept-Encoding", "identity");
+        return headers;
+    }
+
+    /**
+     * @description: 新增用户和角色
+     * @param: [user]
+     * @return: java.lang.Integer
+     * @author: njs
+     * @date: 2025/8/20 9:32
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Integer insertUserAndExt(SysUser user) {
+        // 新增用户信息
+        int rows = sysUserMapper.insertUser(user);
+
+        return rows;
+    }
+}

+ 1 - 1
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/utils/CustomerAccessTokenUtil.java

@@ -162,7 +162,7 @@ public class CustomerAccessTokenUtil {
             }
         }catch (Exception e){
             reSetToken();
-            log.error("获取E签宝token错误",e);
+            log.error("获取token错误",e);
             throw e;
         }
         return accessToken;

+ 10 - 9
suishenbang-system/src/main/java/com/dgtly/system/domain/SysUser.java

@@ -16,7 +16,7 @@ import com.dgtly.common.core.domain.BaseEntity;
 
 /**
  * 用户对象 sys_user
- * 
+ *
  * @author dgtly
  */
 public class SysUser extends BaseEntity
@@ -142,10 +142,19 @@ public class SysUser extends BaseEntity
     //2离职
     private String quit;
 
+    //门店账号标识 1门店账号 0非门店账号
     private String  isShopAccount;
 
     public String getQuit(){return  quit;}
 
+    public String getIsShopAccount() {
+        return isShopAccount;
+    }
+
+    public void setIsShopAccount(String isShopAccount) {
+        this.isShopAccount = isShopAccount;
+    }
+
     public  void setQuit(String quit){this.quit=quit;}
     public String getAuthorType() {
         return authorType;
@@ -571,14 +580,6 @@ public class SysUser extends BaseEntity
         this.isSync = isSync;
     }
 
-    public void setIsShopAccount(String isShopAccount) {
-        this.isShopAccount = isShopAccount;
-    }
-
-    public String getIsShopAccount() {
-        return isShopAccount;
-    }
-
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 31 - 7
suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserExt.java

@@ -1,13 +1,16 @@
 package com.dgtly.system.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.dgtly.common.annotation.Excel;
 import com.dgtly.common.core.domain.BaseEntity;
 
+import java.util.Date;
+
 /**
  * 用户信息扩展对象 sys_user_ext
- * 
+ *
  * @author qxp
  * @date 2020-07-29
  */
@@ -55,6 +58,11 @@ public class SysUserExt extends BaseEntity
 
     private String dutyName;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date delTime;
+
+    private String delFlag;
+
     public String getDuty() {
         return duty;
     }
@@ -63,6 +71,22 @@ public class SysUserExt extends BaseEntity
         this.duty = duty;
     }
 
+    public Date getDelTime() {
+        return delTime;
+    }
+
+    public void setDelTime(Date delTime) {
+        this.delTime = delTime;
+    }
+
+    public String getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
+
     public String getDutyName() {
         return dutyName;
     }
@@ -88,30 +112,30 @@ public class SysUserExt extends BaseEntity
     {
         return userId;
     }
-    public void setOrgCode(String orgCode) 
+    public void setOrgCode(String orgCode)
     {
         this.orgCode = orgCode;
     }
 
-    public String getOrgCode() 
+    public String getOrgCode()
     {
         return orgCode;
     }
-    public void setSalesLevel(String salesLevel) 
+    public void setSalesLevel(String salesLevel)
     {
         this.salesLevel = salesLevel;
     }
 
-    public String getSalesLevel() 
+    public String getSalesLevel()
     {
         return salesLevel;
     }
-    public void setOrgName(String orgName) 
+    public void setOrgName(String orgName)
     {
         this.orgName = orgName;
     }
 
-    public String getOrgName() 
+    public String getOrgName()
     {
         return orgName;
     }

+ 176 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserShopExt.java

@@ -0,0 +1,176 @@
+package com.dgtly.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dgtly.common.annotation.Excel;
+import com.dgtly.common.core.domain.BaseEntity;
+import java.util.Date;
+
+/**
+ * 门店人员信息扩展对象 sys_user_shop_ext
+ *
+ * @author njs
+ * @date 2025-08-19
+ */
+public class SysUserShopExt extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private String userId;
+
+    /** 企微id */
+    @Excel(name = "企微id")
+    private String loginName;
+
+    /** 门店编码 */
+    @Excel(name = "门店编码")
+    private String shopCode;
+
+    /** 门店名称 */
+    @Excel(name = "门店名称")
+    private String shopName;
+
+    /** 0-(TUC仿石漆服务商人员) */
+    @Excel(name = "0-(TUC仿石漆服务商人员)")
+    private String isShopType;
+
+    /** 销售部编码 */
+    @Excel(name = "销售部编码")
+    private String subofficeCode;
+
+    /** 销售部名称 */
+    @Excel(name = "销售部名称")
+    private String subofficeName;
+
+    /** 用户更新时间 */
+    @Excel(name = "用户更新时间")
+    private String userUpdateTime;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /**立邦企微接口指定id*/
+    private String constraintUserId;
+
+    /** 删除时间 */
+    @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date delTime;
+
+    public void setUserId(String userId)
+    {
+        this.userId = userId;
+    }
+
+    public String getUserId()
+    {
+        return userId;
+    }
+    public void setLoginName(String loginName)
+    {
+        this.loginName = loginName;
+    }
+
+    public String getConstraintUserId() {
+        return constraintUserId;
+    }
+
+    public void setConstraintUserId(String constraintUserId) {
+        this.constraintUserId = constraintUserId;
+    }
+
+    public String getLoginName()
+    {
+        return loginName;
+    }
+    public void setShopCode(String shopCode)
+    {
+        this.shopCode = shopCode;
+    }
+
+    public String getShopCode()
+    {
+        return shopCode;
+    }
+    public void setShopName(String shopName)
+    {
+        this.shopName = shopName;
+    }
+
+    public String getShopName()
+    {
+        return shopName;
+    }
+    public void setIsShopType(String isShopType)
+    {
+        this.isShopType = isShopType;
+    }
+
+    public String getIsShopType()
+    {
+        return isShopType;
+    }
+    public void setSubofficeCode(String subofficeCode)
+    {
+        this.subofficeCode = subofficeCode;
+    }
+
+    public String getSubofficeCode()
+    {
+        return subofficeCode;
+    }
+    public void setSubofficeName(String subofficeName)
+    {
+        this.subofficeName = subofficeName;
+    }
+
+    public String getSubofficeName()
+    {
+        return subofficeName;
+    }
+    public void setUserUpdateTime(String userUpdateTime)
+    {
+        this.userUpdateTime = userUpdateTime;
+    }
+
+    public String getUserUpdateTime()
+    {
+        return userUpdateTime;
+    }
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setDelTime(Date delTime)
+    {
+        this.delTime = delTime;
+    }
+
+    public Date getDelTime()
+    {
+        return delTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("loginName", getLoginName())
+            .append("shopCode", getShopCode())
+            .append("shopName", getShopName())
+            .append("isShopType", getIsShopType())
+            .append("subofficeCode", getSubofficeCode())
+            .append("subofficeName", getSubofficeName())
+            .append("userUpdateTime", getUserUpdateTime())
+            .append("delFlag", getDelFlag())
+            .append("delTime", getDelTime())
+            .append("createTime", getCreateTime())
+            .toString();
+    }
+}

+ 13 - 11
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysRoleMapper.java

@@ -5,14 +5,14 @@ import com.dgtly.system.domain.SysRole;
 
 /**
  * 角色表 数据层
- * 
+ *
  * @author dgtly
  */
 public interface SysRoleMapper
 {
     /**
      * 根据条件分页查询角色数据
-     * 
+     *
      * @param role 角色信息
      * @return 角色数据集合信息
      */
@@ -20,7 +20,7 @@ public interface SysRoleMapper
 
     /**
      * 根据用户ID查询角色
-     * 
+     *
      * @param userId 用户ID
      * @return 角色列表
      */
@@ -28,7 +28,7 @@ public interface SysRoleMapper
 
     /**
      * 通过角色ID查询角色
-     * 
+     *
      * @param roleId 角色ID
      * @return 角色对象信息
      */
@@ -36,7 +36,7 @@ public interface SysRoleMapper
 
     /**
      * 通过角色ID删除角色
-     * 
+     *
      * @param roleId 角色ID
      * @return 结果
      */
@@ -44,7 +44,7 @@ public interface SysRoleMapper
 
     /**
      * 批量角色用户信息
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
@@ -52,7 +52,7 @@ public interface SysRoleMapper
 
     /**
      * 修改角色信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -60,7 +60,7 @@ public interface SysRoleMapper
 
     /**
      * 新增角色信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -68,17 +68,19 @@ public interface SysRoleMapper
 
     /**
      * 校验角色名称是否唯一
-     * 
+     *
      * @param roleName 角色名称
      * @return 角色信息
      */
     public SysRole checkRoleNameUnique(String roleName);
-    
+
     /**
      * 校验角色权限是否唯一
-     * 
+     *
      * @param roleKey 角色权限
      * @return 角色信息
      */
     public SysRole checkRoleKeyUnique(String roleKey);
+
+    Long selectRoleIdByRoleKey(String roleKey);
 }

+ 12 - 8
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserRoleMapper.java

@@ -6,14 +6,14 @@ import com.dgtly.system.domain.SysUserRole;
 
 /**
  * 用户与角色关联表 数据层
- * 
+ *
  * @author dgtly
  */
 public interface SysUserRoleMapper
 {
     /**
      * 通过用户ID删除用户和角色关联
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -21,7 +21,7 @@ public interface SysUserRoleMapper
 
     /**
      * 批量删除用户和角色关联
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
@@ -29,7 +29,7 @@ public interface SysUserRoleMapper
 
     /**
      * 通过角色ID查询角色使用数量
-     * 
+     *
      * @param roleId 角色ID
      * @return 结果
      */
@@ -37,15 +37,15 @@ public interface SysUserRoleMapper
 
     /**
      * 批量新增用户角色信息
-     * 
+     *
      * @param userRoleList 用户角色列表
      * @return 结果
      */
     public int batchUserRole(List<SysUserRole> userRoleList);
-    
+
     /**
      * 删除用户和角色关联信息
-     * 
+     *
      * @param userRole 用户和角色关联信息
      * @return 结果
      */
@@ -53,10 +53,14 @@ public interface SysUserRoleMapper
 
     /**
      * 批量取消授权用户角色
-     * 
+     *
      * @param roleId 角色ID
      * @param userIds 需要删除的用户数据ID
      * @return 结果
      */
     public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
+
+
+    void deleteUserRoleByUserIdAndExt(@Param("userId") Long userId,@Param("roleId") Long roleId,@Param("shopType") String shopType);
+
 }

+ 79 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserShopExtMapper.java

@@ -0,0 +1,79 @@
+package com.dgtly.system.mapper;
+
+import com.dgtly.system.domain.SysUserShopExt;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 门店人员信息扩展Mapper接口
+ *
+ * @author njs
+ * @date 2025-08-19
+ */
+public interface SysUserShopExtMapper
+{
+    /**
+     * 查询门店人员信息扩展
+     *
+     * @param userId 门店人员信息扩展ID
+     * @return 门店人员信息扩展
+     */
+    public SysUserShopExt selectSysUserShopExtById(String userId);
+
+    /**
+     * 查询门店人员信息扩展列表
+     *
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 门店人员信息扩展集合
+     */
+    public List<SysUserShopExt> selectSysUserShopExtList(SysUserShopExt sysUserShopExt);
+
+    /**
+     * 新增门店人员信息扩展
+     *
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 结果
+     */
+    public int insertSysUserShopExt(SysUserShopExt sysUserShopExt);
+
+    /**
+     * 修改门店人员信息扩展
+     *
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 结果
+     */
+    public int updateSysUserShopExt(SysUserShopExt sysUserShopExt);
+
+    /**
+     * 删除门店人员信息扩展
+     *
+     * @param userId 门店人员信息扩展ID
+     * @return 结果
+     */
+    public int deleteSysUserShopExtById(String userId);
+
+    /**
+     * 批量删除门店人员信息扩展
+     *
+     * @param userIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysUserShopExtByIds(String[] userIds);
+
+    /**
+     * @description: 查询上次同步的时间
+     * @param: []
+     * @return: java.lang.String
+     * @author: njs
+     * @date: 2025/8/19 15:41
+     */
+    String searchRunTime();
+
+    void deleteUserShopExt(@Param("userId") String userId,@Param("loginName") String loginName, @Param("shopCode") String shopCode,@Param("isShopType") String isShopType);
+
+    void deletePhysicsUserShopExt(@Param("userId") String userId,@Param("loginName") String loginName, @Param("shopCode") String shopCode,@Param("isShopType") String isShopType);
+
+
+    String  selectLoginNameByUserId(@Param("dataUserId") String dataUserId, @Param("shopCode") String shopCode,@Param("shopType") String shopType);
+}

+ 61 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserShopExtService.java

@@ -0,0 +1,61 @@
+package com.dgtly.system.service;
+
+import com.dgtly.system.domain.SysUserShopExt;
+import java.util.List;
+
+/**
+ * 门店人员信息扩展Service接口
+ * 
+ * @author njs
+ * @date 2025-08-19
+ */
+public interface ISysUserShopExtService 
+{
+    /**
+     * 查询门店人员信息扩展
+     * 
+     * @param userId 门店人员信息扩展ID
+     * @return 门店人员信息扩展
+     */
+    public SysUserShopExt selectSysUserShopExtById(String userId);
+
+    /**
+     * 查询门店人员信息扩展列表
+     * 
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 门店人员信息扩展集合
+     */
+    public List<SysUserShopExt> selectSysUserShopExtList(SysUserShopExt sysUserShopExt);
+
+    /**
+     * 新增门店人员信息扩展
+     * 
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 结果
+     */
+    public int insertSysUserShopExt(SysUserShopExt sysUserShopExt);
+
+    /**
+     * 修改门店人员信息扩展
+     * 
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 结果
+     */
+    public int updateSysUserShopExt(SysUserShopExt sysUserShopExt);
+
+    /**
+     * 批量删除门店人员信息扩展
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysUserShopExtByIds(String ids);
+
+    /**
+     * 删除门店人员信息扩展信息
+     * 
+     * @param userId 门店人员信息扩展ID
+     * @return 结果
+     */
+    public int deleteSysUserShopExtById(String userId);
+}

+ 44 - 22
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserServiceImpl.java

@@ -20,7 +20,7 @@ import com.dgtly.system.service.ISysUserService;
 
 /**
  * 用户 业务层处理
- * 
+ *
  * @author dgtly
  */
 @Service
@@ -55,7 +55,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -68,7 +68,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询已分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -80,7 +80,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
@@ -92,7 +92,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过用户名查询用户
-     * 
+     *
      * @param userName 用户名
      * @return 用户对象信息
      */
@@ -109,7 +109,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过手机号码查询用户
-     * 
+     *
      * @param phoneNumber 手机号码
      * @return 用户对象信息
      */
@@ -121,7 +121,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过邮箱查询用户
-     * 
+     *
      * @param email 邮箱
      * @return 用户对象信息
      */
@@ -133,7 +133,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
@@ -145,7 +145,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -161,7 +161,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
@@ -178,7 +178,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -221,7 +221,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -243,7 +243,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改用户个人详细信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -294,7 +294,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 修改用户密码
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
@@ -304,9 +304,31 @@ public class SysUserServiceImpl implements ISysUserService
         return updateUserInfo(user);
     }
 
+    /**
+     * @description: 新增单用户用户id和角色
+     * @param: [user]
+     * @return: void
+     * @author: njs
+     * @date: 2025/8/21 10:12
+     */
+    public void insertShopUserRole(SysUser user)
+    {
+
+            // 新增用户与角色管理
+            List<SysUserRole> list = new ArrayList<SysUserRole>();
+            SysUserRole ur = new SysUserRole();
+            ur.setUserId(user.getUserId());
+            ur.setRoleId(user.getRoleId());
+            list.add(ur);
+            if (list.size() > 0) {
+                userRoleMapper.batchUserRole(list);
+            }
+
+    }
+
     /**
      * 新增用户角色信息
-     * 
+     *
      * @param user 用户对象
      */
     public void insertUserRole(SysUser user)
@@ -332,7 +354,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增用户岗位信息
-     * 
+     *
      * @param user 用户对象
      */
     public void insertUserPost(SysUser user)
@@ -358,7 +380,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验登录名称是否唯一
-     * 
+     *
      * @param loginName 用户名
      * @return
      */
@@ -411,7 +433,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验用户是否允许操作
-     * 
+     *
      * @param user 用户信息
      */
     public void checkUserAllowed(SysUser user)
@@ -431,7 +453,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 查询用户所属角色组
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -453,7 +475,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 查询用户所属岗位组
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
@@ -475,7 +497,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 导入用户数据
-     * 
+     *
      * @param userList 用户数据列表
      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
      * @param operName 操作用户
@@ -557,7 +579,7 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 用户状态修改
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */

+ 97 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserShopExtServiceImpl.java

@@ -0,0 +1,97 @@
+package com.dgtly.system.service.impl;
+
+import java.util.List;
+import com.dgtly.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.system.mapper.SysUserShopExtMapper;
+import com.dgtly.system.domain.SysUserShopExt;
+import com.dgtly.system.service.ISysUserShopExtService;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 门店人员信息扩展Service业务层处理
+ * 
+ * @author njs
+ * @date 2025-08-19
+ */
+@Service
+public class SysUserShopExtServiceImpl implements ISysUserShopExtService 
+{
+    @Autowired
+    private SysUserShopExtMapper sysUserShopExtMapper;
+
+    /**
+     * 查询门店人员信息扩展
+     * 
+     * @param userId 门店人员信息扩展ID
+     * @return 门店人员信息扩展
+     */
+    @Override
+    public SysUserShopExt selectSysUserShopExtById(String userId)
+    {
+        return sysUserShopExtMapper.selectSysUserShopExtById(userId);
+    }
+
+    /**
+     * 查询门店人员信息扩展列表
+     * 
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 门店人员信息扩展
+     */
+    @Override
+    public List<SysUserShopExt> selectSysUserShopExtList(SysUserShopExt sysUserShopExt)
+    {
+        return sysUserShopExtMapper.selectSysUserShopExtList(sysUserShopExt);
+    }
+
+    /**
+     * 新增门店人员信息扩展
+     * 
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 结果
+     */
+    @Override
+    public int insertSysUserShopExt(SysUserShopExt sysUserShopExt)
+    {
+        sysUserShopExt.setCreateTime(DateUtils.getNowDate());
+        return sysUserShopExtMapper.insertSysUserShopExt(sysUserShopExt);
+    }
+
+    /**
+     * 修改门店人员信息扩展
+     * 
+     * @param sysUserShopExt 门店人员信息扩展
+     * @return 结果
+     */
+    @Override
+    public int updateSysUserShopExt(SysUserShopExt sysUserShopExt)
+    {
+        sysUserShopExt.setUpdateTime(DateUtils.getNowDate());
+        return sysUserShopExtMapper.updateSysUserShopExt(sysUserShopExt);
+    }
+
+    /**
+     * 删除门店人员信息扩展对象
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysUserShopExtByIds(String ids)
+    {
+        return sysUserShopExtMapper.deleteSysUserShopExtByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除门店人员信息扩展信息
+     * 
+     * @param userId 门店人员信息扩展ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysUserShopExtById(String userId)
+    {
+        return sysUserShopExtMapper.deleteSysUserShopExtById(userId);
+    }
+}

+ 23 - 14
suishenbang-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -18,10 +18,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateTime"   column="update_time"    />
 		<result property="remark"       column="remark"         />
 	</resultMap>
-	
+
 	<sql id="selectRoleContactVo">
         select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,
-            r.status, r.del_flag, r.create_time, r.remark 
+            r.status, r.del_flag, r.create_time, r.remark
         from sys_role r
 -- 	        left join sys_user_role ur on ur.role_id = r.role_id
 -- 	        left join sys_user u on u.user_id = ur.user_id
@@ -31,9 +31,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	        left join sys_user u on u.user_id = ur.user_id
 	        left join sys_dept d on u.dept_id = d.dept_id
     </sql>
-    
+
     <sql id="selectRoleVo">
-		select r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status, r.del_flag, r.create_time, r.remark 
+		select r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status, r.del_flag, r.create_time, r.remark
         from sys_role r
 	</sql>
 
@@ -66,33 +66,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<include refid="selectRoleContactVo"/>
 		WHERE r.del_flag = '0' and ur.user_id = #{userId}
 	</select>
-	
+
 	<select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		where r.del_flag = '0' and r.role_id = #{roleId}
 	</select>
-	
+
 	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		 where r.role_name=#{roleName}
 	</select>
-	
+
 	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		 where r.role_key=#{roleKey}
 	</select>
-	
+
 	<delete id="deleteRoleById" parameterType="Long">
  		delete from sys_role where role_id = #{roleId}
  	</delete>
- 	
+
  	<delete id="deleteRoleByIds" parameterType="Long">
  	    update sys_role set del_flag = '2' where role_id in
  		<foreach collection="array" item="roleId" open="(" separator="," close=")">
  			#{roleId}
-        </foreach> 
+        </foreach>
  	</delete>
- 	
+
  	<update id="updateRole" parameterType="SysRole">
  		update sys_role
  		<set>
@@ -107,7 +107,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		</set>
  		where role_id = #{roleId}
 	</update>
- 	
+
  	<insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
  		insert into sys_role(
  			<if test="roleId != null and roleId != 0">role_id,</if>
@@ -131,5 +131,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			sysdate()
  		)
 	</insert>
-	
-</mapper> 
+
+	<select id="selectRoleIdByRoleKey" resultType="java.lang.Long">
+		SELECT
+			role_id
+		FROM
+			sys_role
+		WHERE
+			role_key = #{roleKey} and del_flag='0' limit 1
+	</select>
+
+</mapper>

+ 24 - 18
suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -219,7 +219,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	<select id="selectUserByLoginName" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
-		where u.login_name = #{userName} and u.quit is null and u.del_flag ='0' GROUP BY login_name
+		where u.login_name = #{userName} and u.quit is null and u.del_flag ='0' and suse.del_flag ='0' GROUP BY login_name
 	</select>
 
 	<select id="selectUserByIsManager"  resultType="java.lang.String">
@@ -230,7 +230,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="isCustomerManager !=null ">
 			and suse.is_customer_manager  like concat('%',#{isCustomerManager}, '%')
 		</if>
-		 and u.quit is null
+		 and u.quit is null and u.del_flag ='0' and suse.del_flag ='0'
 		  and u.login_name is not null
 	</select>
 
@@ -283,12 +283,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	<select id="selectUserByPhoneNumber" parameterType="String" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
-		where u.phonenumber = #{phonenumber}
+		where u.phonenumber = #{phonenumber}  and u.quit is null and u.del_flag ='0' and suse.del_flag ='0'
 	</select>
 
 	<select id="selectUserByEmail" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
-		where u.email = #{email}  and del_flag='0'  and quit is null
+		where u.email = #{email}  and u.del_flag='0'  and u.quit is null   and suse.del_flag ='0'
 	</select>
 
 	<select id="checkLoginNameUnique"  resultType="int">
@@ -305,7 +305,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
-		where u.user_id = #{userId}  and u.del_flag='0'  and u.quit is null
+		where u.user_id = #{userId}  and u.del_flag='0'  and u.quit is null  and suse.del_flag ='0'
 	</select>
 
 	<delete id="deleteUserById" parameterType="Long">
@@ -351,6 +351,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="isConsignee != null">is_consignee = #{isConsignee},</if>
  			<if test="isSync != null">is_sync = #{isSync},</if>
 			<if test="quit != null">quit = #{quit},</if>
+			<if test="isShopAccount != null">is_shop_account = #{isShopAccount},</if>
  			update_time = sysdate()
  		</set>
  		where user_id = #{userId}
@@ -419,6 +420,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+			<if test="isShopAccount != null and isShopAccount != ''">is_shop_account,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -435,7 +437,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
- 			sysdate()
+			<if test="isShopAccount != null and isShopAccount != ''">#{isShopAccount},</if>
+
+		sysdate()
  		)
 	</insert>
 
@@ -444,12 +448,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectAllUserLoginName"  resultType="java.lang.String">
         select u.login_name
-        from sys_user u  where u.quit is null
+        from sys_user u  where u.quit is null and u.del_flag='0'
 	</select>
 
 	<select id="selectDiyUserLoginName"  resultType="java.lang.String">
         select distinct(u.login_name)
-        from sys_user u left join sys_user_ext b on u.user_id = b.user_id where b.post_name='DIY经销商' and   u.quit is null
+        from sys_user u left join sys_user_ext b on u.user_id = b.user_id where b.post_name='DIY经销商' and   u.quit is null and u.del_flag='0' and b.del_flag='0'
 	</select>
 
     <insert id="insertUserNoKey" parameterType="SysUser" >
@@ -483,7 +487,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	<select id="selectUserByEmplyeeId" parameterType="String" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
-		where suse.sap_employee_id = #{emplyeeId}
+		where suse.sap_employee_id = #{emplyeeId}  and suse.del_flag ='0'
 	</select>
 
 
@@ -494,19 +498,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<foreach collection="array" item="customerCode" open="(" separator="," close=")">
 			#{customerCode}
 		</foreach>
-		and sue.is_customer_manager != 0
+		and sue.is_customer_manager != 0 and su.quit is null and su.del_flag = '0' and sue.del_flag = '0'
 		GROUP BY sue.org_code
 	</select>
 
 	<select id="selectLoginNamesByOrgCodeSelf" resultType="java.util.Map" parameterType="String">
 		select  sue.org_code customer_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser from sys_user  su
 		left join sys_user_ext sue on sue.user_id = su.user_id
-		where 1=1
+		where sue.del_flag = '0'
 		and sue.org_code =#{customerCode}
 		and sue.is_customer_manager in ('1','2','3')
 		and  sue.is_customer_manager != 0
 		and su.quit is null
-		and su.del_flag = 0
+		and su.del_flag = '0'
 		GROUP BY sue.org_code
 	</select>
 
@@ -520,7 +524,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		WHERE
 			c.customer_id =#{customerId}
 		 	and u.quit is null
-		    and u.del_flag = 0
+		    and u.del_flag = '0'
+			and e.del_flag = '0'
 		GROUP BY
 			u.user_id limit 1
 	</select>
@@ -528,7 +533,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="selectLoginNamesByCustomerModelVO" resultType="java.util.Map" parameterType="String">
 		select DISTINCT sue.org_code customer_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser from sys_user  su
 		left join sys_user_ext sue on sue.user_id = su.user_id
-		where 1=1
+		where su.quit is null and su.del_flag = '0' and sue.del_flag = '0'
 		<if test="customerCode !=null and customerCode !='' ">
 			and sue.org_code =#{customerCode}
 		</if>
@@ -545,7 +550,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="selectLoginNamesByCostumerCode1" resultType="java.util.Map" parameterType="String">
 		select DISTINCT sue.org_code customer_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser from sys_user  su
 		left join sys_user_ext sue on sue.user_id = su.user_id
-		where sue.org_code in
+		where su.quit is null and su.del_flag = '0' and sue.del_flag = '0' and sue.org_code in
 		<foreach collection="array" item="customerCode" open="(" separator="," close=")">
 			#{customerCode}
 		</foreach>
@@ -555,7 +560,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="selectLoginNamesByEmployeeCode" resultType="Map" parameterType="String">
 		select DISTINCT sue.sap_employee_id employee_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser ,sue.org_code from sys_user  su
 		left join sys_user_ext sue on sue.user_id = su.user_id
-		where sue.sap_employee_id in
+		where su.quit is null and su.del_flag = '0' and sue.del_flag = '0' and sue.sap_employee_id in
 		<foreach collection="array" item="employeeCode" open="(" separator="," close=")">
 			#{employeeCode}
 		</foreach>
@@ -576,7 +581,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		LEFT JOIN sys_user_ext v ON u.user_id = v.user_id
 		left join sys_user_customer_authorization a on a.user_id = u.user_id
 		WHERE
-			v.org_code =#{orgCode} and u.quit is null
+			v.org_code =#{orgCode} and u.quit is null and u.del_flag = '0' and v.del_flag = '0'
 			and v.is_customer_manager !='0' and v.is_customer_manager !='8' GROUP BY 	u.user_id
 	</select>
 
@@ -622,7 +627,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 					phonenumber,
 					user_name
 				HAVING
-					count(*) > 1) and u.del_flag=0 and u.quit is null
+					count(*) > 1) and u.del_flag = '0' and u.quit is null and e.del_flag = '0'
 				and e.is_customer_manager is null order by user_name
 	</select>
 
@@ -632,5 +637,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			sys_user u
 				LEFT JOIN sys_user_ext suse ON suse.user_id = u.user_id
 		where u.user_id = #{userId}
+		  and u.del_flag = '0' and u.quit is null and suse.del_flag = '0'
 	</select>
 </mapper>

+ 13 - 9
suishenbang-system/src/main/resources/mapper/system/SysUserRoleMapper.xml

@@ -12,25 +12,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<delete id="deleteUserRoleByUserId" parameterType="Long">
 		delete from sys_user_role where user_id=#{userId}
 	</delete>
-	
+
 	<select id="countUserRoleByRoleId" resultType="Integer">
-	    select count(1) from sys_user_role where role_id=#{roleId}  
+	    select count(1) from sys_user_role where role_id=#{roleId}
 	</select>
-	
+
 	<delete id="deleteUserRole" parameterType="Long">
  		delete from sys_user_role where user_id in
  		<foreach collection="array" item="userId" open="(" separator="," close=")">
  			#{userId}
-        </foreach> 
+        </foreach>
  	</delete>
-	
+
 	<insert id="batchUserRole">
 		insert into sys_user_role(user_id, role_id) values
 		<foreach item="item" index="index" collection="list" separator=",">
 			(#{item.userId},#{item.roleId})
 		</foreach>
 	</insert>
-	
+
 	<delete id="deleteUserRoleInfo" parameterType="SysUserRole">
 		delete from sys_user_role where 1=1
 		<if test="userId !=null and userId !='' ">
@@ -41,11 +41,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</if>
 
 	</delete>
-	
+
 	<delete id="deleteUserRoleInfos">
 	    delete from sys_user_role where role_id=#{roleId} and user_id in
  	    <foreach collection="userIds" item="userId" open="(" separator="," close=")">
  	        #{userId}
-            </foreach> 
+            </foreach>
+	</delete>
+
+	<delete id="deleteUserRoleByUserIdAndExt">
+		delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} and shop_type=#{shopType}
 	</delete>
-</mapper> 
+</mapper>

+ 13 - 10
suishenbang-system/src/main/resources/mapper/system/SysUserSalesExtMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.dgtly.system.mapper.SysUserExtMapper">
-    
+
     <resultMap type="SysUserExt" id="SysUserExtResult">
         <result property="userId"    column="user_id"    />
         <result property="orgCode"    column="org_code"    />
@@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectSysUserExtList" parameterType="SysUserExt" resultMap="SysUserExtResult">
         <include refid="selectSysUserExtVo"/>
-        <where>  
+        <where>
             <if test="orgCode != null  and orgCode != ''"> and org_code = #{orgCode}</if>
             <if test="salesLevel != null  and salesLevel != ''"> and sales_level = #{salesLevel}</if>
             <if test="orgName != null  and orgName != ''"> and org_name like concat('%', #{orgName}, '%')</if>
@@ -39,16 +39,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="postName != null  and postName != ''"> and post_name like concat('%', #{postName}, '%')</if>
         </where>
     </select>
-    
+
     <select id="selectSysUserExtById" parameterType="Long" resultMap="SysUserExtResult">
         <include refid="selectSysUserExtVo"/>
-        where user_id = #{userId}
+        where user_id = #{userId} and del_flag ='0'
     </select>
     <select id="selectSysUserCustomerExtById" parameterType="Long" resultMap="SysUserExtResult">
         <include refid="selectSysUserExtVo"/>
-        where user_id = #{userId} and is_customer_manager  NOT LIKE ('%0%,%8%' )
+        where user_id = #{userId} and del_flag ='0' and is_customer_manager  NOT LIKE ('%0%,%8%' )
     </select>
-        
+
     <insert id="insertSysUserExt" parameterType="SysUserExt">
         insert into sys_user_ext
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -95,6 +95,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="postCode != null and postCode != ''">  post_code = #{postCode},</if>
             <if test="postName != null  and postName != ''">  post_name = #{postName}, </if>
             <if test="identity != null  and identity != ''">  identity = #{identity}, </if>
+            <if test="delFlag != null  and delFlag != ''">  del_flag = #{delFlag}, </if>
+            <if test="delTime != null  and delTime != ''">  del_time = #{delTime}, </if>
         </trim>
         where user_id = #{userId}
     </update>
@@ -175,7 +177,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectEmployeeIdsByBossEmployeeId" parameterType="String" resultType="String">
         select sap_employee_id
         from sys_user_ext
-        where boss_employee_id = #{bossEmployeeId,}
+        where boss_employee_id = #{bossEmployeeId,} and del_flag ='0'
     </select>
     <select id="selectSysUserExtListByUserId" resultMap="SysUserExtResult">
         SELECT
@@ -194,12 +196,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             sys_user_ext sue
         LEFT JOIN ass_relcustomerinfo ar ON sue.customer_code = ar.mainkunnr
         WHERE
-            ar.glfs != '开票方关联'
+            ar.glfs != '开票方关联' and sue.del_flag ='0'
         AND user_id = #{userId}
     </select>
 
     <select id="selectSysUserExtBySapEmployeeId" resultType="int">
-        select count(1) from sys_user_ext where sap_employee_id = #{sapEmployeeId}
+        select count(1) from sys_user_ext where sap_employee_id = #{sapEmployeeId} and del_flag ='0'
     </select>
 
     <select id="selectUserExtList" resultType="com.dgtly.system.domain.SysUserExt">
@@ -214,7 +216,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             u.is_sync ='0'
               and u.quit is null
               and u.del_flag='0'
+              and e.del_flag ='0'
         GROUP BY
             e.user_id
     </select>
-</mapper>
+</mapper>

+ 123 - 0
suishenbang-system/src/main/resources/mapper/system/SysUserShopExtMapper.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dgtly.system.mapper.SysUserShopExtMapper">
+
+    <resultMap type="SysUserShopExt" id="SysUserShopExtResult">
+        <result property="userId"    column="user_id"    />
+        <result property="loginName"    column="login_name"    />
+        <result property="shopCode"    column="shop_code"    />
+        <result property="shopName"    column="shop_name"    />
+        <result property="isShopType"    column="is_shop_type"    />
+        <result property="subofficeCode"    column="subOffice_code"    />
+        <result property="subofficeName"    column="subOffice_name"    />
+        <result property="userUpdateTime"    column="user_update_time"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="delTime"    column="del_time"    />
+        <result property="constraintUserId"    column="constraint_user_id"    />
+        <result property="createTime"    column="create_time"    />
+    </resultMap>
+
+    <sql id="selectSysUserShopExtVo">
+        select user_id, login_name, shop_code, shop_name, is_shop_type, subOffice_code, subOffice_name, user_update_time, del_flag, del_time, create_time,constraint_user_id from sys_user_shop_ext
+    </sql>
+
+    <select id="selectSysUserShopExtList" parameterType="SysUserShopExt" resultMap="SysUserShopExtResult">
+        <include refid="selectSysUserShopExtVo"/>
+        <where>
+            <if test="userId != null  and userId != ''"> and user_id = #{userId}</if>
+            <if test="loginName != null  and loginName != ''"> and login_name like concat('%', #{loginName}, '%')</if>
+            <if test="shopCode != null  and shopCode != ''"> and shop_code = #{shopCode}</if>
+            <if test="shopName != null  and shopName != ''"> and shop_name like concat('%', #{shopName}, '%')</if>
+            <if test="isShopType != null  and isShopType != ''"> and is_shop_type = #{isShopType}</if>
+            <if test="subofficeCode != null  and subofficeCode != ''"> and subOffice_code = #{subofficeCode}</if>
+            <if test="subofficeName != null  and subofficeName != ''"> and subOffice_name like concat('%', #{subofficeName}, '%')</if>
+            <if test="userUpdateTime != null  and userUpdateTime != ''"> and user_update_time = #{userUpdateTime}</if>
+            <if test="delTime != null "> and del_time = #{delTime}</if>
+            <if test="constraintUserId != null and constraintUserId !='' "> and constraint_user_id = #{constraintUserId}</if>
+        </where>
+    </select>
+
+    <select id="selectSysUserShopExtById" parameterType="String" resultMap="SysUserShopExtResult">
+        <include refid="selectSysUserShopExtVo"/>
+        where user_id = #{userId} and delFlag='0'
+    </select>
+
+    <insert id="insertSysUserShopExt" parameterType="SysUserShopExt">
+        insert into sys_user_shop_ext
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null  and userId != ''">user_id,</if>
+            <if test="loginName != null  and loginName != ''">login_name,</if>
+            <if test="shopCode != null  and shopCode != ''">shop_code,</if>
+            <if test="shopName != null  and shopName != ''">shop_name,</if>
+            <if test="isShopType != null  and isShopType != ''">is_shop_type,</if>
+            <if test="subofficeCode != null  and subofficeCode != ''">subOffice_code,</if>
+            <if test="subofficeName != null  and subofficeName != ''">subOffice_name,</if>
+            <if test="userUpdateTime != null  and userUpdateTime != ''">user_update_time,</if>
+            <if test="delFlag != null  and delFlag != ''">del_flag,</if>
+            <if test="delTime != null ">del_time,</if>
+            <if test="constraintUserId != null ">constraint_user_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null  and userId != ''">#{userId},</if>
+            <if test="loginName != null  and loginName != ''">#{loginName},</if>
+            <if test="shopCode != null  and shopCode != ''">#{shopCode},</if>
+            <if test="shopName != null  and shopName != ''">#{shopName},</if>
+            <if test="isShopType != null  and isShopType != ''">#{isShopType},</if>
+            <if test="subofficeCode != null  and subofficeCode != ''">#{subofficeCode},</if>
+            <if test="subofficeName != null  and subofficeName != ''">#{subofficeName},</if>
+            <if test="userUpdateTime != null  and userUpdateTime != ''">#{userUpdateTime},</if>
+            <if test="delFlag != null  and delFlag != ''">#{delFlag},</if>
+            <if test="delTime != null ">#{delTime},</if>
+            <if test="constraintUserId != null ">#{constraintUserId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysUserShopExt" parameterType="SysUserShopExt">
+        update sys_user_shop_ext
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="loginName != null  and loginName != ''">login_name = #{loginName},</if>
+            <if test="shopCode != null  and shopCode != ''">shop_code = #{shopCode},</if>
+            <if test="shopName != null  and shopName != ''">shop_name = #{shopName},</if>
+            <if test="isShopType != null  and isShopType != ''">is_shop_type = #{isShopType},</if>
+            <if test="subofficeCode != null  and subofficeCode != ''">subOffice_code = #{subofficeCode},</if>
+            <if test="subofficeName != null  and subofficeName != ''">subOffice_name = #{subofficeName},</if>
+            <if test="userUpdateTime != null  and userUpdateTime != ''">user_update_time = #{userUpdateTime},</if>
+            <if test="delFlag != null  and delFlag != ''">del_flag = #{delFlag},</if>
+            <if test="delTime != null ">del_time = #{delTime},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+        </trim>
+        where user_id = #{userId}
+    </update>
+
+    <delete id="deleteSysUserShopExtById" parameterType="String">
+        delete from sys_user_shop_ext where user_id = #{userId}
+    </delete>
+
+    <delete id="deleteSysUserShopExtByIds" parameterType="String">
+        delete from sys_user_shop_ext where user_id in
+        <foreach item="userId" collection="array" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+
+    <select id="searchRunTime" resultType="java.lang.String">
+        select max(user_update_time) from sys_user_shop_ext
+    </select>
+
+    <update id="deleteUserShopExt" >
+        update sys_user_shop_ext set del_flag = 2, del_time = now()
+           where user_id =#{userId} and login_name = #{loginName} and shop_code = #{shopCode} and  is_shop_type = #{isShopType}
+    </update>
+
+    <delete id="deletePhysicsUserShopExt">
+        delete from sys_user_shop_ext where user_id =#{userId} and login_name = #{loginName} and shop_code = #{shopCode} and  is_shop_type = #{isShopType}
+    </delete>
+
+    <select id="selectLoginNameByUserId" resultType="java.lang.String">
+        select login_name from sys_user_shop_ext
+          where constraint_user_id = #{dataUserId} and shop_code = #{shopCode} and  is_shop_type = #{isShopType} limit 1
+    </select>
+
+</mapper>