瀏覽代碼

多店铺代码迁移1

chenguo 2 周之前
父節點
當前提交
333820f934
共有 22 個文件被更改,包括 715 次插入40 次删除
  1. 5 5
      fs-service/src/main/java/com/fs/hisStore/mapper/FsDataScrmMapper.java
  2. 64 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderLogsScrmService.java
  3. 0 1
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsPrescribeScrmStoreServiceImpl.java
  4. 0 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreAfterSalesScrmServiceImpl.java
  5. 0 4
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreExtractScrmServiceImpl.java
  6. 0 4
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderBillLogScrmServiceImpl.java
  7. 105 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderLogsScrmServiceImpl.java
  8. 3 3
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  9. 0 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreScrmServiceImpl.java
  10. 49 6
      fs-store/src/main/java/com/fs/framework/config/SecurityConfig.java
  11. 9 1
      fs-store/src/main/java/com/fs/framework/security/filter/JwtAuthenticationTokenFilter.java
  12. 51 0
      fs-store/src/main/java/com/fs/framework/security/handle/LogoutSuccessScrmHandlerImpl.java
  13. 122 0
      fs-store/src/main/java/com/fs/framework/service/LoginServiceScrm.java
  14. 105 0
      fs-store/src/main/java/com/fs/framework/service/TokenService.java
  15. 61 0
      fs-store/src/main/java/com/fs/framework/service/UserDetailsScrmServiceImpl.java
  16. 1 1
      fs-store/src/main/java/com/fs/hisStore/controller/store/DataScrmController.java
  17. 4 4
      fs-store/src/main/java/com/fs/hisStore/controller/store/FsMaterialGroupScrmController.java
  18. 4 4
      fs-store/src/main/java/com/fs/hisStore/controller/store/FsMaterialScrmController.java
  19. 1 1
      fs-store/src/main/java/com/fs/hisStore/controller/store/FsPrescribeScrmController.java
  20. 1 1
      fs-store/src/main/java/com/fs/hisStore/controller/store/FsStoreBillScrmController.java
  21. 1 1
      fs-store/src/main/java/com/fs/hisStore/controller/store/FsStoreExtractScrmController.java
  22. 129 0
      fs-store/src/main/java/com/fs/hisStore/controller/store/FsStoreInfoScrmController.java

+ 5 - 5
fs-service/src/main/java/com/fs/hisStore/mapper/FsDataScrmMapper.java

@@ -16,7 +16,7 @@ public interface FsDataScrmMapper {
 
     @Select("SELECT t1.month AS label,\n" +
             "       IFNULL(ROUND(SUM(fs_store_order_scrm.pay_money)), 0) AS value,\n" +
-            "       COUNT(fs_store_order_scrm.order_id) AS info\n" +
+            "       COUNT(fs_store_order_scrm.id) AS info\n" +
             "FROM\n" +
             "  (SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL n MONTH), '%Y-%m') AS month\n" +
             "   FROM (\n" +
@@ -39,7 +39,7 @@ public interface FsDataScrmMapper {
 
     @Select("SELECT t1.month AS label,\n" +
             "       IFNULL(ROUND(SUM(fs_store_order_scrm.pay_money)), 0) AS value,\n" +
-            "       COUNT(fs_store_order_scrm.order_id) AS info\n" +
+            "       COUNT(fs_store_order_scrm.id) AS info\n" +
             "FROM\n" +
             "  (SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL n MONTH), '%Y-%m') AS month\n" +
             "   FROM (\n" +
@@ -311,7 +311,7 @@ public interface FsDataScrmMapper {
     List<ChartDataVO> getYearstoreOrderChart(Long storeId);
     @Select({"<script> " +"SELECT t1.month AS label,\n" +
             "       IFNULL(ROUND(SUM(fs_store_order_scrm.pay_money)), 0) AS value,\n" +
-            "       COUNT(fs_store_order_scrm.order_id) AS info\n" +
+            "       COUNT(fs_store_order_scrm.id) AS info\n" +
             "FROM\n" +
             "  (SELECT DATE_FORMAT(DATE_SUB(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%01-01'), INTERVAL 1 DAY), INTERVAL n MONTH), '%Y-%m') AS month\n" +
             "   FROM (\n" +
@@ -559,7 +559,7 @@ public interface FsDataScrmMapper {
     @Select({"<script> " +"SELECT label,value,info FROM(\n" +
             "SELECT t1.month AS label,\n" +
             "       IFNULL(ROUND(SUM(fs_store_order_scrm.pay_money)), 0) AS value,\n" +
-            "       COUNT(fs_store_order_scrm.order_id) AS info\n" +
+            "       COUNT(fs_store_order_scrm.id) AS info\n" +
             "FROM\n" +
             "  (SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL n MONTH), '%Y-%m') AS month\n" +
             "   FROM (\n" +
@@ -627,7 +627,7 @@ public interface FsDataScrmMapper {
 
     @Select({"<script> " +"SELECT t1.month AS label,\n" +
             "       IFNULL(ROUND(SUM(fs_store_order_scrm.pay_money)), 0) AS value,\n" +
-            "       COUNT(fs_store_order_scrm.order_id) AS info\n" +
+            "       COUNT(fs_store_order_scrm.id) AS info\n" +
             "FROM\n" +
             "  (SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL n MONTH), '%Y-%m') AS month\n" +
             "   FROM (\n" +

+ 64 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderLogsScrmService.java

@@ -0,0 +1,64 @@
+package com.fs.hisStore.service;
+
+import com.fs.hisStore.domain.FsStoreOrderLogsScrm;
+
+import java.util.List;
+
+/**
+ * 订单操作记录Service接口
+ *
+ * @author fs
+ * @date 2023-08-11
+ */
+public interface IFsStoreOrderLogsScrmService
+{
+    /**
+     * 查询订单操作记录
+     *
+     * @param logsId 订单操作记录主键
+     * @return 订单操作记录
+     */
+    public FsStoreOrderLogsScrm selectFsStoreOrderLogsByLogsId(String logsId);
+
+    /**
+     * 查询订单操作记录列表
+     *
+     * @param fsStoreOrderLogs 订单操作记录
+     * @return 订单操作记录集合
+     */
+    public List<FsStoreOrderLogsScrm> selectFsStoreOrderLogsList(FsStoreOrderLogsScrm fsStoreOrderLogs);
+
+    /**
+     * 新增订单操作记录
+     *
+     * @param fsStoreOrderLogs 订单操作记录
+     * @return 结果
+     */
+    public int insertFsStoreOrderLogs(FsStoreOrderLogsScrm fsStoreOrderLogs);
+
+    /**
+     * 修改订单操作记录
+     *
+     * @param fsStoreOrderLogs 订单操作记录
+     * @return 结果
+     */
+    public int updateFsStoreOrderLogs(FsStoreOrderLogsScrm fsStoreOrderLogs);
+
+    /**
+     * 批量删除订单操作记录
+     *
+     * @param logsIds 需要删除的订单操作记录主键集合
+     * @return 结果
+     */
+    public int deleteFsStoreOrderLogsByLogsIds(String[] logsIds);
+
+    /**
+     * 删除订单操作记录信息
+     *
+     * @param logsId 订单操作记录主键
+     * @return 结果
+     */
+    public int deleteFsStoreOrderLogsByLogsId(String logsId);
+
+    int create(Long orderId, String type, String msg);
+}

+ 0 - 1
fs-service/src/main/java/com/fs/hisStore/service/impl/FsPrescribeScrmStoreServiceImpl.java

@@ -18,7 +18,6 @@ import com.fs.his.mapper.*;
 import com.fs.his.param.*;
 import com.fs.his.service.IFsDoctorService;
 import com.fs.his.service.IFsPrescribeDrugService;
-import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.his.vo.*;

+ 0 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreAfterSalesScrmServiceImpl.java

@@ -23,7 +23,6 @@ import com.fs.his.domain.*;
 import com.fs.his.enums.FsStoreAfterSalesStatusEnum;
 import com.fs.his.enums.FsStoreOrderStatusEnum;
 import com.fs.his.mapper.*;
-import com.fs.his.service.IFsStoreOrderBillLogService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsStoreAfterSalesExcelVO;
 import com.fs.his.vo.FsStoreAfterSalesLogsVO;
@@ -51,7 +50,6 @@ import com.fs.tzBankPay.TzBankService.TzBankService;
 import com.fs.tzBankPay.doman.RefundParam;
 import com.fs.tzBankPay.doman.RefundResult;
 import com.fs.tzBankPay.doman.TzBankResult;
-import com.fs.ybPay.dto.RefundDTO;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult;

+ 0 - 4
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreExtractScrmServiceImpl.java

@@ -5,10 +5,6 @@ import com.fs.common.utils.DateUtils;
 import com.fs.hisStore.domain.FsStoreScrm;
 import com.fs.hisStore.domain.FsStoreBillScrm;
 import com.fs.hisStore.domain.FsStoreExtractScrm;
-import com.fs.his.mapper.FsStoreBillMapper;
-import com.fs.his.mapper.FsStoreExtractMapper;
-import com.fs.his.mapper.FsStoreMapper;
-import com.fs.his.service.IFsStoreExtractService;
 import com.fs.his.vo.FsStoreExtractVO;
 import com.fs.hisStore.mapper.FsStoreBillScrmMapper;
 import com.fs.hisStore.mapper.FsStoreExtractScrmMapper;

+ 0 - 4
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderBillLogScrmServiceImpl.java

@@ -8,12 +8,8 @@ import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.IdUtils;
 import com.fs.his.enums.FsInquiryOrderStatusEnum;
-import com.fs.his.mapper.FsStoreOrderBillLogMapper;
 import com.fs.his.param.BillListParam;
 import com.fs.his.param.OrderBillParam;
-import com.fs.his.service.IFsStoreOrderBillLogService;
-import com.fs.his.service.IFsStoreOrderItemService;
-import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.vo.FsStoreOrderBillLogVo;
 import com.fs.his.vo.FsStoreOrderItemListDVO;
 import com.fs.hisStore.domain.FsStoreOrderBillLogScrm;

+ 105 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderLogsScrmServiceImpl.java

@@ -0,0 +1,105 @@
+package com.fs.hisStore.service.impl;
+
+import com.fs.hisStore.domain.FsStoreOrderLogsScrm;
+import com.fs.hisStore.mapper.FsStoreOrderLogsScrmMapper;
+import com.fs.hisStore.service.IFsStoreOrderLogsScrmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 订单操作记录Service业务层处理
+ *
+ * @author fs
+ * @date 2023-08-11
+ */
+@Service
+public class FsStoreOrderLogsScrmServiceImpl implements IFsStoreOrderLogsScrmService
+{
+    @Autowired
+    private FsStoreOrderLogsScrmMapper fsStoreOrderLogsMapper;
+
+    /**
+     * 查询订单操作记录
+     *
+     * @param logsId 订单操作记录主键
+     * @return 订单操作记录
+     */
+    @Override
+    public FsStoreOrderLogsScrm selectFsStoreOrderLogsByLogsId(String logsId)
+    {
+        return fsStoreOrderLogsMapper.selectFsStoreOrderLogsByLogsId(logsId);
+    }
+
+    /**
+     * 查询订单操作记录列表
+     *
+     * @param fsStoreOrderLogs 订单操作记录
+     * @return 订单操作记录
+     */
+    @Override
+    public List<FsStoreOrderLogsScrm> selectFsStoreOrderLogsList(FsStoreOrderLogsScrm fsStoreOrderLogs)
+    {
+        return fsStoreOrderLogsMapper.selectFsStoreOrderLogsList(fsStoreOrderLogs);
+    }
+
+    /**
+     * 新增订单操作记录
+     *
+     * @param fsStoreOrderLogs 订单操作记录
+     * @return 结果
+     */
+    @Override
+    public int insertFsStoreOrderLogs(FsStoreOrderLogsScrm fsStoreOrderLogs)
+    {
+        return fsStoreOrderLogsMapper.insertFsStoreOrderLogs(fsStoreOrderLogs);
+    }
+
+    /**
+     * 修改订单操作记录
+     *
+     * @param fsStoreOrderLogs 订单操作记录
+     * @return 结果
+     */
+    @Override
+    public int updateFsStoreOrderLogs(FsStoreOrderLogsScrm fsStoreOrderLogs)
+    {
+        return fsStoreOrderLogsMapper.updateFsStoreOrderLogs(fsStoreOrderLogs);
+    }
+
+    /**
+     * 批量删除订单操作记录
+     *
+     * @param logsIds 需要删除的订单操作记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreOrderLogsByLogsIds(String[] logsIds)
+    {
+        return fsStoreOrderLogsMapper.deleteFsStoreOrderLogsByLogsIds(logsIds);
+    }
+
+    /**
+     * 删除订单操作记录信息
+     *
+     * @param logsId 订单操作记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreOrderLogsByLogsId(String logsId)
+    {
+        return fsStoreOrderLogsMapper.deleteFsStoreOrderLogsByLogsId(logsId);
+    }
+
+    @Override
+    public int create(Long orderId, String type, String msg) {
+        FsStoreOrderLogsScrm logs=new FsStoreOrderLogsScrm();
+        logs.setOrderId(orderId);
+        logs.setChangeType(type);
+        logs.setChangeMessage(msg);
+        logs.setCreateTime(new Date());
+        return fsStoreOrderLogsMapper.insertFsStoreOrderLogs(logs);
+    }
+}

+ 3 - 3
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -49,8 +49,6 @@ import com.fs.his.enums.FsStoreOrderStatusEnum;
 import com.fs.his.mapper.*;
 import com.fs.his.param.FsStoreOrderSalesParam;
 import com.fs.his.service.IFsPrescribeService;
-import com.fs.his.service.IFsStoreAfterSalesService;
-import com.fs.his.service.IFsStoreOrderLogsService;
 import com.fs.his.service.IFsUserWatchService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsInquiryOrderVO;
@@ -95,6 +93,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -170,6 +169,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
     private IFsExpressScrmService expressService;
 
     @Autowired
+    @Lazy
     private IFsPrescribeService fsPrescribeService;
 
     @Autowired
@@ -278,7 +278,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
     private FsInquiryOrderMapper fsInquiryOrderMapper;
 
     @Autowired
-    private IFsStoreOrderLogsService fsStoreOrderLogsService;//
+    private IFsStoreOrderLogsScrmService fsStoreOrderLogsService;//
 
     @Autowired
     private FsStoreProductAttrValueScrmMapper fsStoreProductAttrValueMapper;

+ 0 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreScrmServiceImpl.java

@@ -2,9 +2,7 @@ package com.fs.hisStore.service.impl;
 
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
-import com.fs.his.mapper.FsStoreMapper;
 import com.fs.his.param.FsStoreAuditParam;
-import com.fs.his.service.IFsStoreService;
 import com.fs.his.utils.StoreMD5PasswordEncoder;
 import com.fs.hisStore.domain.FsStoreScrm;
 import com.fs.hisStore.mapper.FsStoreScrmMapper;

+ 49 - 6
fs-store/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -4,6 +4,9 @@ package com.fs.framework.config;
 import com.fs.framework.security.filter.JwtAuthenticationTokenFilter;
 import com.fs.framework.security.handle.AuthenticationEntryPointImpl;
 import com.fs.framework.security.handle.LogoutSuccessHandlerImpl;
+import com.fs.framework.security.handle.LogoutSuccessScrmHandlerImpl;
+import com.fs.framework.service.UserDetailsScrmServiceImpl;
+import com.fs.framework.service.UserDetailsServiceImpl;
 import com.fs.store.utils.MD5PasswordEncoder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
@@ -18,7 +21,16 @@ import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import org.springframework.security.web.authentication.logout.LogoutFilter;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.filter.CorsFilter;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 /**
  * spring security配置
@@ -32,7 +44,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
      * 自定义用户认证逻辑
      */
     @Autowired
-    private UserDetailsService userDetailsService;
+    private UserDetailsServiceImpl userDetailsService;
+
+    @Autowired
+    private UserDetailsScrmServiceImpl userDetailsScrmService;
 
     /**
      * 认证失败处理类
@@ -46,6 +61,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
     @Autowired
     private LogoutSuccessHandlerImpl logoutSuccessHandler;
 
+    /**
+     * 退出处理类
+     */
+    @Autowired
+    private LogoutSuccessScrmHandlerImpl logoutSuccessScrmHandler;
+
     /**
      * token认证过滤器
      */
@@ -89,6 +110,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
     @Override
     protected void configure(HttpSecurity httpSecurity) throws Exception
     {
+
         httpSecurity
                 // CSRF禁用,因为不使用session
                 .csrf().disable()
@@ -99,7 +121,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage").anonymous()
+                .antMatchers("/login", "/register", "/captchaImage","/store/login").anonymous()
                 .antMatchers(
                         HttpMethod.GET,
                         "/",
@@ -125,7 +147,15 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .anyRequest().authenticated()
                 .and()
                 .headers().frameOptions().disable();
-        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
+        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler((request, response, authentication) -> {
+            boolean isNewStore = "1".equals(request.getHeader("isNewStore"));
+
+            if (isNewStore) {
+                logoutSuccessScrmHandler.onLogoutSuccess(request, response, authentication);
+            } else {
+                logoutSuccessHandler.onLogoutSuccess(request, response, authentication);
+            }
+        });
         // 添加JWT filter
         httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
         // 添加CORS filter
@@ -146,8 +176,21 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
      * 身份认证接口
      */
     @Override
-    protected void configure(AuthenticationManagerBuilder auth) throws Exception
-    {
-        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
+    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+        auth.userDetailsService(username -> {
+            HttpServletRequest request = getCurrentRequest();
+            boolean isNewStore = request != null && "1".equals(request.getHeader("isNewStore"));
+
+            UserDetailsService service = isNewStore ? userDetailsScrmService : userDetailsService;
+            return service.loadUserByUsername(username);
+        }).passwordEncoder(bCryptPasswordEncoder());
+    }
+
+    private HttpServletRequest getCurrentRequest() {
+        try {
+            return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
+        } catch (Exception e) {
+            return null;
+        }
     }
 }

+ 9 - 1
fs-store/src/main/java/com/fs/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -4,6 +4,8 @@ import com.fs.framework.service.TokenService;
 import com.fs.common.utils.SecurityUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.his.domain.StoreLoginUser;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -19,7 +21,7 @@ import java.io.IOException;
 
 /**
  * token过滤器 验证token有效性
- * 
+ *
 
  */
 @Component
@@ -33,6 +35,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
             throws ServletException, IOException
     {
         StoreLoginUser loginUser = tokenService.getLoginUser(request);
+        StoreLoginUserScrm loginUserScrm = tokenService.getLoginUserScrm(request);
         if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
         {
 
@@ -41,6 +44,11 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
             authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
             SecurityContextHolder.getContext().setAuthentication(authenticationToken);
 
+        }else if(loginUserScrm != null && StringUtils.isNull(SecurityUtils.getAuthentication())){
+            tokenService.verifyTokenScrm(loginUserScrm);
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUserScrm, null, loginUserScrm.getAuthorities());
+            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
         }
         chain.doFilter(request, response);
     }

+ 51 - 0
fs-store/src/main/java/com/fs/framework/security/handle/LogoutSuccessScrmHandlerImpl.java

@@ -0,0 +1,51 @@
+package com.fs.framework.security.handle;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.common.constant.HttpStatus;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.utils.ServletUtils;
+import com.fs.common.utils.StringUtils;
+import com.fs.framework.service.TokenService;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 自定义退出处理类 返回成功
+ *
+
+ */
+@Configuration
+public class LogoutSuccessScrmHandlerImpl implements LogoutSuccessHandler
+{
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 退出处理
+     *
+     * @return
+     */
+    @Override
+    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
+            throws IOException, ServletException
+    {
+        StoreLoginUserScrm loginUser = tokenService.getLoginUserScrm(request);
+        if (StringUtils.isNotNull(loginUser))
+        {
+            String userName = loginUser.getUsername();
+            // 删除用户缓存记录
+            tokenService.delLoginUser(loginUser.getToken());
+            // 记录用户退出日志
+           // AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"));
+        }
+        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.SUCCESS, "退出成功")));
+    }
+}

+ 122 - 0
fs-store/src/main/java/com/fs/framework/service/LoginServiceScrm.java

@@ -0,0 +1,122 @@
+package com.fs.framework.service;
+
+
+
+import com.fs.common.constant.Constants;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.exception.user.CaptchaException;
+import com.fs.common.exception.user.CaptchaExpireException;
+import com.fs.common.exception.user.UserPasswordNotMatchException;
+import com.fs.his.domain.StoreLoginUser;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
+import com.fs.system.service.ISysConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 登录校验方法
+ *
+
+ */
+@Component
+public class LoginServiceScrm
+{
+    @Autowired
+    private TokenService tokenService;
+
+    @Resource
+    private AuthenticationManager authenticationManager;
+
+    @Autowired
+    private RedisCache redisCache;
+
+
+    @Autowired
+    private ISysConfigService configService;
+
+    /**
+     * 登录验证
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @param code 验证码
+     * @param uuid 唯一标识
+     * @return 结果
+     */
+    public String login(String username, String password, String code, String uuid)
+    {
+        boolean captchaOnOff = configService.selectCaptchaOnOff();
+        // 验证码开关
+        if (captchaOnOff)
+        {
+            validateCaptcha(username, code, uuid);
+        }
+        // 用户验证
+        Authentication authentication = null;
+        try
+        {
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager
+                    .authenticate(new UsernamePasswordAuthenticationToken(username, password));
+
+        }
+        catch (Exception e)
+        {
+            if (e instanceof BadCredentialsException)
+            {
+              //  AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
+            else
+            {
+              //  AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        }
+//        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        StoreLoginUserScrm loginUser = (StoreLoginUserScrm) authentication.getPrincipal();
+//        recordLoginInfo(loginUser);
+        // 生成token
+        return tokenService.createTokenScrm(loginUser);
+    }
+
+    /**
+     * 校验验证码
+     *
+     * @param username 用户名
+     * @param code 验证码
+     * @param uuid 唯一标识
+     * @return 结果
+     */
+    public void validateCaptcha(String username, String code, String uuid)
+    {
+        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+        String captcha = redisCache.getCacheObject(verifyKey);
+        redisCache.deleteObject(verifyKey);
+        if (captcha == null)
+        {
+           // AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+            throw new CaptchaExpireException();
+        }
+        if (!code.equalsIgnoreCase(captcha))
+        {
+      //     AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+            throw new CaptchaException();
+        }
+    }
+
+//    /**
+//     * 记录登录信息
+//     */
+//    public void recordLoginInfo(StoreLoginUserScrm user)
+//    {
+//        user.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
+//    }
+}

+ 105 - 0
fs-store/src/main/java/com/fs/framework/service/TokenService.java

@@ -8,10 +8,13 @@ import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.uuid.IdUtils;
 
 import com.fs.his.domain.StoreLoginUser;
+import com.fs.hisStore.domain.FsStoreScrm;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
 import eu.bitwalker.useragentutils.UserAgent;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -230,4 +233,106 @@ public class TokenService
     {
         return Constants.LOGIN_TOKEN_KEY + uuid;
     }
+
+    /**
+     * 获取用户身份信息
+     *
+     * @return 用户信息
+     */
+    public StoreLoginUserScrm getLoginUserScrm(HttpServletRequest request)
+    {
+        // 获取请求携带的令牌
+        String token = getToken(request);
+        if (StringUtils.isNotEmpty(token))
+        {
+            try
+            {
+                Claims claims = parseToken(token);
+                // 解析对应的权限以及用户信息
+                String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
+                String userKey = getTokenKey(uuid);
+                StoreLoginUserScrm user = redisCache.getCacheObject(userKey);
+                return user;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 设置用户身份信息
+     */
+    public void setLoginUserScrm(StoreLoginUserScrm loginUser)
+    {
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
+        {
+            refreshTokenScrm(loginUser);
+        }
+    }
+
+    /**
+     * 创建令牌
+     *
+     * @param loginUser 用户信息
+     * @return 令牌
+     */
+    public String createTokenScrm(StoreLoginUserScrm loginUser)
+    {
+        String token = IdUtils.fastUUID();
+        loginUser.setToken(token);
+        setUserAgentScrm(loginUser);
+        refreshTokenScrm(loginUser);
+        Map<String, Object> claims = new HashMap<>();
+        claims.put(Constants.LOGIN_USER_KEY, token);
+        return createToken(claims);
+    }
+
+    /**
+     * 验证令牌有效期,相差不足20分钟,自动刷新缓存
+     *
+     * @param loginUser
+     * @return 令牌
+     */
+    public void verifyTokenScrm(StoreLoginUserScrm loginUser)
+    {
+        long expireTime = loginUser.getExpireTime();
+        long currentTime = System.currentTimeMillis();
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
+        {
+            refreshTokenScrm(loginUser);
+        }
+    }
+
+    /**
+     * 刷新令牌有效期
+     *
+     * @param loginUser 登录信息
+     */
+    public void refreshTokenScrm(StoreLoginUserScrm loginUser)
+    {
+        loginUser.setLoginTime(System.currentTimeMillis());
+        loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
+        // 根据uuid将loginUser缓存
+
+        String userKey = getTokenKey(loginUser.getToken());
+        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
+
+    }
+
+    /**
+     * 设置用户代理信息
+     *
+     * @param loginUser 登录信息
+     */
+    public void setUserAgentScrm(StoreLoginUserScrm loginUser)
+    {
+        UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+        String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
+        loginUser.setIpaddr(ip);
+        loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
+        loginUser.setBrowser(userAgent.getBrowser().getName());
+        loginUser.setOs(userAgent.getOperatingSystem().getName());
+    }
 }

+ 61 - 0
fs-store/src/main/java/com/fs/framework/service/UserDetailsScrmServiceImpl.java

@@ -0,0 +1,61 @@
+package com.fs.framework.service;
+
+
+
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.StringUtils;
+import com.fs.his.domain.FsStore;
+import com.fs.his.domain.StoreLoginUser;
+import com.fs.his.mapper.FsStoreMapper;
+import com.fs.hisStore.domain.FsStoreScrm;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
+import com.fs.hisStore.mapper.FsStoreScrmMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+/**
+ * 用户验证处理
+ *
+
+ */
+@Service
+public class UserDetailsScrmServiceImpl implements UserDetailsService
+{
+    private static final Logger log = LoggerFactory.getLogger(UserDetailsScrmServiceImpl.class);
+
+
+    @Autowired
+    private FsStoreScrmMapper fsStoreMapper;
+
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
+    {
+         FsStoreScrm user = fsStoreMapper.selectFsStoreByAccount(username);
+        if (StringUtils.isNull(user))
+        {
+            log.info("登录用户:{} 不存在.", username);
+            throw new ServiceException("登录用户:" + username + " 不存在");
+        }
+
+        else if (user.getStatus()==0)
+        {
+            log.info("登录用户:{} 已被停用.", username);
+            throw new ServiceException("对不起,您的店铺:" + username + " 已停用");
+        }
+
+        return createLoginUser(user);
+    }
+
+    public UserDetails createLoginUser(FsStoreScrm user)
+    {
+        StoreLoginUserScrm storeLoginUser = new StoreLoginUserScrm();
+        storeLoginUser.setFsStore(user);
+        return storeLoginUser;
+    }
+}

+ 1 - 1
fs-store/src/main/java/com/fs/hisStore/controller/store/DataScrmController.java

@@ -8,7 +8,7 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.his.dto.DataDTO;
 import com.fs.his.vo.*;
 import com.fs.hisStore.service.IFsDataScrmService;
-import com.fs.store.utils.UserUtil;
+import com.fs.hisStore.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;

+ 4 - 4
fs-store/src/main/java/com/fs/hisStore/controller/store/FsMaterialGroupScrmController.java

@@ -7,10 +7,10 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.his.domain.StoreLoginUser;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
 import com.fs.hisStore.domain.FsMaterialGroupScrm;
 import com.fs.hisStore.service.IFsMaterialGroupScrmStoreService;
-import com.fs.store.utils.UserUtil;
+import com.fs.hisStore.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -69,7 +69,7 @@ public class FsMaterialGroupScrmController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody FsMaterialGroupScrm fsMaterialGroup)
     {
-        StoreLoginUser loginUser = UserUtil.getLoginUser();
+        StoreLoginUserScrm loginUser = UserUtil.getLoginUser();
         fsMaterialGroup.setStoreId(loginUser.getFsStore().getStoreId());
         return toAjax(fsMaterialGroupService.insertFsMaterialGroup(fsMaterialGroup));
     }
@@ -97,7 +97,7 @@ public class FsMaterialGroupScrmController extends BaseController
     @GetMapping("/getAllList")
     public R getAllList(FsMaterialGroupScrm fsMaterialGroup)
     {
-        StoreLoginUser loginUser = UserUtil.getLoginUser();
+        StoreLoginUserScrm loginUser = UserUtil.getLoginUser();
         fsMaterialGroup.setStoreId(loginUser.getFsStore().getStoreId());
         List<FsMaterialGroupScrm> list = fsMaterialGroupService.selectFsMaterialGroupList(fsMaterialGroup);
         return R.ok().put("data",list);

+ 4 - 4
fs-store/src/main/java/com/fs/hisStore/controller/store/FsMaterialScrmController.java

@@ -6,10 +6,10 @@ import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.his.domain.StoreLoginUser;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
 import com.fs.hisStore.domain.FsMaterialScrm;
 import com.fs.hisStore.service.IFsMaterialScrmStoreService;
-import com.fs.store.utils.UserUtil;
+import com.fs.hisStore.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,7 +34,7 @@ public class FsMaterialScrmController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(FsMaterialScrm fsMaterial)
     {
-        StoreLoginUser loginUser = UserUtil.getLoginUser();
+        StoreLoginUserScrm loginUser = UserUtil.getLoginUser();
         fsMaterial.setStoreId(loginUser.getFsStore().getStoreId());
         startPage();
         List<FsMaterialScrm> list = fsMaterialService.selectFsMaterialList(fsMaterial);
@@ -70,7 +70,7 @@ public class FsMaterialScrmController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody FsMaterialScrm fsMaterial)
     {
-        StoreLoginUser loginUser = UserUtil.getLoginUser();
+        StoreLoginUserScrm loginUser = UserUtil.getLoginUser();
         fsMaterial.setStoreId(loginUser.getFsStore().getStoreId());
         return toAjax(fsMaterialService.insertFsMaterial(fsMaterial));
     }

+ 1 - 1
fs-store/src/main/java/com/fs/hisStore/controller/store/FsPrescribeScrmController.java

@@ -14,7 +14,7 @@ import com.fs.his.vo.FsPrescribeExcelListVO;
 import com.fs.his.vo.FsPrescribeListVO;
 import com.fs.his.vo.FsPrescribeVO;
 import com.fs.hisStore.service.IFsPrescribeScrmStoreService;
-import com.fs.store.utils.UserUtil;
+import com.fs.hisStore.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.GetMapping;

+ 1 - 1
fs-store/src/main/java/com/fs/hisStore/controller/store/FsStoreBillScrmController.java

@@ -10,7 +10,7 @@ import com.fs.his.param.FsStoreBillParam;
 import com.fs.his.vo.FsStoreBillVO;
 import com.fs.hisStore.domain.FsStoreBillScrm;
 import com.fs.hisStore.service.IFsStoreBillScrmService;
-import com.fs.store.utils.UserUtil;
+import com.fs.hisStore.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 

+ 1 - 1
fs-store/src/main/java/com/fs/hisStore/controller/store/FsStoreExtractScrmController.java

@@ -9,7 +9,7 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.his.vo.FsStoreExtractVO;
 import com.fs.hisStore.domain.FsStoreExtractScrm;
 import com.fs.hisStore.service.IFsStoreExtractScrmService;
-import com.fs.store.utils.UserUtil;
+import com.fs.hisStore.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 

+ 129 - 0
fs-store/src/main/java/com/fs/hisStore/controller/store/FsStoreInfoScrmController.java

@@ -0,0 +1,129 @@
+package com.fs.hisStore.controller.store;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.constant.Constants;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.entity.SysDictData;
+import com.fs.common.core.domain.model.LoginBody;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.StringUtils;
+import com.fs.framework.service.LoginServiceScrm;
+import com.fs.framework.service.TokenServiceScrm;
+import com.fs.hisStore.domain.StoreLoginUserScrm;
+import com.fs.hisStore.domain.FsStoreScrm;
+import com.fs.hisStore.service.IFsStoreScrmService;
+import com.fs.hisStore.utils.UserUtil;
+import com.fs.system.service.ISysDictTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 登录验证
+ *
+
+ */
+@RestController
+@RequestMapping("/store")
+public class FsStoreInfoScrmController
+{
+    @Autowired
+    private LoginServiceScrm loginService;
+
+
+
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+
+    @Autowired
+    private TokenServiceScrm tokenService;
+
+    @Autowired
+    private IFsStoreScrmService fsStoreService;
+
+    @Autowired
+    private PasswordEncoder passwordEncoder;
+
+
+    /**
+     * 登录方法
+     *
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        FsStoreScrm user = UserUtil.getLoginUser().getFsStore();
+
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("user", user);
+        return ajax;
+    }
+
+
+
+    /**
+     * 个人信息
+     */
+    @GetMapping("/system/user/profile")
+    public AjaxResult profile()
+    {
+        StoreLoginUserScrm loginUser = UserUtil.getLoginUser();
+        FsStoreScrm fsStore = fsStoreService.selectFsStoreByStoreId(loginUser.getFsStore().getStoreId());
+        AjaxResult ajax = AjaxResult.success(fsStore);
+        return ajax;
+    }
+
+    /**
+     * 重置密码
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/system/user/profile/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword)
+    {
+
+        StoreLoginUserScrm loginUser = UserUtil.getLoginUser();
+        String password = loginUser.getPassword();
+        if ( !passwordEncoder.matches(oldPassword, password)){
+            return AjaxResult.error("修改密码失败,旧密码错误");
+        }
+
+        String encode = passwordEncoder.encode(newPassword);
+        FsStoreScrm fsStore = new FsStoreScrm();
+        fsStore.setStoreId(loginUser.getFsStore().getStoreId());
+        fsStore.setPassword(encode);
+        if (fsStoreService.updateFsStore(fsStore) > 0)
+        {
+            // 更新缓存用户信息
+            FsStoreScrm fsStore1 = loginUser.getFsStore();
+            fsStore1.setPassword(fsStore.getPassword());
+            loginUser.setFsStore(fsStore1);
+            tokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改密码异常,请联系管理员");
+    }
+
+
+
+}