From 2e08d6d4c0710d3e535b5944faa9df4af828c0f7 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 02 Nov 2021 10:54:52 +0800
Subject: [PATCH] Merge branch 'score_shop' of http://120.27.238.55:7000/r/beauty-erp into score_shop

---
 zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java                          |    3 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java |    8 
 zq-erp/src/main/resources/templates/views/admin/index.html                                              |    2 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java            |   16 
 zq-erp/src/main/java/com/matrix/system/common/init/LocalCache.java                                      |  215 +++++++
 zq-erp/pom.xml                                                                                          |    5 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxErpOrderAction.java                         |    9 
 zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopRefundRecordAction.java                       |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxReceiveAddressAction.java                   |   19 
 zq-erp/src/main/java/com/matrix/system/app/action/ApiUsersAction.java                                   |   15 
 zq-erp/src/main/java/com/matrix/system/common/service/BusParameterSettingService.java                   |   40 +
 zq-erp/src/main/java/com/matrix/core/tools/StringUtils.java                                             |   42 +
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopCouponUtil.java                          |    4 
 zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java                                |   23 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxBindingPhoneNumber.java                     |   13 
 zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopDeliveryInfoAction.java                       |    3 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java   |   10 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxProductCommentAction.java                   |    8 
 zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java                  |   11 
 zq-erp/src/main/resources/config/system.properties                                                      |   12 
 zq-erp/src/main/java/com/matrix/system/job/ServiceOvertimeNoticeJob.java                                |    2 
 zq-erp/src/main/java/com/matrix/core/tools/SmsUtils.java                                                |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesGroupBuyController.java       |   10 
 zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java                              |    5 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java                        |    6 
 zq-erp/src/test/java/com/matrix/TaiYanAliyunSmsServiceTest.java                                         |   39 +
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxInvoiceAction.java                          |   13 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSkinCheckAction.java                        |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopScoreAction.java                        |    8 
 zq-erp/src/test/java/com/matrix/LocalCacheTest.java                                                     |   35 +
 zq-erp/src/main/java/com/matrix/component/asyncmessage/MessageHandler.java                              |    3 
 zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java                 |    9 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java                     |   12 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxGetAcodeAction.java                         |    8 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java                     |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCollectionAction.java                       |   13 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserSearchRecord.java                       |    8 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java                              |   11 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java                           |    3 
 zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html                           |   48 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserAction.java                             |   12 
 zq-erp/src/main/resources/config/application.properties                                                 |    8 
 zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java                     |    8 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSalonAction.java              |   10 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java                     |    4 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShareProductAction.java                     |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopProduct.java                            |   19 
 zq-erp/src/main/java/com/matrix/system/common/init/UserCacheManager.java                                |  120 ++++
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java                 |    4 
 zq-erp/src/test/java/com/matrix/SourceFlowTests.java                                                    |    9 
 zq-erp/src/main/java/com/matrix/system/hive/service/TaiYanAliyunSmsService.java                         |  126 ++++
 zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/service_all_list.html                  |  130 ++-
 zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java                           |   32 
 zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java                                 |    2 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java                 |   88 +++
 zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java                                |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxRefundRecordAction.java                     |    8 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java                         |   26 
 zq-erp/src/main/java/com/matrix/component/asyncmessage/AsyncMessageManager.java                         |    4 
 zq-erp/src/main/java/com/matrix/component/redis/RedisUserLoginUtils.java                                |    2 
 zq-erp/src/main/java/com/matrix/component/redis/RedisClient.java                                        |    2 
 zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java                    |   40 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java          |   10 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSecKillAction.java            |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesOrderAction.java                       |   10 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java             |   18 
 zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java                                  |   20 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesWithdrawalAction.java                  |   12 
 zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java                                              |    9 
 zq-erp/src/main/java/com/matrix/system/hive/bean/AchieveNew.java                                        |    6 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java                        |   40 +
 zq-erp/src/test/java/com/matrix/JyyTests.java                                                           |   16 
 zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java                            |   15 
 zq-erp/src/test/java/com/matrix/ParameterSettingsTool.java                                              |   26 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopCouponAction.java                       |    4 
 zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java                           |   19 
 zq-erp/src/main/resources/templates/views/admin/shop/parameterSetting-form.html                         |    8 
 zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java                               |   13 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java               |   16 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxMoneyCardUseAction.java                     |   12 
 zq-erp/src/main/java/com/matrix/system/hive/service/SysProjServicesService.java                         |    7 
 81 files changed, 1,168 insertions(+), 480 deletions(-)

diff --git a/zq-erp/pom.xml b/zq-erp/pom.xml
index 661933d..b23716b 100644
--- a/zq-erp/pom.xml
+++ b/zq-erp/pom.xml
@@ -393,6 +393,11 @@
             <artifactId>hutool-all</artifactId>
             <version>5.3.1</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>26.0-jre</version>
+        </dependency>
     </dependencies>
     <build>
         <resources>
diff --git a/zq-erp/src/main/java/com/matrix/component/asyncmessage/AsyncMessageManager.java b/zq-erp/src/main/java/com/matrix/component/asyncmessage/AsyncMessageManager.java
index 90b7fdd..a27cf0a 100644
--- a/zq-erp/src/main/java/com/matrix/component/asyncmessage/AsyncMessageManager.java
+++ b/zq-erp/src/main/java/com/matrix/component/asyncmessage/AsyncMessageManager.java
@@ -40,10 +40,6 @@
 
     private Map<String, List<MessageHandler>> routes;
 
-    private Map<String, ReentrantLock> lockMap = new HashMap<>();
-
-    private Map<String, ConcurrentLinkedQueue> messageQueue = new HashMap<>();
-
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
diff --git a/zq-erp/src/main/java/com/matrix/component/asyncmessage/MessageHandler.java b/zq-erp/src/main/java/com/matrix/component/asyncmessage/MessageHandler.java
index fdf2330..bc4d9e1 100644
--- a/zq-erp/src/main/java/com/matrix/component/asyncmessage/MessageHandler.java
+++ b/zq-erp/src/main/java/com/matrix/component/asyncmessage/MessageHandler.java
@@ -26,7 +26,8 @@
     String getName();
 
     /**
-     * 返回任务的路由key
+     * 返回任务的路由key,当有对应key的事件发生时,消息管理器会触发handle方法。
+     * key 支持正则表达式
      * @return
      */
     String getRouteKey();
diff --git a/zq-erp/src/main/java/com/matrix/component/redis/RedisClient.java b/zq-erp/src/main/java/com/matrix/component/redis/RedisClient.java
index 76ccafa..8304e44 100644
--- a/zq-erp/src/main/java/com/matrix/component/redis/RedisClient.java
+++ b/zq-erp/src/main/java/com/matrix/component/redis/RedisClient.java
@@ -9,7 +9,6 @@
 import net.sf.json.JSONObject;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;
 import redis.clients.jedis.JedisPoolConfig;
@@ -26,7 +25,6 @@
  * @date 2019年2月25日
  */
 
-@Component
 public class RedisClient implements CommandLineRunner {
 
 	/**
diff --git a/zq-erp/src/main/java/com/matrix/component/redis/RedisUserLoginUtils.java b/zq-erp/src/main/java/com/matrix/component/redis/RedisUserLoginUtils.java
index 358950f..9d904da 100644
--- a/zq-erp/src/main/java/com/matrix/component/redis/RedisUserLoginUtils.java
+++ b/zq-erp/src/main/java/com/matrix/component/redis/RedisUserLoginUtils.java
@@ -9,7 +9,6 @@
 import com.matrix.core.tools.WebUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
 
 
 /**
@@ -19,7 +18,6 @@
  * @email 935090232@qq.com
  * @date 2018年1月19日
  */
-@Component
 public class RedisUserLoginUtils {
 
 	@Autowired
diff --git a/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java b/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
index 87a4d11..b1b4a19 100644
--- a/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
+++ b/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
@@ -1,3 +1,4 @@
+/*
 package com.matrix.config;
 
 
@@ -18,7 +19,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
-@Configuration
+*/
+/**
+ * 小型应用弃用rabbitmq,直接通过观察者模式对消息进行同步消费 参考 AsyncMessageManager
+ *//*
+
+//@Configuration
 public class RabbitMqConfig {
 
     @Value("${rabbitmq.host}")
@@ -93,3 +99,4 @@
 
 
 }
+*/
diff --git a/zq-erp/src/main/java/com/matrix/core/tools/SmsUtils.java b/zq-erp/src/main/java/com/matrix/core/tools/SmsUtils.java
index a39f00c..cb14c28 100644
--- a/zq-erp/src/main/java/com/matrix/core/tools/SmsUtils.java
+++ b/zq-erp/src/main/java/com/matrix/core/tools/SmsUtils.java
@@ -1,5 +1,6 @@
 package com.matrix.core.tools;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyuncs.CommonRequest;
@@ -7,7 +8,6 @@
 import com.aliyuncs.IAcsClient;
 import com.aliyuncs.exceptions.ClientException;
 import com.aliyuncs.http.MethodType;
-import com.google.gson.JsonObject;
 import com.matrix.config.properties.AliSmsProperties;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.system.hive.bean.SysSmsTemplate;
@@ -15,7 +15,6 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -57,8 +56,7 @@
         CommonRequest request = commonRequest(SysSmsTemplate.SMS_ACTION_SEND);
         request.putQueryParameter("PhoneNumbers", phoneNum);
         request.putQueryParameter("TemplateCode", templateCode);
-        String jsonStr = JSONObject.toJSONString(values);
-        request.putQueryParameter("TemplateParam", jsonStr);
+        request.putQueryParameter("TemplateParam", JSONUtil.parse(values).toString());
 
         CommonResponse response = null;
         try {
diff --git a/zq-erp/src/main/java/com/matrix/core/tools/StringUtils.java b/zq-erp/src/main/java/com/matrix/core/tools/StringUtils.java
index 60ff28d..673efa2 100644
--- a/zq-erp/src/main/java/com/matrix/core/tools/StringUtils.java
+++ b/zq-erp/src/main/java/com/matrix/core/tools/StringUtils.java
@@ -8,6 +8,7 @@
 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
 import org.apache.commons.collections.CollectionUtils;
+import org.springframework.util.AntPathMatcher;
 
 import java.io.UnsupportedEncodingException;
 import java.util.*;
@@ -29,6 +30,47 @@
 
     private static final String EMPTY = "";
 
+
+    /**
+     * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串
+     *
+     * @param str 指定字符串
+     * @param strs 需要检查的字符串数组
+     * @return 是否匹配
+     */
+    public static boolean matches(String str, List<String> strs)
+    {
+        if (isBlank(str) || CollectionUtils.isEmpty(strs))
+        {
+            return false;
+        }
+        for (String pattern : strs)
+        {
+            if (isMatch(pattern, str))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 判断url是否与规则配置:
+     * ? 表示单个字符;
+     * * 表示一层路径内的任意字符串,不可跨层级;
+     * ** 表示任意层路径;
+     *
+     * @param pattern 匹配规则
+     * @param url 需要匹配的url
+     * @return
+     */
+    public static boolean isMatch(String pattern, String url)
+    {
+        AntPathMatcher matcher = new AntPathMatcher();
+        return matcher.match(pattern, url);
+    }
+
+
     /**
      * 将字符串中的某些值用指定字符代替
      *
diff --git a/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java b/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java
index 5093d22..f3e8702 100644
--- a/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java
@@ -1,7 +1,5 @@
 package com.matrix.system.app.action;
 
-import com.alibaba.fastjson.JSONObject;
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.*;
 import com.matrix.system.app.authority.AppAuthorityManager;
@@ -12,6 +10,7 @@
 import com.matrix.system.common.authority.strategy.LoginStrategy;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.service.SysUsersService;
 import com.matrix.system.common.tools.PasswordUtil;
 import com.matrix.system.common.tools.UploadUtil;
@@ -36,7 +35,10 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.security.NoSuchAlgorithmException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author wzy
@@ -60,8 +62,6 @@
     @Autowired
     private BusParameterSettingsDao busParameterSettingsDao;
 
-    @Autowired
-    private RedisClient redisClient;
 
     @Value("${file_storage_path}")
     private String fileStoragePath;
@@ -90,7 +90,7 @@
         user.setSuPassword(null);
 
         String token = UUIDUtil.getRandomID();
-        redisClient.saveValueForever(token, JSONObject.toJSONString(user));
+        LocalCache.save(token, user);
 
         userInfoVo.setId(user.getSuId());
         userInfoVo.setName(user.getSuName());
@@ -167,14 +167,14 @@
             return AjaxResult.buildFailInstance("该手机号不存在");
         }
 
-        String codeExist = redisClient.getCachedValue(smsCodeDto.getTelphone());
+        String codeExist = LocalCache.get(smsCodeDto.getTelphone());
         if (StringUtils.isNotBlank(codeExist)) {
             return AjaxResult.buildFailInstance("请勿重复发送验证码");
         }
 
         Integer code =(int) ((Math.random() * 9 + 1) * 100000);
         Sms106Send.sendVerifyCode(smsCodeDto.getTelphone(), code.toString(), 2);
-        redisClient.saveValue(smsCodeDto.getTelphone(), code.toString(), 120);
+        LocalCache.save(smsCodeDto.getTelphone(), code.toString(), 120 * 1000);
         return AjaxResult.buildSuccessInstance("发送成功");
     }
 
@@ -188,7 +188,7 @@
             return AjaxResult.buildFailInstance("该手机号不存在");
         }
 
-        String code = redisClient.getCachedValue(pwdResetDto.getTelphone());
+        String code = LocalCache.get(pwdResetDto.getTelphone());
         if (StringUtils.isBlank(code)) {
             return AjaxResult.buildFailInstance("验证码已失效,请重新发送");
         }
@@ -203,7 +203,7 @@
 
         int i = sysUsersService.updateUserPassword(user.getSuId(), pwd);
         if (i > 0) {
-            redisClient.removeObject(pwdResetDto.getTelphone());
+            LocalCache.remove(pwdResetDto.getTelphone());
             return AjaxResult.buildSuccessInstance("修改成功");
         }
         return AjaxResult.buildFailInstance("修改失败");
diff --git a/zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java b/zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java
index 4939cfc..6b1d335 100644
--- a/zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java
@@ -67,8 +67,6 @@
     @Autowired
     private SysBeauticianStateService sysBeauticianStateService;
 
-    @Autowired
-    private RabiitMqTemplate rabiitMqTemplate;
 
     @Autowired
     private AsyncMessageManager asyncMessageManager;
@@ -284,17 +282,8 @@
     @ApiOperation(value = "确认服务", notes = "确认服务")
     @PostMapping(value = "/confirmServiceOrder")
     public AjaxResult confirmServiceOrder(@RequestBody @Validated IdSubmitDto idSubmitDto) {
-        SysProjServices services = new SysProjServices();
-        services.setId(idSubmitDto.getId());
-        services.setState(Dictionary.BEATUI_STATE_DYY);
-        int i = projServicesService.modify(services);
-        if (i > 0) {
-            //发送微信公众号提醒
-            services=projServicesService.findById(services.getId());
-            UniformMsgParam uniformMsgParam=new UniformMsgParam(services.getCompanyId(),UniformMsgParam.GZH_YYCG);
-            uniformMsgParam.put("serviceId",services.getId());
-            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG ,uniformMsgParam);
-
+        int i=projServicesService.confirmServiceOrder(idSubmitDto.getId());
+        if(i>0){
             return AjaxResult.buildSuccessInstance("确认成功");
         }
         return AjaxResult.buildFailInstance("确认失败");
diff --git a/zq-erp/src/main/java/com/matrix/system/app/action/ApiUsersAction.java b/zq-erp/src/main/java/com/matrix/system/app/action/ApiUsersAction.java
index c3cc658..e4fdf69 100644
--- a/zq-erp/src/main/java/com/matrix/system/app/action/ApiUsersAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/app/action/ApiUsersAction.java
@@ -1,24 +1,25 @@
 package com.matrix.system.app.action;
 
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.DateUtil;
 import com.matrix.core.tools.WebUtil;
-import com.matrix.system.app.dto.*;
-import com.matrix.system.app.mapper.SysBeauticianStateMapper;
+import com.matrix.system.app.dto.BeauticianDto;
+import com.matrix.system.app.dto.ModifyUserDto;
+import com.matrix.system.app.dto.PwdModifyDto;
+import com.matrix.system.app.dto.UsersQueryDto;
 import com.matrix.system.app.mapper.SysUsersMapper;
 import com.matrix.system.app.mapper.SysWorkBeatuistaffMapper;
 import com.matrix.system.app.vo.BeauticianVo;
 import com.matrix.system.app.vo.UserAchieveVo;
 import com.matrix.system.app.vo.UserInfoDetailVo;
 import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.interceptor.ApiUserLoginInterceptor;
 import com.matrix.system.common.service.SysUsersService;
 import com.matrix.system.common.tools.DataAuthUtil;
 import com.matrix.system.common.tools.PasswordUtil;
 import com.matrix.system.hive.action.BaseController;
-import com.matrix.system.hive.bean.SysBeauticianState;
 import com.matrix.system.hive.bean.SysWorkBeatuistaff;
 import com.matrix.system.hive.service.AchieveNewService;
 import com.matrix.system.hive.service.SysWorkBeatuistaffService;
@@ -32,11 +33,9 @@
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
 import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -60,8 +59,6 @@
     @Autowired
     private SysWorkBeatuistaffService sysWorkBeatuistaffService;
 
-    @Autowired
-    private RedisClient redisClient;
     @Value("${login_private_key}")
     private  String privateKey;
 
@@ -107,7 +104,7 @@
     @GetMapping(value = "/loginOut")
     public AjaxResult loginOut(HttpServletRequest request) {
         String token=ApiUserLoginInterceptor.resolveToken(request,privateKey);
-        redisClient.removeObject(token);
+        LocalCache.remove(token);
         return AjaxResult.buildSuccessInstance("退出成功");
     }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java b/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
index c481134..fb84dee 100644
--- a/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
+++ b/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
@@ -1,10 +1,6 @@
 package com.matrix.system.app.authority;
 
 import cn.hutool.crypto.SecureUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
@@ -15,6 +11,7 @@
 import com.matrix.system.common.bean.SysFunction;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.service.SysFunctionService;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,8 +33,6 @@
 
     private static final int DEFAULT_2 = 2;
 
-    @Autowired
-    RedisClient redisClient;
 
     @Autowired
     SysFunctionService sysFunctionService;
@@ -103,22 +98,13 @@
 
 
         String redisKey = USER_POWER_REDISKEY_APP + SecureUtil.md5(user.getSuId()+"");
-        String cachedValue = redisClient.getCachedValue(redisKey);
-        if (StringUtils.isNotBlank(cachedValue)) {
-            //从缓存中获取用户权限
-            JSONObject powerMap = JSONUtil.parseObj(cachedValue);
-            String userFunctionMapStr = powerMap.get(USERFUNCTION).toString();
-            JSONObject userFunctionMap = JSONUtil.parseObj(userFunctionMapStr);
-            Set<String> userFunctionMapKeys = userFunctionMap.keySet();
-            userFunctionMapKeys.forEach(key -> {
-                userFunction.put(key, userFunctionMap.get(key, SysFunction.class));
-            });
+        Map<String, Object> cachePowerMap = LocalCache.get(redisKey);
+        if (Objects.nonNull(cachePowerMap)) {
 
-            String userUrlMappingListStr = powerMap.get(USER_URL_MAPPING).toString();
-            JSONArray userUrlMappingArray = JSONUtil.parseArray(userUrlMappingListStr);
-            for (int i = 0; i < userUrlMappingArray.size(); i++) {
-                userUrlMapping.add(userUrlMappingArray.get(i, String.class));
-            }
+            userFunction = (Map<String, SysFunction>) cachePowerMap.get(USERFUNCTION);
+
+            userUrlMapping = (List<String>) cachePowerMap.get(USER_URL_MAPPING);
+
         } else {
             // 获取用户所有权限
             getUserFunction(user,userFunction, userUrlMapping);
@@ -126,11 +112,9 @@
             Map<String ,Object> powerMap=new HashMap<>();
             powerMap.put(USERFUNCTION, userFunction);
             powerMap.put(USER_URL_MAPPING, userUrlMapping);
-            redisClient.saveValue(redisKey,JSONUtil.parseObj(powerMap,true));
+            LocalCache.save(redisKey,powerMap);
         }
 
-
-        // TODO 这里的用户权限应该放到redis缓存中,在拦截器中做权限拦截
         WebUtil.setSessionAttribute(USERFUNCTION, userFunction);
         WebUtil.setSessionAttribute(USER_URL_MAPPING, userUrlMapping);
         result.putInMap(USERFUNCTION, userFunction);
diff --git a/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java b/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
index caf92b3..29981ca 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
@@ -3,7 +3,7 @@
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.web.BaseAction;
-import com.matrix.system.common.init.InitWebContainer;
+import com.matrix.system.common.init.LocalCache;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -76,8 +76,7 @@
 
 	@RequestMapping("/getLocalCache")
 	public @ResponseBody AjaxResult getLocalCache(String key) {
-		Object cache=InitWebContainer.getLocalCache(key);
-		return AjaxResult.buildSuccessInstance(cache);
+		return AjaxResult.buildSuccessInstance(LocalCache.getValues(key));
 	}
 
 
diff --git a/zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java b/zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java
index d242a64..84fc03c 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java
@@ -1,6 +1,5 @@
 package com.matrix.system.common.actions;
 
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.anotations.RemoveRequestToken;
 import com.matrix.core.anotations.SaveRequestToken;
 import com.matrix.core.constance.MatrixConstance;
@@ -16,6 +15,7 @@
 import com.matrix.system.common.bean.SysRole;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.constance.AppVocabularyCode;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.service.SysFunctionService;
 import com.matrix.system.common.service.SysRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,8 +50,6 @@
 	private SysFunctionService sysFunctionService;
 
 	public static final String BEV = "SYSROLE_BEV";
-	@Autowired
-	RedisClient redisClient;
 	/**
 	 * 列表显示
 	 * 
@@ -232,7 +230,7 @@
 		}
 		AjaxResult result = modify(sysRoleService, WebUtil.getSessionAttribute(BEV), sysRole, AppVocabularyCode.ROLE);
 		WebUtil.removeSessionAttribute(BEV);
-		redisClient.batchDel(DefaultAuthorityManager.USER_POWER_REDISKEY);
+		LocalCache.batchRemove(DefaultAuthorityManager.USER_POWER_REDISKEY+"*");
 		return result;
 	}
 
diff --git a/zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java b/zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java
index db8c386..381b643 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java
@@ -1,10 +1,6 @@
 package com.matrix.system.common.authority;
 
 import cn.hutool.crypto.SecureUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
@@ -14,6 +10,7 @@
 import com.matrix.system.common.bean.SysFunction;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.service.SysFunctionService;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,8 +44,6 @@
      **/
     public static final String USER_URL_MAPPING = "userUrlMapping";
 
-    @Autowired
-    RedisClient redisClient;
 
     private DefaultAuthorityManager() {
     }
@@ -156,26 +151,16 @@
         SysUsers sysUser = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
 
         String redisKey = USER_POWER_REDISKEY_PC + SecureUtil.md5(sysUser.getSuId() + "");
-        String cachedValue = redisClient.getCachedValue(redisKey);
-        if (StringUtils.isNotBlank(cachedValue)) {
-            //从缓存中获取用户权限
-            JSONObject powerMap = JSONUtil.parseObj(cachedValue);
-            String userFunctionMapStr = powerMap.get(USERFUNCTION).toString();
-            JSONObject userFunctionMap = JSONUtil.parseObj(userFunctionMapStr);
-            Set<String> userFunctionMapKeys = userFunctionMap.keySet();
-            userFunctionMapKeys.forEach(key -> {
-                userFunction.put(key, userFunctionMap.get(key, SysFunction.class));
-            });
-            String menusFunctionListStr = powerMap.get(MENUSFUNCTION).toString();
-            JSONArray menusFunctionArray = JSONUtil.parseArray(menusFunctionListStr);
-            for (int i = 0; i < menusFunctionArray.size(); i++) {
-                menuFunction.add(menusFunctionArray.get(i, SysFunction.class));
-            }
-            String userUrlMappingListStr = powerMap.get(USER_URL_MAPPING).toString();
-            JSONArray userUrlMappingArray = JSONUtil.parseArray(userUrlMappingListStr);
-            for (int i = 0; i < userUrlMappingArray.size(); i++) {
-                userUrlMapping.add(userUrlMappingArray.get(i, String.class));
-            }
+        Map<String, Object> cachePowerMap = LocalCache.get(redisKey);
+
+        if (Objects.nonNull(cachePowerMap)) {
+
+            userFunction = (Map<String, SysFunction>) cachePowerMap.get(USERFUNCTION);
+
+            menuFunction = (List<SysFunction>) cachePowerMap.get(MENUSFUNCTION);
+
+            userUrlMapping = (List<String>) cachePowerMap.get(USER_URL_MAPPING);
+
         } else {
             // 获取用户所有权限
             getUserFunction(userFunction, menuFunctionMap, userUrlMapping);
@@ -187,7 +172,8 @@
             powerMap.put(USERFUNCTION, userFunction);
             powerMap.put(MENUSFUNCTION, menuFunction);
             powerMap.put(USER_URL_MAPPING, userUrlMapping);
-            redisClient.saveValue(redisKey, JSONUtil.parseObj(powerMap, true));
+            //权限信息加入缓存中
+            LocalCache.save(redisKey,powerMap);
         }
 
 
diff --git a/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java b/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java
index 5fecc8b..846a5d8 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java
@@ -582,6 +582,19 @@
      * 门店是否只能取消待付款订单,服务单
      */
     public static final String SHOP_MANAGE_ABLE_CANCEL_DFK_ORDER = "shopManageAbleCancelDfkOrder";
+    /**
+     * 服务记录跟进模板
+     */
+    public static final String SERVICE_FLOW_TEMPLATE = "SERVICE_FLOW_TEMPLATE";
+    /**
+     * 开启短信提醒
+     */
+    public static final String OPEN_SMS_NOTICE = "OPEN_SMS_NOTICE";
+
+    /**
+     * 服务单自动配料
+     */
+    public static final String OPEN_SERVICE_ORDER_AUTO_BATCHING = "OPEN_SERVICE_ORDER_AUTO_BATCHING";
 
     /**
      * 赠送金额购买产品算赠送购买
diff --git a/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java b/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
index fa4c035..1fa4e0e 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
@@ -38,8 +38,6 @@
 public class InitWebContainer   implements ApplicationRunner {
 
 
-	private static ConcurrentMap<String,Object> localCache=new ConcurrentHashMap(60);
-
 	private static final String TRUE = "true";
 
 	static private final String LANGUAGE_ZH = "zh";
@@ -126,30 +124,11 @@
 		for (SysCompany sysCompany : company) {
 			companyMap.put(sysCompany.getComWebUrl(), sysCompany);
 		}
-		saveLocalCache("companyMap", companyMap);
+		LocalCache.save("companyMap", companyMap);
 	}
 
 
-	/**
-	 * 获取本地缓存
-	 * @param key
-	 * @param <T>
-	 * @return
-	 */
-	public static <T> T getLocalCache(String key){
-		return (T)localCache.get(key);
-	}
 
-	/**
-	 * 保存一个本地缓存
-	 * @param key
-	 * @param value
-	 */
-	public static void saveLocalCache(String key,Object value){
-		  if(null!=localCache.put(key,value)){
-		  	LogUtil.debug("覆盖原有缓存{}",key);
-		  }
-	}
 
 
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/common/init/LocalCache.java b/zq-erp/src/main/java/com/matrix/system/common/init/LocalCache.java
new file mode 100644
index 0000000..ed624c2
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/init/LocalCache.java
@@ -0,0 +1,215 @@
+package com.matrix.system.common.init;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.StringUtils;
+import lombok.Data;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
+
+public class LocalCache {
+
+    /*
+     * 清理线程运行状态 0 未启动,1 已启动
+     */
+    private static int CLEAR_THREAD_STATUS = 0;
+
+    private static ConcurrentMap<String, Value> localCache = new ConcurrentHashMap(60);
+
+    /**
+     * 根据key匹配多个缓存值
+     *
+     * @param key
+     * @param <T>
+     * @return
+     */
+    public static <T> Map<String, T> getValues(String key) {
+        return localCache.entrySet().stream()
+                .filter(item -> StringUtils.isMatch(key, item.getKey()))
+                .map(Map.Entry::getValue)
+                .filter(item -> Objects.nonNull(item.value))
+                .collect(Collectors.toMap(Value::getKey, item -> (T) item.value));
+    }
+
+    /**
+     * 获取本地缓存
+     *
+     * @param key
+     * @param <T>
+     * @return
+     */
+    public static <T> T get(String key) {
+        Value value = localCache.get(key);
+        if (Objects.nonNull(value)) {
+            return (T) value.value;
+        }
+        return null;
+    }
+
+    /**
+     * 删除缓存
+     *
+     * @param key
+     * @param <T>
+     * @return
+     */
+    public static <T> T remove(String key) {
+        Value value = localCache.remove(key);
+        if (Objects.nonNull(value)) {
+            return (T) value.value;
+        }
+        return null;
+    }
+
+    /**
+     * 批量删除缓存
+     *
+     * @param key
+     * @return
+     */
+    public static int batchRemove(String key) {
+        int count = 0;
+        Set<Map.Entry<String, Value>> entries = localCache.entrySet();
+        Iterator<Map.Entry<String, Value>> iterator = entries.iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, Value> next = iterator.next();
+            if (StringUtils.isMatch(key, next.getKey())) {
+                remove(next.getKey());
+                count++;
+            }
+        }
+        return count;
+    }
+
+    /**
+     * 保存一个本地缓存
+     *
+     * @param key
+     * @param value
+     */
+    public static void save(String key, Object value) {
+        if (null != localCache.put(key, buildValue(key, value))) {
+            LogUtil.debug("覆盖原有缓存{}", key);
+        }
+    }
+
+    /**
+     * 设置含过期时间的缓存
+     *
+     * @param key
+     * @param value
+     * @param timeOut 毫秒
+     */
+    public static void save(String key, Object value, long timeOut) {
+        if (null != localCache.put(key, buildValue(key, value, timeOut))) {
+            LogUtil.debug("覆盖原有缓存{}", key);
+        }
+        startClearThread();
+    }
+
+    /**
+     * 重置缓存失效时间
+     * @param key
+     */
+    public static void resetExpire(String key) {
+        Objects.requireNonNull(key);
+        Value value = localCache.get(key);
+        if(Objects.nonNull(value)){
+            value.getCreateTime().set(System.currentTimeMillis());
+        }
+    }
+
+    /**
+     * 清理过期对象
+     */
+    private synchronized static void startClearThread() {
+        if (CLEAR_THREAD_STATUS == 0) {
+            ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
+                    .setNameFormat("demo-pool-%d").build();
+            ExecutorService singleThreadPool = new ThreadPoolExecutor(1, 1,
+                    0L, TimeUnit.MILLISECONDS,
+                    new LinkedBlockingQueue<Runnable>(1), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
+            singleThreadPool.execute(() -> {
+                CLEAR_THREAD_STATUS = 1;
+                while (true) {
+                    try {
+                        Set<Map.Entry<String, Value>> entries = localCache.entrySet();
+                        Iterator<Map.Entry<String, Value>> iterator = entries.iterator();
+                        while (iterator.hasNext()) {
+                            Map.Entry<String, Value> next = iterator.next();
+
+                            if (next.getValue().timeOut == 0) {
+                                continue;
+                            }
+
+                            boolean isTimeOut = (System.currentTimeMillis() - next.getValue().getCreateTime().longValue()) > next.getValue().timeOut;
+                            if (isTimeOut) {
+                                Value removed = localCache.remove(next.getKey());
+                                LogUtil.debug("清除过期对象:{}", removed.value);
+                            }
+                        }
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        LogUtil.error("清理缓存线程异常停止", e);
+                        CLEAR_THREAD_STATUS = 0;
+                    }
+                }
+            });
+
+
+        }
+    }
+
+
+    private static Value buildValue(String key, Object value) {
+        return buildValue(key, value, 0);
+    }
+
+
+    private static Value buildValue(String key, Object value, long timeOut) {
+        Value instances = new Value();
+        instances.createTime = new AtomicLong(System.currentTimeMillis());
+        instances.key = key;
+        instances.value = value;
+        instances.timeOut = timeOut;
+        return instances;
+    }
+
+
+
+
+    /**
+     * 缓存对象
+     */
+    @Data
+    static class Value {
+
+        /**
+         * 过期时间,0 表示不过期,单位毫秒
+         */
+        private long timeOut = 0;
+        /**
+         * 缓存key
+         */
+        private String key;
+        /**
+         * 缓存值
+         */
+        private Object value;
+
+        /**
+         * 缓存创建时间
+         */
+        private AtomicLong createTime;
+
+
+    }
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/common/init/UserCacheManager.java b/zq-erp/src/main/java/com/matrix/system/common/init/UserCacheManager.java
new file mode 100644
index 0000000..4db415f
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/init/UserCacheManager.java
@@ -0,0 +1,120 @@
+/**
+ * projectName: zq-erp
+ * fileName: UserCacheManager.java
+ * packageName: com.matrix.system.common.init
+ * date: 2021-10-25 16:58
+ * copyright(c) 2021 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.common.init;
+
+import com.matrix.core.constance.SystemErrorCode;
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.core.tools.UUIDUtil;
+import com.matrix.core.tools.WebUtil;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+/**
+ * @version: V1.0
+ * @author: JiangYouYao
+ * @className: UserCacheManager
+ * @packageName: com.matrix.system.common.init
+ * @description: 用户缓存管理
+ * @data: 2021-10-25 16:58
+ **/
+@Component
+public class UserCacheManager {
+
+    @Value("${debug}")
+    private String isDebug;
+
+
+    /**
+     * 判断用户是否已经登录过
+     *
+     * @return
+     * @author JIANGYOUYAO
+     * @email 935090232@qq.com
+     * @date 2018年1月19日
+     * 会从http请求投中获取token进行验证
+     */
+    public boolean isUserLogin() {
+        String token = getUserToken();
+        if (StringUtils.isNotBlank(token)) {
+            return LocalCache.get(token) != null;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 在本地缓存中保存用户信息,并且返回保存的token
+     *
+     * @author JIANGYOUYAO
+     * @email 935090232@qq.com
+     * @date 2018年1月19日
+     * @return 返回保存用户信息的token
+     */
+    public String saveUserInfo(Object obj) {
+        String token = UUIDUtil.getRandomID();
+        LocalCache.save(token, obj);
+       return token;
+    }
+
+    /**
+     * 用户退出
+     *
+     * @author:吕敬瑛
+     * @date:2018年1月19日下午3:17:14
+     */
+    public void loginOut() {
+        LocalCache.remove(getUserToken());
+    }
+
+    /**
+     * 更新用户缓存
+     */
+    public void updateUserInfo(Object user) {
+        LocalCache.save(getUserToken(),user);
+    }
+
+    /**
+     * 获取登录用户信息,如果 获取失败将会抛出异常
+     *
+     * @return
+     * @author JIANGYOUYAO
+     * @email 935090232@qq.com
+     * @date 2018年1月19日
+     */
+    public <T> T getLoginUser() {
+        String userToken = getUserToken();
+        if (userToken != null) {
+            T user = LocalCache.get(userToken);
+            if (Objects.nonNull(user)) {
+                //重新设置key过期时间
+                LocalCache.resetExpire(userToken);
+                return user;
+            } else {
+                throw new GlobleException(SystemErrorCode.REQUEST_INVALID);
+            }
+        } else {
+            throw new GlobleException(SystemErrorCode.REQUEST_INVALID);
+        }
+    }
+
+    public String getUserToken() {
+        String token = WebUtil.getRequest().getHeader("token");
+        // debug模式可以从url参数中获取token
+        if (StringUtils.isBlank(token) && "true".equals(isDebug)) {
+            if (token == null) {
+                token = WebUtil.getRequest().getParameter("token");
+            }
+        }
+        return token;
+    }
+
+
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java b/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java
index 0d24e53..cb284a7 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java
@@ -2,7 +2,6 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.LogUtil;
@@ -10,6 +9,7 @@
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.common.init.LocalCache;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -18,6 +18,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.Objects;
 
 /**
  * @author wzy
@@ -26,8 +27,6 @@
 @Component
 public class ApiUserLoginInterceptor implements HandlerInterceptor {
 
-    @Autowired
-    private RedisClient redisClient;
 
     @Value("${login_private_key}")
     private  String privateKey;
@@ -62,16 +61,14 @@
             return false;
         }
 
-        String userStr = redisClient.getCachedValue(token);
-//        redisClient.resetExpire(token);
-        if (StringUtils.isBlank(userStr)) {
+        SysUsers sysUsers = LocalCache.get(token);
+        if (Objects.isNull(sysUsers)) {
             ajaxResult.setInfo("login time out");
             response.getWriter().write(new ObjectMapper().writeValueAsString(ajaxResult));
             response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
             return false;
         }
 
-        SysUsers sysUsers = JSONObject.parseObject(userStr, SysUsers.class);
         request.getSession().setAttribute(MatrixConstance.LOGIN_KEY, sysUsers);
         return true;
     }
diff --git a/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java b/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
index d377706..7effc67 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
@@ -5,6 +5,7 @@
 import com.matrix.core.tools.WebUtil;
 import com.matrix.system.common.bean.SysCompany;
 import com.matrix.system.common.init.InitWebContainer;
+import com.matrix.system.common.init.LocalCache;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@@ -46,7 +47,7 @@
             return false;
         }
 
-        Map<String, SysCompany> companyMap = InitWebContainer.getLocalCache("companyMap");
+        Map<String, SysCompany> companyMap = LocalCache.get("companyMap");
         SysCompany company=companyMap.get(host);
         if(Objects.nonNull(company)){
             // 查到公司后存到sesssion中
diff --git a/zq-erp/src/main/java/com/matrix/system/common/service/BusParameterSettingService.java b/zq-erp/src/main/java/com/matrix/system/common/service/BusParameterSettingService.java
new file mode 100644
index 0000000..e98dd93
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/service/BusParameterSettingService.java
@@ -0,0 +1,40 @@
+package com.matrix.system.common.service;
+
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.bean.SysCompany;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
+import com.matrix.system.score.constant.ScoreSettingConstant;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class BusParameterSettingService {
+
+    private BusParameterSettingsDao busParameterSettingsDao;
+
+    /**
+     * 判断某个设置是否是开启状态
+     * 未配置,或者无效settingkey都返回false
+     */
+    public boolean isSettingOpen(String settingKey,Long companyId) {
+        BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(settingKey, companyId);
+        return (
+                Objects.nonNull(busParameterSettings)
+                && StringUtils.isNotBlank(busParameterSettings.getParamValue())
+                && AppConstance.IS_Y.equals(busParameterSettings.getParamValue())
+                );
+    }
+
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java
index e0044cc..3771598 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java
@@ -1,7 +1,6 @@
 package com.matrix.system.common.service.impl;
 
 import cn.hutool.crypto.SecureUtil;
-import com.matrix.component.redis.RedisClient;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.constance.SystemErrorCode;
 import com.matrix.core.exception.GlobleException;
@@ -16,6 +15,7 @@
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.constance.AppMessageCode;
 import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.service.SysUsersService;
 import com.matrix.system.common.tools.PasswordUtil;
 import com.matrix.system.common.tools.ServiceUtil;
@@ -47,8 +47,6 @@
     private static final String SU_ID = "su_id";
 
     private static final String SU_ACCOUNT = "su_account";
-    @Autowired
-    RedisClient redisClient;
     @Autowired
     private SysUsersDao sysUsersDao;
 
@@ -136,8 +134,8 @@
         //删除用户权限缓存
         String redisKey=DefaultAuthorityManager.USER_POWER_REDISKEY+ SecureUtil.md5(oldSysUsers.getSuId()+"");
         String redisKeyPc=DefaultAuthorityManager.USER_POWER_REDISKEY_PC+ SecureUtil.md5(oldSysUsers.getSuId()+"");
-        redisClient.removeObject(redisKey);
-        redisClient.removeObject(redisKeyPc);
+        LocalCache.remove(redisKey);
+        LocalCache.remove(redisKeyPc);
 
         return MatrixConstance.DML_SUCCESSS;
     }
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
index 1940bf4..a60adcd 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
@@ -96,8 +96,6 @@
     @Autowired
     private SysOrderFlowDao sysOrderFlowDao;
 
-    @Autowired
-    RabiitMqTemplate rabiitMqTemplate;
 
     @Autowired
     private BusParameterSettingsDao busParameterSettingsDao;
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java
index 8c82ce0..86db596 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java
@@ -14,6 +14,7 @@
 import com.matrix.core.tools.excl.ExcelSheetPO;
 import com.matrix.core.tools.excl.ExcelUtil;
 import com.matrix.core.tools.excl.ExcelVersion;
+import com.matrix.system.app.dto.IdSubmitDto;
 import com.matrix.system.common.bean.BusParameterSettings;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.constance.AppConstance;
@@ -26,10 +27,13 @@
 import com.matrix.system.hive.bean.*;
 import com.matrix.system.hive.dao.*;
 import com.matrix.system.hive.service.*;
+import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -390,6 +394,17 @@
         }
     }
 
+    @ApiOperation(value = "确认服务", notes = "确认服务")
+    @PostMapping(value = "/confirmServiceOrder")
+    public @ResponseBody AjaxResult confirmServiceOrder(Long id) {
+        int i=sysProjServicesService.confirmServiceOrder(id);
+        if(i>0){
+            return AjaxResult.buildSuccessInstance("确认成功");
+        }
+        return AjaxResult.buildFailInstance("确认失败");
+    }
+
+
 
     /**
      * @author jiangyouyao
@@ -496,11 +511,11 @@
         if (StringUtils.isNotBlank(shopManageAbleCancelDfkOrder.getParamValue())
                 && shopManageAbleCancelDfkOrder.getParamValue().equals(Dictionary.FLAG_YES)) {
             if (!checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DYY)
-            && !checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DQR)) {
+                    && !checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DQR)) {
                 return new AjaxResult(AjaxResult.STATUS_FAIL, "您只能取消待预约订单");
             }
         }
-       return erpCancelOrder(services);
+        return erpCancelOrder(services);
     }
     /**
      * 根据id取消预约
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/AchieveNew.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/AchieveNew.java
index 8f498a0..3c68bcd 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/bean/AchieveNew.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/AchieveNew.java
@@ -1,5 +1,7 @@
 package com.matrix.system.hive.bean;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.matrix.core.anotations.Extend;
 import com.matrix.core.tools.DateUtil;
@@ -13,9 +15,9 @@
  */
 public class AchieveNew extends EntityDTOExt {
 	@Extend
-	private static final long serialVersionUID = 1L; 
+	private static final long serialVersionUID = 1L;
 
-	
+	@TableId(type = IdType.AUTO)
 	private Long  id;
 			
 	
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjServicesService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjServicesService.java
index bae3726..6383e2d 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjServicesService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjServicesService.java
@@ -113,4 +113,11 @@
     int findApiServiceOrderListTotal(ServiceOrderListDto serviceOrderListDto);
 
     public boolean skipServiceOrderStep(String step);
+
+    /**
+     * 确认服务单
+     * @param id
+     * @return
+     */
+    int confirmServiceOrder(Long id);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/TaiYanAliyunSmsService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/TaiYanAliyunSmsService.java
new file mode 100644
index 0000000..1aa4621
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/TaiYanAliyunSmsService.java
@@ -0,0 +1,126 @@
+/**
+ * projectName: zq-erp
+ * fileName: TaiYanAliyunSmsService.java
+ * packageName: com.matrix.system.hive.service
+ * date: 2021-10-28 11:18
+ * copyright(c) 2021 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.hive.service;
+
+import com.google.common.collect.Maps;
+import com.matrix.core.tools.DateUtil;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.SmsUtils;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.service.BusParameterSettingService;
+import com.matrix.system.hive.bean.SysBeauticianState;
+import com.matrix.system.hive.bean.SysProjServices;
+import com.matrix.system.hive.bean.SysShopInfo;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import lombok.AllArgsConstructor;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @version: V1.0
+ * @author: JiangYouYao
+ * @className: TaiYanAliyunSmsService
+ * @packageName: com.matrix.system.hive.service
+ * @description: 肽妍短信提醒服务
+ * @data: 2021-10-28 11:18
+ **/
+@Service
+@AllArgsConstructor
+public class TaiYanAliyunSmsService {
+
+    SysVipInfoDao vipInfoDao;
+
+    SmsUtils smsUtils;
+
+    SysShopInfoService shopInfoService;
+
+    SysBeauticianStateService sysBeauticianStateService;
+
+    BusParameterSettingService busParameterSettingService;
+    /**
+     * 预约成功短信提醒
+     *
+     * @param services
+     */
+    @Async
+    public void sendYycgNotice(SysProjServices services) {
+        //短信接口为肽妍公司定制,暂时写死
+        if (chackSetting(services)) return;
+
+        SysVipInfo sysVipInfo = vipInfoDao.selectById(services.getVipId());
+        SysShopInfo shopInfo = shopInfoService.findById(services.getShopId());
+        String date = DateUtil.dateFormatStr(new Date(), "yyyy年MM月dd日");
+        LogUtil.debug("发送阿里云预约成功短信,手机号={}", sysVipInfo.getPhone());
+        if (StringUtils.isNotBlank(sysVipInfo.getPhone())) {
+            HashMap<String, String> param = Maps.newHashMap();
+            param.put("date", date);
+            param.put("tel", shopInfo.getShopTel());
+            param.put("shopName", shopInfo.getShopName());
+            smsUtils.sendSms(sysVipInfo.getPhone(), "SMS_226995798", param);
+        }
+
+
+    }
+
+
+    /**
+     * 项目划扣短信提醒
+     *
+     * @param services
+     */
+    @Async
+    public void sendHkNotice(SysProjServices services) {
+        if (chackSetting(services)) return;
+
+        SysVipInfo sysVipInfo = vipInfoDao.selectById(services.getVipId());
+        SysShopInfo shopInfo = shopInfoService.findById(services.getShopId());
+        String date = DateUtil.dateFormatStr(new Date(), "yyyy年MM月dd日");
+
+        List<SysBeauticianState> items = sysBeauticianStateService.findBySerId(services.getId());
+        for (SysBeauticianState item : items) {
+            if (item.getProjInfo() != null) {
+                String projName = item.getProjInfo().getName();
+                LogUtil.debug("发送阿里云项目划扣短信,手机号={}", sysVipInfo.getPhone());
+                if (StringUtils.isNotBlank(sysVipInfo.getPhone())) {
+                    HashMap<String, String> param = Maps.newHashMap();
+                    param.put("date", date);
+                    param.put("projName", projName);
+                    param.put("count", item.getCount() + "");
+                    param.put("balanceCount", item.getProjUse().getSurplusCount() + "");
+                    param.put("tel", shopInfo.getShopTel());
+                    param.put("shopName", shopInfo.getShopName());
+                    smsUtils.sendSms(sysVipInfo.getPhone(), "SMS_226995796", param);
+                }
+
+            }
+        }
+
+
+    }
+
+    private boolean chackSetting(SysProjServices services) {
+        //短信接口为肽妍公司定制,暂时写死
+        if (services.getCompanyId() != 17L) {
+            return true;
+        }
+        if (!busParameterSettingService.isSettingOpen(AppConstance.OPEN_SMS_NOTICE, services.getCompanyId())) {
+            return true;
+        }
+        return false;
+    }
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
index 0bdf347..f569ace 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -36,7 +36,6 @@
 import com.matrix.system.wechart.templateMsg.UniformMsgParam;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -483,9 +482,7 @@
 
 
         // 更新收款时间
-        pageOrder.setPayTime(new Date());
-        pageOrder.setStatu(Dictionary.ORDER_STATU_YFK);
-        sysOrderDao.update(pageOrder);
+        updateOrderInfo(pageOrder);
 
         // 获取用户信息
         SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId());
@@ -515,6 +512,30 @@
         //设置会员积分
         addVipScore(pageOrder);
 
+    }
+
+    /**
+     * 付款后更新订单信息
+     * @param pageOrder
+     */
+    private void updateOrderInfo(SysOrder pageOrder) {
+        pageOrder.setPayTime(new Date());
+        pageOrder.setStatu(Dictionary.ORDER_STATU_YFK);
+        List<SysOrderFlow> flows = pageOrder.getFlows();
+
+        BigDecimal cashPayAmount = flows.stream()
+                .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款")))
+                .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        BigDecimal cardPayAmount = flows.stream()
+                .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("N"))
+                .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        pageOrder.setCardPay(cardPayAmount.doubleValue());
+        pageOrder.setCashPay(cashPayAmount.doubleValue());
+        //欠款金额在流水处理中处理了
+
+        sysOrderDao.update(pageOrder);
     }
 
     private void checkOrder(SysOrder pageOrder) {
@@ -1380,17 +1401,20 @@
             //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗
             boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
             if (zsConsumeAchieve) {
-                puse.setPrice(sysOrderItem.getShoppingGoods().getSealPice());
+                //赠送情况下,如果收款金额大于0,就是赠送金额划扣的情况,金额即为划扣的折扣金额
+                if(sysOrderItem.getZkPrice()>0){
+                    puse.setPrice(sysOrderItem.getZkPrice());
+                }else{
+                    puse.setPrice(sysOrderItem.getShoppingGoods().getSealPice());
+                }
             } else {
                 puse.setPrice(0D);
             }
-
-
         }
         // 设置失效时间
         Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
         puse.setFailTime(invalidTime);
-        puse.setBalance(sysOrderItem.getShoppingGoods().getSealPice() * puse.getSurplusCount());
+        puse.setBalance(puse.getPrice() * puse.getSurplusCount());
         sysProjUseDao.insert(puse);
     }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
index 1ad9a9c..51fea08 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
@@ -1,6 +1,7 @@
 package com.matrix.system.hive.service.imp;
 
 import cn.hutool.core.collection.CollUtil;
+import com.google.common.collect.Lists;
 import com.matrix.component.asyncmessage.AsyncMessageManager;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.exception.GlobleException;
@@ -17,6 +18,7 @@
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.common.service.BusParameterSettingService;
 import com.matrix.system.constance.Dictionary;
 import com.matrix.system.hive.bean.*;
 import com.matrix.system.hive.dao.*;
@@ -67,7 +69,8 @@
     private SysOutStoreItemDao sysOutStoreItemDao;
     @Autowired
     private SysBedInfoDao sysBedInfoDao;
-
+    @Autowired
+    TaiYanAliyunSmsService taiYanAliyunSmsService;
 
     @Autowired
     private SysStoreInfoDao storeInfoDao;
@@ -118,12 +121,17 @@
     BusParameterSettingsDao busParameterSettingsDao;
 
     @Autowired
+    BusParameterSettingService busParameterSettingService;
+
+    @Autowired
     ScoreVipDetailService scoreVipDetailService;
 
     @Autowired
     SysVipInfoDao sysVipInfoDao;
 
 
+    @Autowired
+    ShoppingGoodsAssembleDao goodsAssembleDao;
 
     /**
      * 新增服务单 jyy
@@ -259,7 +267,7 @@
             SysProjUse sysProjUse = projUseService.findById(sysBeauticianState.getPuseId());
 
             //检查是否已经处于无效状态
-           if(Dictionary.TAOCAN_STATUS_WX.equals(sysProjUse.getStatus())){
+            if (Dictionary.TAOCAN_STATUS_WX.equals(sysProjUse.getStatus())) {
                 return new VerifyResult(true, sysProjUse.getProjName() + "项目已经失效");
             }
 
@@ -449,7 +457,54 @@
             lastList.add(lastWork);
         }
         LastestWorkBeatuistaffDao.batchInsert(lastList);
-        return sysProjServicesDao.update(projServices);
+        int i = sysProjServicesDao.update(projServices);
+
+        //根据配置是否完成自动配料
+        if (busParameterSettingService.isSettingOpen(AppConstance.OPEN_SERVICE_ORDER_AUTO_BATCHING, checkProjServices.getCompanyId())){
+            autoBatching(projServices);
+        }
+
+
+        return i;
+    }
+
+
+    /**
+     * 根据配置是否完成自动配料
+     *
+     * @param projServices
+     */
+    private void autoBatching(SysProjServices projServices) {
+
+        //获取最新的服务单信息
+        projServices=findById(projServices.getId());
+        List<SysBeauticianState> beauticianStateList = beauticianStateDao.selectBySerIds(projServices.getId());
+
+
+        List<SysOutStoreItem> outStoreItemList = Lists.newLinkedList();
+        beauticianStateList.stream().forEach(item -> {
+
+            List<ShoppingGoodsAssemble> shoppingGoodsAssembles = goodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getProjId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP);
+
+            if (CollUtil.isNotEmpty(shoppingGoodsAssembles)) {
+                outStoreItemList.addAll(shoppingGoodsAssembles.stream().map(assemble -> {
+                    SysOutStoreItem outStoreItem = new SysOutStoreItem();
+                    outStoreItem.setSkuId(assemble.getAssembleGoodId());
+                    outStoreItem.setAmount(Double.parseDouble(assemble.getTotal()+""));
+                    outStoreItem.setRemark("自动配料");
+                    return outStoreItem;
+                }).collect(Collectors.toList()));
+            }
+        });
+        //组合配料参数
+        projServices.setOutStoreItem(outStoreItemList);
+        //调用配料出库方法
+        try {
+            modifyPLProjServices(projServices);
+        }catch (GlobleException e){
+            LogUtil.debug("配料失败:{}",e.getMessage());
+        }
+
     }
 
 
@@ -662,7 +717,9 @@
             //发送微信公众号提醒
             UniformMsgParam uniformMsgParam = new UniformMsgParam(projServices.getCompanyId(), UniformMsgParam.GZH_FWWC);
             uniformMsgParam.put("serviceId", projServices.getId());
-            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG ,uniformMsgParam);
+            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
+            //发送划扣短信提醒
+            taiYanAliyunSmsService.sendHkNotice(projServices);
 
             return result;
         }
@@ -1052,4 +1109,27 @@
 
         return flag;
     }
+
+
+    @Override
+    public int confirmServiceOrder(Long id) {
+        SysProjServices services = new SysProjServices();
+        services.setId(id);
+        services.setState(Dictionary.BEATUI_STATE_DYY);
+        int i = modify(services);
+        if (i > 0) {
+            //发送微信公众号提醒
+            services = findById(services.getId());
+            UniformMsgParam uniformMsgParam = new UniformMsgParam(services.getCompanyId(), UniformMsgParam.GZH_YYCG);
+            uniformMsgParam.put("serviceId", services.getId());
+            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
+
+            taiYanAliyunSmsService.sendYycgNotice(services);
+
+
+        }
+        return i;
+    }
+
+
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/job/ServiceOvertimeNoticeJob.java b/zq-erp/src/main/java/com/matrix/system/job/ServiceOvertimeNoticeJob.java
index aeeae57..e12431a 100644
--- a/zq-erp/src/main/java/com/matrix/system/job/ServiceOvertimeNoticeJob.java
+++ b/zq-erp/src/main/java/com/matrix/system/job/ServiceOvertimeNoticeJob.java
@@ -29,8 +29,6 @@
     @Value("${evn}")
     private  String evn;
 
-    @Autowired
-    private RabiitMqTemplate rabiitMqTemplate;
 
     @Autowired
     private AsyncMessageManager asyncMessageManager;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopDeliveryInfoAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopDeliveryInfoAction.java
index 1e598f2..82954ed 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopDeliveryInfoAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopDeliveryInfoAction.java
@@ -1,7 +1,6 @@
 package com.matrix.system.shopXcx.action;
 
 import com.matrix.component.asyncmessage.AsyncMessageManager;
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
 import com.matrix.core.anotations.RemoveRequestToken;
 import com.matrix.core.anotations.SaveRequestToken;
 import com.matrix.core.constance.MatrixConstance;
@@ -68,8 +67,6 @@
     @Autowired
     private ShopLogisticsInfoDao shopLogisticsInfoDao;
 
-    @Autowired
-    private RabiitMqTemplate rabiitMqTemplate;
 
     //记录编辑前的值Before_Edit_Value
     public static final String BEV = "ShopDeliveryInfo_BEV";
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopRefundRecordAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopRefundRecordAction.java
index dc60310..b17b449 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopRefundRecordAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopRefundRecordAction.java
@@ -1,8 +1,6 @@
 package com.matrix.system.shopXcx.action;
 
 import com.matrix.component.asyncmessage.AsyncMessageManager;
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
 import com.matrix.core.anotations.RemoveRequestToken;
 import com.matrix.core.anotations.SaveRequestToken;
@@ -64,8 +62,6 @@
 	@Autowired
 	private ShopDeliveryInfoDao shopDeliveryInfoDao;
 	@Autowired
-	private RedisUserLoginUtils redisUserLoginUtils;
-	@Autowired
 	private AsyncMessageManager asyncMessageManager;
 	@Autowired
 	private ShopCouponRecordDao shopCouponRecordDao;
@@ -81,8 +77,6 @@
 	@Value("${evn}")
 	private  String evn;
 
-	@Autowired
-	private RabiitMqTemplate rabiitMqTemplate;
 
 	@Autowired
 	BusParameterSettingsDao parameterSettingsDao;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
index 104bd6d..460abed 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
@@ -1,7 +1,7 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.component.asyncmessage.AsyncMessageManager;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
 import com.matrix.core.constance.SystemErrorCode;
 import com.matrix.core.exception.GlobleException;
@@ -60,7 +60,7 @@
 
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     ShopCouponRecordDao shopCouponRecordDao;
@@ -356,7 +356,7 @@
     @GetMapping(value = "/getOrderStatusCount")
     @ResponseBody
     public AjaxResult getOrderStatusCount() {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         AjaxResult result = AjaxResult.buildSuccessInstance(
                 shopOrderDao.selectOrderStatusCount(sysVipInfo.getId()));
         return result;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxBindingPhoneNumber.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxBindingPhoneNumber.java
index 84755ba..ff3c95e 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxBindingPhoneNumber.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxBindingPhoneNumber.java
@@ -1,11 +1,10 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.tools.AES;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.hive.dao.SysVipInfoDao;
 import com.matrix.system.shopXcx.api.pojo.BindingPhoneNumberPOJO;
@@ -37,10 +36,8 @@
     private SysVipInfoDao sysVipInfoDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
-    @Autowired
-    private RabiitMqTemplate mqTemplate;
 
     @Value("${evn}")
     private String evn;
@@ -97,7 +94,7 @@
         if (StringUtils.isBlank(bindingPhoneNumber.getPhoneNumber())) {
             return new AjaxResult(AjaxResult.STATUS_FAIL, "手机号码不能为空");
         }
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
 
 
         SysVipInfo oldeUser = sysVipInfoDao.selectByPhone(bindingPhoneNumber.getPhoneNumber(), loginUser.getCompanyId());
@@ -109,7 +106,7 @@
             oldeUser.setAvatarUrl(loginUser.getAvatarUrl());
             sysVipInfoDao.update(oldeUser);
             sysVipInfoDao.deleteById(loginUser.getId());
-            String token = redisUserLoginUtils.saveUserInfo(oldeUser);
+            String token = userCacheManager.saveUserInfo(oldeUser);
             AjaxResult result =   AjaxResult.buildSuccessInstance("绑定成功");
             result.putInMap("token",token);
             result.putInMap("userInfo",oldeUser);
@@ -145,7 +142,7 @@
     @RequestMapping(value = "/deciphering")
     public @ResponseBody
     AjaxResult deciphering(@RequestBody DataDecipheringVo dataDecipheringVo) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String session_key = loginUser.getSessionKey();
         LogUtil.debug(dataDecipheringVo.toString());
         String jsonResult = AES.wxDecrypt(dataDecipheringVo.getEncryptedData(), session_key, dataDecipheringVo.getIv());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCollectionAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCollectionAction.java
index 2000ceb..7687443 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCollectionAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCollectionAction.java
@@ -1,9 +1,8 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.core.pojo.AjaxResult;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.hive.bean.SysVipInfo;
-
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.system.shopXcx.bean.ShopCollection;
 import com.matrix.system.shopXcx.dao.ShopCollectionDao;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +26,7 @@
     @Autowired
     private ShopCollectionDao collectionDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     /**
      * 接收保存收藏数据
@@ -35,7 +34,7 @@
     @PostMapping(value = "/saveCollection")
     public @ResponseBody
     AjaxResult saveCollection(@RequestBody ShopCollection collection) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         collection.setCreateBy(loginUser.getOpenId());
         collection.setUpdateBy(loginUser.getOpenId());
         collection.setCollUserid(loginUser.getOpenId());
@@ -72,7 +71,7 @@
     @ResponseBody
     public AjaxResult deleteByProductId(@PathVariable("collProductid") Integer collProductid){
         Map<String, Object> deleteMap = new HashMap<>();
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String collUserid = loginUser.getOpenId();
         deleteMap.put("collProductid", collProductid);
         deleteMap.put("collUserid", collUserid);
@@ -91,7 +90,7 @@
     @PostMapping("/findCollection")
     @ResponseBody
     public AjaxResult getCollectionByUserId(@RequestBody ShopCollection collection) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String userId = loginUser.getOpenId();
         collection.setCollUserid(userId);
         List<ShopCollection> list = collectionDao.selectByUserId(collection);
@@ -107,7 +106,7 @@
     @PostMapping("/findByUserIdAndProid/{collProductid}")
     @ResponseBody
     public AjaxResult findByUserIdAndProid(@PathVariable("collProductid") Integer collProductid) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String userId = loginUser.getOpenId();
         List<ShopCollection> list = collectionDao.selectByUserIdAndProid(collProductid,userId);
         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, list, list.size());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java
index 4c4a0dd..1adc3d1 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java
@@ -1,7 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.component.asyncmessage.AsyncMessageManager;
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
 import com.matrix.component.wechat.externalInterface.common.Signature;
 import com.matrix.component.wechat.externalInterface.common.Util;
 import com.matrix.component.wechat.externalInterface.protocol.queryProtocol.NotifyData;
@@ -69,8 +68,6 @@
     @Autowired
     private ShopPayLogDao shopPayLogDao;
 
-    @Autowired
-    private RabiitMqTemplate rabiitMqTemplate;
 
     @Autowired
     private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxErpOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxErpOrderAction.java
index bfe16d7..e127ce4 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxErpOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxErpOrderAction.java
@@ -1,9 +1,8 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisClient;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.app.authority.AppAuthorityManager;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.common.service.SysUsersService;
 import com.matrix.system.hive.bean.SysOrderFlow;
 import com.matrix.system.hive.bean.SysVipInfo;
@@ -46,14 +45,12 @@
     @Autowired
     private AppAuthorityManager authorityManager;
 
-    @Autowired
-    private RedisClient redisClient;
 
     @Autowired
     private SysVipInfoDao vipInfoDao;
 
     @Autowired
-    RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private SysOrderDao sysOrderDao;
@@ -75,7 +72,7 @@
     })
     @PostMapping(value = "/findUserOrderList")
     public AjaxResult findUserOrderList(@RequestBody @Validated ErpOrderListDto erpOrderListDto) {
-        SysVipInfo vipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo vipInfo = userCacheManager.getLoginUser();
         
         erpOrderListDto.setVipId(vipInfo.getId());
         List<ErpOrderDetailVo> rows = sysOrderDao.selectErpOrderList(erpOrderListDto);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxGetAcodeAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxGetAcodeAction.java
index d04b001..497ee2e 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxGetAcodeAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxGetAcodeAction.java
@@ -1,9 +1,9 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.tools.WxacodeUtil;
 import com.matrix.core.pojo.AjaxResult;
+import com.matrix.system.common.init.UserCacheManager;
+import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.api.WeChatApiTools;
 import com.matrix.system.shopXcx.bean.ShopWxAcode;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +22,7 @@
 @RequestMapping(value = "wxapi/getAcode")
 public class WxGetAcodeAction {
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     WeChatApiTools weChatApiTools;
     /**
@@ -33,7 +33,7 @@
     @PostMapping("/getWxAcode")
     @ResponseBody
     public AjaxResult getWxAcode(@RequestBody ShopWxAcode wxAcode) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String openId = loginUser.getOpenId();
         try {
             String wxacodeUrl = WxacodeUtil.getWxacode(wxAcode.getScene(), wxAcode.getPage(), wxAcode.getFileName(),
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxInvoiceAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxInvoiceAction.java
index 2bd8b97..6175468 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxInvoiceAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxInvoiceAction.java
@@ -1,12 +1,11 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.core.pojo.AjaxResult;
-import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.common.bean.CustomerDataDictionary;
-import com.matrix.system.common.dao.CustomerDataDictionaryDao;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.system.common.constance.AppConstance;
-
+import com.matrix.system.common.dao.CustomerDataDictionaryDao;
+import com.matrix.system.common.init.UserCacheManager;
+import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.bean.ShopInvoice;
 import com.matrix.system.shopXcx.dao.ShopInvoiceDao;
 import org.apache.commons.collections.CollectionUtils;
@@ -30,7 +29,7 @@
     @Autowired
     private ShopInvoiceDao invoiceDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     /**
      * 查询发票内容接口
@@ -51,7 +50,7 @@
     @PostMapping(value = "/saveInvoice")
     public @ResponseBody
     AjaxResult saveInvoice(@RequestBody ShopInvoice shopInvoice) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         shopInvoice.setCreateBy(loginUser.getOpenId());
         shopInvoice.setUpdateBy(loginUser.getOpenId());
         shopInvoice.setUserId(loginUser.getOpenId());
@@ -82,7 +81,7 @@
     @PostMapping("/findProductComment")
     @ResponseBody
     public AjaxResult getProductCommentByUserId(@RequestBody ShopInvoice shopInvoice) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String userId = loginUser.getOpenId();
         shopInvoice.setUserId(userId);
         List<ShopInvoice> list = invoiceDao.selectByUserId(shopInvoice);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxMoneyCardUseAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxMoneyCardUseAction.java
index a8a650d..a00cfff 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxMoneyCardUseAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxMoneyCardUseAction.java
@@ -3,13 +3,13 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
 import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.BasePageQueryDto;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.hive.bean.MoneyCardUse;
 import com.matrix.system.hive.bean.MoneyCardUseFlow;
 import com.matrix.system.hive.bean.SysVipInfo;
@@ -50,7 +50,7 @@
     private MoneyCardUseV2Dao moneyCardUseV2Dao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     MoneyCardUseFlowDao moneyCardUseFlowDao;
@@ -67,7 +67,7 @@
             @ApiResponse(code = 200, message = "ok", response = WxMoneyCardUseVO.class)
     })
     public AjaxResult getUserVipCard() {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq("vip_id", sysVipInfo.getId());
         queryWrapper.eq("is_vip_car","Y");
@@ -84,7 +84,7 @@
             @ApiResponse(code = 200, message = "ok", response = WxMoneyCardUseVO.class)
     })
     public AjaxResult getUserMoneyCardUseList(@RequestBody @Validated BasePageQueryDto pageDto) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq("vip_id", sysVipInfo.getId());
         IPage<MoneyCardUse> page = new Page<>(pageDto.getPageNum(), pageDto.getPageSize());
@@ -116,7 +116,7 @@
         if (total < 0.02) {
             return AjaxResult.buildFailInstance("充值金额最底1元");
         }
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
         moneyCardUseFlow.setVipId(sysVipInfo.getId());
         moneyCardUseFlow.setPayNo(codeService.get32LenNumberCode());
@@ -160,7 +160,7 @@
             @ApiResponse(code = 200, message = "ok", response = MoneyCardUseFlow.class)
     })
     public AjaxResult getRechargeList(@RequestBody @Validated MoneyCardUseFlowDto pageDto) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         pageDto.setCompanyId(sysVipInfo.getCompanyId());
         List<MoneyCardUseFlow> dataList = moneyCardUseFlowDao.selectForWxInPage(pageDto);
         return AjaxResult.buildSuccessInstance(dataList);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxProductCommentAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxProductCommentAction.java
index 456b0e2..d4f04d6 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxProductCommentAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxProductCommentAction.java
@@ -1,10 +1,10 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.common.bean.BusParameterSettings;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.score.constant.ScoreSettingConstant;
 import com.matrix.system.score.entity.ScoreVipDetail;
@@ -34,7 +34,7 @@
     @Autowired
     private ShopProductCommentDao productCommentDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     private ShopOrderDao shopOrderDao;
 
@@ -67,7 +67,7 @@
     @PostMapping(value = "/saveProductComment")
     public @ResponseBody
     AjaxResult saveProductComment(@RequestBody List<ShopProductComment> commentList) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         int flag = 0;
         if(CollectionUtils.isNotEmpty(commentList)){
             for(ShopProductComment productComment : commentList){
@@ -108,7 +108,7 @@
     @PostMapping("/findProductComment")
     @ResponseBody
     public AjaxResult getProductCommentByUserId(@RequestBody ShopProductComment productComment) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String userId = loginUser.getOpenId();
         productComment.setUserId(userId);
         List<ShopProductComment> list = productCommentDao.selectByUserId(productComment);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxReceiveAddressAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxReceiveAddressAction.java
index ba7563a..889ac68 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxReceiveAddressAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxReceiveAddressAction.java
@@ -2,14 +2,13 @@
 
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
-import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.system.common.constance.AppConstance;
-
-import com.matrix.system.shopXcx.bean.ShopReceiveAddress;
-import com.matrix.system.shopXcx.dao.ShopReceiveAddressDao;
+import com.matrix.system.common.init.UserCacheManager;
+import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.api.pojo.AddressUntilsPOJO;
 import com.matrix.system.shopXcx.api.tools.AddressUntils;
+import com.matrix.system.shopXcx.bean.ShopReceiveAddress;
+import com.matrix.system.shopXcx.dao.ShopReceiveAddressDao;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
@@ -30,14 +29,14 @@
     private ShopReceiveAddressDao shopReceiveAddressDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     /**
      * 接收保存收货地址
      */
     @PostMapping(value = "/saveReceiveAddress")
     public @ResponseBody
     AjaxResult saveReceiveAddress(@RequestBody ShopReceiveAddress receiveAddress) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         receiveAddress.setCreateBy(loginUser.getOpenId());
         receiveAddress.setUpdateBy(loginUser.getOpenId());
         receiveAddress.setAddrUserid(loginUser.getOpenId());
@@ -94,7 +93,7 @@
     @PostMapping("/findReceiveAddress")
     @ResponseBody
     public AjaxResult getByAddrUserId(@RequestBody ShopReceiveAddress receiveAddress) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String userId = loginUser.getOpenId();
         receiveAddress.setAddrUserid(userId);
         List<ShopReceiveAddress> list = shopReceiveAddressDao.selectByModel(receiveAddress);
@@ -110,7 +109,7 @@
     @PostMapping("/findAddrByAddrId/{addrId}")
     @ResponseBody
     public AjaxResult getByAddrId(@PathVariable("addrId") Integer addrId) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         String userId = loginUser.getOpenId();
         ShopReceiveAddress params = new ShopReceiveAddress();
         params.setAddrUserid(userId);
@@ -145,7 +144,7 @@
     @PostMapping(value = "/updateReceiveAddress")
     public @ResponseBody
     AjaxResult updateReceiveAddress(@RequestBody ShopReceiveAddress receiveAddress) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         receiveAddress.setCreateBy(loginUser.getOpenId());
         receiveAddress.setUpdateBy(loginUser.getOpenId());
         receiveAddress.setAddrUserid(loginUser.getOpenId());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxRefundRecordAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxRefundRecordAction.java
index 1d471ab..76de059 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxRefundRecordAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxRefundRecordAction.java
@@ -1,6 +1,5 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.tools.WxUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.LogUtil;
@@ -8,6 +7,7 @@
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.common.dao.CustomerDataDictionaryDao;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.api.service.WxShopRefundRecordService;
 import com.matrix.system.shopXcx.api.tools.SMSTools;
@@ -38,7 +38,7 @@
 @RequestMapping(value = "wxapi/RefundRecord")
 public class WxRefundRecordAction {
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     private ShopRefundRecordDao refundRecordDao;
     @Autowired
@@ -111,7 +111,7 @@
     @PostMapping(value = "/saveRefundRecord")
     public @ResponseBody
     AjaxResult saveRefundRecord(@RequestBody ShopRefundRecord refundRecord) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         refundRecord.setCreateBy(loginUser.getOpenId());
         refundRecord.setUpdateBy(loginUser.getOpenId());
         refundRecord.setUserId(loginUser.getId());
@@ -192,7 +192,7 @@
     @PostMapping("/findRefundRecord")
     @ResponseBody
     public AjaxResult getRefundRecordByUserId(@RequestBody ShopRefundRecord refundRecord) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         refundRecord.setUserId(loginUser.getId());
         List<ShopRefundRecord> list = refundRecordDao.selectByRefundUserId(refundRecord);
         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, list, list.size());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesOrderAction.java
index ca54c0f..3546918 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesOrderAction.java
@@ -2,15 +2,15 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.system.hive.dao.SysVipInfoDao;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao;
 import com.matrix.system.fenxiao.dao.ShopSalesmanOrderDao;
 import com.matrix.system.fenxiao.service.ShopSalesmanApplyService;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysVipInfoDao;
 import com.matrix.system.shopXcx.api.dto.SaleOrderDto;
 import com.matrix.system.shopXcx.vo.SalesOrderVo;
 import io.swagger.annotations.Api;
@@ -44,7 +44,7 @@
     ShopSalesmanApplyService shopSalesmanApplyService;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private SysVipInfoDao sysVipInfoDao;
@@ -59,7 +59,7 @@
             @ApiResponse(code = 200, message = "ok", response = SalesOrderVo.class)
     })
     AjaxResult getInvitationuserList(@RequestBody @Validated SaleOrderDto saleOrderDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Page<SalesOrderVo> page=new Page<>(saleOrderDto.getPageNum(),saleOrderDto.getPageSize());
         if(StringUtils.isBlank(saleOrderDto.getSort())){
             saleOrderDto.setSort("create_time");
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java
index faf6fc3..3c51e23 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.interceptor.HostInterceptor;
@@ -47,7 +47,7 @@
     @Autowired
     private ShopSkuDao shopSkuDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @ApiOperation(value = "查询推广商品", notes = "")
     @PostMapping(value = "/getSalesProductList")
@@ -64,7 +64,7 @@
         shopProduct.setAbleSales(ShopProduct.ABLE_SALES);
         shopProduct.setCompanyId(HostInterceptor.getCompanyId());
         List<ShopProduct> shopProducts = shopProductDao.selectByModelWx(shopProduct);
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(sysVipInfo.getSalesmanGrade());
         shopProducts.forEach(item->{
             List<ShopSku> shopSkus = shopSkuDao.selectByPid(item.getId());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesWithdrawalAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesWithdrawalAction.java
index b60d8e3..2c5cba2 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesWithdrawalAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesWithdrawalAction.java
@@ -4,7 +4,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.hive.dao.SysVipInfoDao;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
@@ -39,7 +39,7 @@
 
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private SysVipInfoDao sysVipInfoDao;
@@ -62,7 +62,7 @@
             @ApiResponse(code = 200, message = "ok", response = ShopRevenueFlow.class)
     })
     AjaxResult getInvitationuserList(@RequestBody @Validated RevenueFlowDto revenueFlowDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Page<ShopRevenueFlow> page=new Page<>(revenueFlowDto.getPageNum(),revenueFlowDto.getPageSize());
         revenueFlowDto.setUserId(loginUser.getId());
         IPage<ShopRevenueFlow> shopSalesmanApplyIPage = revenueFlowDao.selectRevenuFlowList(page,  revenueFlowDto);
@@ -78,7 +78,7 @@
     })
     @Transactional
     AjaxResult withdrawalCash(@RequestBody @Validated WithdrawalCashDto withdrawalCashDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         loginUser=sysVipInfoDao.selectById(loginUser.getId());
         if(withdrawalCashDto.getAmount()<1){
             return AjaxResult.buildFailInstance("最小提现金额为1元");
@@ -109,9 +109,7 @@
                 //扣除用户剩余提现金额
                 loginUser.setWithdrawalCash(loginUser.getWithdrawalCash()-withdrawalCashDto.getAmount());
                 sysVipInfoDao.update(loginUser);
-                redisUserLoginUtils.updateUserInfo(loginUser);
-
-
+                userCacheManager.updateUserInfo(loginUser);
                 return AjaxResult.buildSuccessInstance("提现成功");
             }
         }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java
index ee96c85..a2ecabf 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java
@@ -3,9 +3,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.system.hive.dao.SysVipInfoDao;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.tools.ImageUtil;
 import com.matrix.component.tools.WxacodeUtil;
 import com.matrix.core.pojo.AjaxResult;
@@ -18,11 +15,14 @@
 import com.matrix.system.common.bean.BusParameterSettings;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.common.interceptor.HostInterceptor;
 import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
 import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao;
 import com.matrix.system.fenxiao.entity.ShopSalesmanApply;
 import com.matrix.system.fenxiao.service.ShopSalesmanApplyService;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysVipInfoDao;
 import com.matrix.system.hive.plugin.util.CollectionUtils;
 import com.matrix.system.shopXcx.api.WeChatApiTools;
 import com.matrix.system.shopXcx.dao.ShopProductDao;
@@ -41,8 +41,6 @@
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -67,7 +65,7 @@
     ShopSalesmanApplyService shopSalesmanApplyService;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private SysVipInfoDao sysVipInfoDao;
@@ -106,7 +104,7 @@
     @PostMapping(value = "/applyToBeAnSalesman")
     @Transactional
     public AjaxResult applyToBeAnSalesman(@RequestBody Map<String, String> param) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Long invitationId=null;
         if(StringUtils.isNotBlank(param.get("invitationId"))){
              invitationId = Long.parseLong(param.get("invitationId"));
@@ -118,7 +116,7 @@
         }
         ShopSalesmanApply shopSalesmanApply = shopSalesmanApplyService.applyToBeAnSalesman(loginUser.getId(), null, invitationId, ShopSalesmanApply.APPLY_WAY_SELF);
         loginUser = sysVipInfoDao.selectById(loginUser.getId());
-        redisUserLoginUtils.updateUserInfo(loginUser);
+        userCacheManager.updateUserInfo(loginUser);
         return AjaxResult.buildSuccessInstance(shopSalesmanApply);
 
 
@@ -131,7 +129,7 @@
     })
     @GetMapping(value = "/queryApplyProgress")
     public AjaxResult queryApplyProgress() {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         QueryWrapper<ShopSalesmanApply> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("user_id", loginUser.getId());
         queryWrapper.eq("apply_status", ShopSalesmanApply.APPLY_STATUS_DSH);
@@ -155,7 +153,7 @@
             return AjaxResult.buildFailInstance("请求参数错误");
         }
 
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         if (invitationId.equals(loginUser.getId())) {
             return AjaxResult.buildSuccessInstance("不能绑定自己");
         }
@@ -183,7 +181,7 @@
     @PostMapping(value = "/getInvitationPoster")
     AjaxResult getInvitationPoster() {
         try {
-            SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+            SysVipInfo loginUser = userCacheManager.getLoginUser();
 
             String baseSavePath = PropertiesUtil.getString(AppConstance.FILES_TORAGE_PATH);
             // 图片访问URL
@@ -247,7 +245,7 @@
             @ApiResponse(code = 200, message = "ok", response = SalesmanVo.class)
     })
     AjaxResult getInvitationuserList(@RequestBody BasePageQueryDto pageDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Page<SalesmanVo> page = new Page<>(pageDto.getPageNum(), pageDto.getPageSize());
         IPage<SalesmanVo> shopSalesmanApplyIPage = salesmanApplyDao.selectInvitationuserInPage(page, loginUser.getId(), pageDto.getKeywords());
         AjaxResult result = AjaxResult.buildSuccessInstance(shopSalesmanApplyIPage.getRecords());
@@ -261,7 +259,7 @@
             @ApiResponse(code = 200, message = "ok", response = SalesmanCenterInfo.class)
     })
     AjaxResult getSalesmanCenterInfo() {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         SalesmanCenterInfo salesmanCenterInfo = salesmanApplyDao.selectSalesmanCenterInfo(loginUser.getId());
         return AjaxResult.buildSuccessInstance(salesmanCenterInfo);
     }
@@ -272,7 +270,7 @@
             @ApiResponse(code = 200, message = "ok", response = SalesmanApplyCondition.class)
     })
     AjaxResult getSalesmanApplyCondition() {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         VerificationResult ableToBeAnSalesman = shopSalesmanApplyService.isAbleToBeAnSalesman(loginUser.getId(), loginUser.getCompanyId());
         SalesmanApplyCondition applyConditionInfo = new SalesmanApplyCondition();
         applyConditionInfo.setIsAbleApply(ableToBeAnSalesman.isJudgeResult());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShareProductAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShareProductAction.java
index c0b642a..5232255 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShareProductAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShareProductAction.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.tools.ImageUtil;
 import com.matrix.component.tools.WxacodeUtil;
 import com.matrix.core.pojo.AjaxResult;
@@ -50,7 +50,7 @@
     private ShopProductDao shopProductDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private ShopShareQrcordDao shareQrcordDao;
@@ -89,7 +89,7 @@
     @RequestMapping(value = "/getProductShareQrcode")
     public @ResponseBody
     AjaxResult getwxacode1(@RequestBody QrcodeVo qrcodeVo) throws Exception {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         loginUser = sysVipInfoDao.selectById(loginUser.getId());
         //活动类型
         ShopActivities activities=null;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesGroupBuyController.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesGroupBuyController.java
index 4fb5a76..2178071 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesGroupBuyController.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesGroupBuyController.java
@@ -1,7 +1,7 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.common.interceptor.HostInterceptor;
 import com.matrix.system.shopXcx.api.service.WXShopOrderService;
@@ -59,7 +59,7 @@
     private ShopProductDao shopProductDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private WxShopActivitiesGroupService wxShopActivitiesGroupService;
@@ -122,7 +122,7 @@
      */
     @GetMapping(value = "/findOwnerGroupBuyInfo/{actId}")
     public AjaxResult findOwnerGroupBuyInfo(@PathVariable("actId") Long actId) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
 
         // 1、判断该用户在该活动中有没有正在拼团 若有,则返回正在拼团的用户列表,若没有则返回gruoping=1且返回正在拼团的拼团列表, 若加入了团未完成付款,则需要再做设置
         ShopActivitiesGroupJoin isExsit = shopActivitiesGroupJoinDao.selectIsExistGroupInfoByUserId(actId, sysVipInfo.getOpenId());
@@ -154,7 +154,7 @@
      */
     @GetMapping(value = "/findGroupJoinInfo/{gjId}")
     public AjaxResult findGroupJoinInfo(@PathVariable Long gjId) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopActivitiesGroupJoin groupJoin = shopActivitiesGroupJoinDao.selectOwnerGroupJoinInfo(gjId);
         int isExist = 2;
 
@@ -198,7 +198,7 @@
 
     @PostMapping(value = "/calPrice")
     public AjaxResult calPrice(@RequestBody CreateGroupBuyDTO createGroupBuyDTO) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopActivitiesGroupPrice groupPrice = shopActivitiesGroupPriceDao.selectById(createGroupBuyDTO.getGpId());
         // 判断参数中gjId是否为空,若为空则为团长开团。再判断团长价是否为空,如果不为空则拥有团长价
         if (createGroupBuyDTO.getGjId() == null) {
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java
index c54e9ac..6cc7a00 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java
@@ -7,7 +7,7 @@
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.activity.dao.ActivitySignAwardSetDao;
@@ -54,7 +54,7 @@
     private ShopActivitiesDao shopActivitiesDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private ActivitySignAwardSetDao activitySignAwardSetDao;
@@ -96,7 +96,7 @@
     @GetMapping(value = "/getLuckydrawBasicInfo")
     public AjaxResult getLuckydrawBasicInfo() {
         //获取登录人信息
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Long companyId = loginUser.getCompanyId();
         Long userId = loginUser.getId();
         //获取抽奖活动的信息
@@ -164,7 +164,7 @@
     @ResponseBody
     @Transactional
     public AjaxResult clickLuckyDraw(@PathVariable("actId") long actId) {
-        SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user = userCacheManager.getLoginUser();
         Long userId = user.getId();
         Long companyId = user.getCompanyId();
         /**
@@ -503,7 +503,7 @@
     @GetMapping(value = "scoreLuckyDraw/{actId}")
     @ResponseBody
     public AjaxResult logisticsInsureById(@PathVariable("actId") Long actId) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Long userId = loginUser.getId();
         Long companyId = loginUser.getCompanyId();
         //获取用户总积分
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSalonAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSalonAction.java
index d7a2403..6a3cd63 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSalonAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSalonAction.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
@@ -43,7 +43,7 @@
     private ShopActivitiesSalonAttributeDao shopActivitiesSalonAttributeDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private ShopActivitiesSalonRecordDao shopActivitiesSalonRecordDao;
@@ -81,7 +81,7 @@
      */
     @GetMapping(value = "/findSalonInfoById/{id}")
     public AjaxResult findSalonInfoById(@PathVariable("id") Long id) {
-        SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user = userCacheManager.getLoginUser();
         ShopActivities shopActivities = shopActivitiesDao.selectSalonActivityById(id);
         ShopActivitiesSalonRecord salonRecord = shopActivitiesSalonRecordDao.selectSalonRecordByUserIdAndActId(user.getOpenId(), id);
         AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功");
@@ -104,7 +104,7 @@
     @PostMapping(value = "/joinSalonActivity")
     @Transactional
     public AjaxResult joinSalonActivity(@RequestBody CreateSalonDTO salonDTO) {
-        SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user = userCacheManager.getLoginUser();
 
         ShopActivities shopActivities = shopActivitiesDao.selectById(salonDTO.getActId());
         if (shopActivities == null) {
@@ -172,7 +172,7 @@
      */
     @RequestMapping(value = "/findSalonListByUser")
     public AjaxResult findSalonListByUser(@RequestBody SalonVO salonVO) {
-        SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user = userCacheManager.getLoginUser();
         salonVO.setUserId(user.getOpenId());
         List<ShopActivities> list = shopActivitiesDao.selectSalonActivityByUser(salonVO);
         return AjaxResult.buildSuccessInstance(list);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSecKillAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSecKillAction.java
index e42af89..4ddba04 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSecKillAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSecKillAction.java
@@ -1,7 +1,7 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.shopXcx.api.service.WXShopOrderService;
 import com.matrix.system.shopXcx.api.service.WxShopActivitiesSecKillService;
@@ -42,7 +42,7 @@
     private WxShopActivitiesSecKillService wxShopActvitiesSecKillService;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
 
     /**
@@ -111,7 +111,7 @@
      */
     @PostMapping(value = "/calSecKillPrice")
     public AjaxResult calSecKillPrice(@RequestBody SecKillVO secKillVO) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopActivitiesSeckillInfo seckillInfo = shopActivitiesSeckillInfoDao.selectById(secKillVO.getId());
         if (seckillInfo == null) {
             return AjaxResult.buildFailInstance("参数有误");
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java
index 447b434..2385215 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java
@@ -9,7 +9,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.activity.dao.ActivitySignAwardSetDao;
@@ -56,7 +56,7 @@
     private ShopActivitiesDao shopActivitiesDao;
 	
 	@Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 	
 	@Autowired
 	private ActivitySignAwardSetDao activitySignAwardSetDao;
@@ -96,7 +96,7 @@
     @GetMapping(value = "/getSignBasicInfo")
     public AjaxResult getSignBasicInfo() {
 		//获取登录人信息
-		SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+		SysVipInfo loginUser = userCacheManager.getLoginUser();
 		Long companyId = loginUser.getCompanyId();
 		Long userId = loginUser.getId();
 		//获取签到活动的信息
@@ -177,7 +177,7 @@
     @ResponseBody
     public AjaxResult getSignRecord(@PathVariable("actId") long actId,@PathVariable("month") String dateStr) {
         //获取登录人信息
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Long companyId = loginUser.getCompanyId();
         Long userId = loginUser.getId();
         Date date = DateUtil.parse(dateStr);
@@ -263,7 +263,7 @@
     @ResponseBody
     @Transactional
     public AjaxResult clickSign(@PathVariable("actId") long actId) {
-        SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user = userCacheManager.getLoginUser();
         Long userId = user.getId();
         Long companyId = user.getCompanyId();
         /**
@@ -577,7 +577,7 @@
             @ApiResponse(code = 200, message = "ok", response = SignAwardListVo.class)
     })
     public AjaxResult getSignAwardList(@RequestBody @Validated SignAwardDto signAwardDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Page<SalesOrderVo> page=new Page<>(signAwardDto.getPageNum(),signAwardDto.getPageSize());
         if(StringUtils.isBlank(signAwardDto.getSort())){
         	signAwardDto.setSort("create_time");
@@ -601,7 +601,7 @@
             @ApiResponse(code = 200, message = "ok", response = SeeAwardTextVo.class)
     })
     public AjaxResult seeAwardText(@RequestBody @Validated SeeAwardTextDto seeAwardTextDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         seeAwardTextDto.setUserId(loginUser.getId());
         seeAwardTextDto.setCompanyId(loginUser.getCompanyId());
         SeeAwardTextVo seeAwardTextVO = activitySignReceiveRecordDao.selectSeeAwardTextVOById(seeAwardTextDto);
@@ -620,7 +620,7 @@
             @ApiResponse(code = 200, message = "ok", response = SeeAwardTextVo.class)
     })
     public AjaxResult logisticsInsure(@RequestBody @Validated SeeAwardTextDto seeAwardTextDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         seeAwardTextDto.setUserId(loginUser.getId());
         seeAwardTextDto.setCompanyId(loginUser.getCompanyId());
         SeeAwardTextVo seeAwardTextVO = activitySignReceiveRecordDao.selectSeeAwardTextVOById(seeAwardTextDto);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopCouponAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopCouponAction.java
index b57dc41..f460fc3 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopCouponAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopCouponAction.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.system.common.interceptor.HostInterceptor;
@@ -25,7 +25,7 @@
     @Autowired
     private ShopCouponDao shopCouponDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     /**
      * 获取可以领取的优惠券
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopProduct.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopProduct.java
index 5eb9595..96b7711 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopProduct.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopProduct.java
@@ -1,14 +1,14 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
-import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
-import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.CustomerDataDictionaryDao;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.common.interceptor.HostInterceptor;
+import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
+import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
+import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.api.service.WxShopCouponService;
 import com.matrix.system.shopXcx.bean.*;
 import com.matrix.system.shopXcx.dao.*;
@@ -65,7 +65,7 @@
     private ShopArticleDao shopArticleDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     WxShopCouponService shopCouponService;
@@ -88,7 +88,7 @@
     @RequestMapping(value = "/getProductById/{shopId}/{id}")
     @ResponseBody
     public AjaxResult getProductById(@PathVariable Long shopId, @PathVariable("id") Integer id) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopProduct shopProduct = shopProductDao.selectById(id);
         if (shopProduct == null) {
             return new AjaxResult(AjaxResult.STATUS_FAIL, "没有查询到商品");
@@ -128,11 +128,12 @@
 
 
 
-        if (redisUserLoginUtils.isUserLogin()) {
+        if (userCacheManager.isUserLogin()) {
             //查询产品适配的优惠券
             result.putInMap("couponList", shopCouponService.getCouponListByProductId(id));
             //查询产品是否被用户收藏
-            result.putInMap("checkCollect", CollectionUtils.isNotEmpty(collectionDao.selectByUserIdAndProid(id, redisUserLoginUtils.getLoginUser(SysVipInfo.class).getOpenId())));
+            SysVipInfo user=userCacheManager.getLoginUser();
+            result.putInMap("checkCollect", CollectionUtils.isNotEmpty(collectionDao.selectByUserIdAndProid(id, user.getOpenId())));
         } else {
             result.putInMap("checkCollect", false);
         }
@@ -230,7 +231,7 @@
      * @param shopProduct
      */
     private void saveSearchHistroy(@RequestBody ShopProduct shopProduct) {
-        SysVipInfo bigUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo bigUser = userCacheManager.getLoginUser();
         ShopSearchRecord searchBean = new ShopSearchRecord();
         if (StringUtils.isNotBlank(shopProduct.getTitle())) {
             searchBean.setSearchType(AppConstance.SEARCH_TYPE);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopScoreAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopScoreAction.java
index 7ceed5e..f729baf 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopScoreAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopScoreAction.java
@@ -3,7 +3,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.score.dao.ScoreUseRecordDao;
 import com.matrix.system.score.dao.ScoreVipDetailDao;
@@ -30,7 +30,7 @@
 public class WxShopScoreAction {
 
     @Autowired
-    RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     ScoreUseRecordDao scoreUseRecordDao;
@@ -44,7 +44,7 @@
             @ApiResponse(code = 200, message = "ok", response = ScoreUseRecordVo.class)
     })
     AjaxResult getFlowList(@RequestBody @Validated ScoreFlowDto scoreFlowDto) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Page<ScoreUseRecordVo> page=new Page<>(scoreFlowDto.getPageNum(),scoreFlowDto.getPageSize());
         scoreFlowDto.setVipId(loginUser.getId());
         IPage<ScoreUseRecordVo> shopScoreRecord = scoreUseRecordDao.selectFlowList(page,  scoreFlowDto);
@@ -58,7 +58,7 @@
             @ApiResponse(code = 200, message = "ok", response = AjaxResult.class)
     })
     AjaxResult getUserScore() {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         AjaxResult result=AjaxResult.buildSuccessInstance(scoreVipDetailDao.selectUserTotalScore(loginUser.getId()));
         return result;
     }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
index 3b17f08..8dfbbd1 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
@@ -1,7 +1,7 @@
 package com.matrix.system.shopXcx.api.action;
 
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.constance.SystemErrorCode;
 import com.matrix.core.constance.SystemMessageCode;
 import com.matrix.core.exception.GlobleException;
@@ -41,7 +41,7 @@
     @Autowired
     private ShopShoppingCartDao shoppingCartDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     WxShopCouponService shopCouponService;
@@ -71,7 +71,7 @@
     @PostMapping("/findShoppingCart")
     @ResponseBody
     public AjaxResult getShoppingCartByUserId(@RequestBody ShopShoppingCart shoppingCart) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         List<ShopShoppingCart> list = shoppingCartDao.selectByCartUserId(shoppingCart.getShopId(),loginUser.getId());
         List<ShopCartVo> shopCartVoList = shoppingCartService.buildShopCart(list);
         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, shopCartVoList, shopCartVoList.size());
@@ -104,7 +104,7 @@
     public
     @ResponseBody
     AjaxResult getUserCartCount(@PathVariable("shopId") Long shopId) {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         Integer userCartCount = shoppingCartDao.selectUserCartCount(shopId, loginUser.getId());
         if (userCartCount == null) {
             userCartCount = 0;
@@ -130,7 +130,7 @@
 
         shoppingCart.setCartProductId(sku.getpId());
 
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         shoppingCart.setCreateBy(loginUser.getOpenId());
         shoppingCart.setUpdateBy(loginUser.getOpenId());
         shoppingCart.setCartUserId(loginUser.getId());
@@ -277,7 +277,7 @@
     @ResponseBody
     public AjaxResult updateCartAllSelected(@PathVariable("isSelected") Integer isSelected,
                                             @PathVariable("shopId") Long shopId) {
-        SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user = userCacheManager.getLoginUser();
         shoppingCartDao.updateAllSelected(user.getOpenId(), shopId, isSelected);
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功");
     }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSkinCheckAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSkinCheckAction.java
index 7ea213a..78429ad 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSkinCheckAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSkinCheckAction.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.core.tools.StringUtils;
@@ -41,14 +41,14 @@
     private SysVipInfoDao vipInfoDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private ShopProductDao shopProductDao;
 
     @RequestMapping(value = "/showSkinList")
     public @ResponseBody AjaxResult showSkinList(@RequestBody SkinCheckDTO skinCheckDTO) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         PaginationVO pageVo = new PaginationVO();
         pageVo.setLimit(skinCheckDTO.getLimit());
         pageVo.setOffset(skinCheckDTO.getOffset());
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserAction.java
index 6abbed1..0b0eaac 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserAction.java
@@ -2,7 +2,7 @@
 
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.tools.HttpCurlUtil;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.LogUtil;
@@ -56,7 +56,7 @@
     @Autowired
     BusParameterSettingsDao busParameterSettingsDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     ShopSalesmanApplyDao salesmanApplyDao;
 
@@ -134,7 +134,7 @@
             }
             // 存放redis
             sysVipInfo.setLevelCard(null);
-            String token = redisUserLoginUtils.saveUserInfo(sysVipInfo);
+            String token = userCacheManager.saveUserInfo(sysVipInfo);
             LogUtil.info("用户token={}", token);
             res.putInMap("token", token);
             res.putInMap("userInfo", sysVipInfo);
@@ -156,7 +156,7 @@
     @RequestMapping(value = "/findUserInfo")
     public @ResponseBody
     AjaxResult findUserInfo() {
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         SysVipInfo sysVipInfo = sysVipInfoService.findById(loginUser.getId());
         sysVipInfo.setPointAll(scoreVipDetailDao.selectUserTotalScore(loginUser.getId()));
         sysVipInfo.setBalance(moneyCardUseDao.selectVipCardTotalMoney(loginUser.getId()));
@@ -199,7 +199,7 @@
     public @ResponseBody
     AjaxResult saveUserInfo(@RequestBody XcxUserSaveUserInfoDto xcxUserSaveUserInfoDto) {
 
-        SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo loginUser = userCacheManager.getLoginUser();
         SysVipInfo sysVipInfo = new SysVipInfo();
         sysVipInfo.setId(loginUser.getId());
 
@@ -227,7 +227,7 @@
         if ((loginUser.getIsSales() == null || loginUser.getIsSales() == 2)
                 && StringUtils.isNotBlank(sysVipInfo.getNickName())) {//目前还不是分销员
             BusParameterSettings fxSwith = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_SWITCH, HostInterceptor.getCompanyId());
-            if (fxSwith.getParamValue().equals("1")) {//开启分销
+            if (fxSwith!=null && fxSwith.getParamValue().equals("1")) {//开启分销
                 BusParameterSettings applyWay = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_APPLY_WAY, loginUser.getCompanyId());
                 if (applyWay.getParamValue().equals(FenxiaoSettingConstant.FX_APPLY_WAY_AUTO)) {//自动成为分销员
                     QueryWrapper<ShopSalesmanApply> queryWrapper = new QueryWrapper<>();
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserSearchRecord.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserSearchRecord.java
index e56f7ea..99786fa 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserSearchRecord.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserSearchRecord.java
@@ -3,7 +3,7 @@
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.hive.bean.SysVipInfo;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.shopXcx.dao.ShopSearchRecordDao;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -30,7 +30,7 @@
     private ShopSearchRecordDao shopSearchRecordDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     /**
      * 查询搜索记录
@@ -39,7 +39,7 @@
     @RequestMapping(value = "/getSearchRecordList")
     @ResponseBody
     public AjaxResult getSearchRecordList(){
-        SysVipInfo bigUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo bigUser = userCacheManager.getLoginUser();
         if(bigUser == null){
             return new AjaxResult(AjaxResult.STATUS_FAIL,"用户未授权");
         }
@@ -54,7 +54,7 @@
     @RequestMapping(value = "/deleteSearchRecord")
     @ResponseBody
     public AjaxResult deleteSearchRecord(){
-        SysVipInfo bigUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo bigUser = userCacheManager.getLoginUser();
         shopSearchRecordDao.deleteByUserId(bigUser.getOpenId());
         return new AjaxResult(AjaxResult.STATUS_SUCCESS,"删除成功");
     }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java
index dbc9272..4e958b3 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java
@@ -1,7 +1,6 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.VerifyResult;
@@ -75,7 +74,7 @@
     private  SysBeauticianStateService sysBeauticianStateService;
 
     @Autowired
-    RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     ShopProductDao productDao;
@@ -86,8 +85,6 @@
     @Autowired
     SysVipInfoDao sysVipInfoDao;
 
-    @Autowired
-    RabiitMqTemplate rabiitMqTemplate;
 
     @Autowired
     SysProjUseDao projUseDao;
@@ -273,7 +270,7 @@
     @RequestMapping(value = "/createServiceOrder")
     public @ResponseBody
     AjaxResult createServiceOrder(@RequestBody Onlinebooking onlinebooking) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         SysVipInfo vipInfo = vipInfoDao.selectByPhone(sysVipInfo.getPhone(),HostInterceptor.getCompanyId());
         SysProjUse sysProjUse = projUseDao.selectById(Long.parseLong(onlinebooking.getProductId() + ""));
         Date yyTime = DateUtil.stringToDate(onlinebooking.getTimeStr(), DateUtil.DATE_FORMAT_MM);
@@ -367,7 +364,7 @@
     @PostMapping(value = "/getServiceOrderList")
     @ResponseBody
     public AjaxResult findServiceOrderList(@RequestBody @Validated ErpServiceOrderListDto orderListDto) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         orderListDto.setVipId(sysVipInfo.getId());
         List<ErpServiceOrderListVo> apiServiceOrderListInPage = projServicesDao.findWxServiceOrderList(orderListDto);
         return AjaxResult.buildSuccessInstance(apiServiceOrderListInPage,"查询成功");
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
index 8519518..63c7c47 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.service;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
@@ -26,7 +26,7 @@
     @Autowired
     private ShopShoppingCartDao shoppingCartDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     WxShopCouponService shopCouponService;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
index ba08465..aed6be7 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.service;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
@@ -21,7 +21,7 @@
     @Autowired
     private ShopShoppingCartDao shoppingCartDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     WxShopCouponService shopCouponService;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
index c3832e8..7982cf2 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
@@ -3,8 +3,7 @@
 import cn.hutool.core.collection.CollUtil;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.tools.WxUtils;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
 import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
@@ -16,7 +15,6 @@
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.common.dao.CustomerDataDictionaryDao;
 import com.matrix.system.common.interceptor.HostInterceptor;
-import com.matrix.system.constance.Dictionary;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.hive.dao.ShoppingGoodsDao;
 import com.matrix.system.hive.dao.SysVipInfoDao;
@@ -55,7 +53,7 @@
     @Autowired
     private WxShopOrderUtil wxShopOrderUtil;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     private WeixinServiceUtil weixinServiceUtil;
     @Autowired
@@ -128,7 +126,7 @@
     @Transactional(rollbackFor = Exception.class)
     @Override
     public ShopOrder createShopOrder(ShopOrderDto shopOrderDto) throws Exception {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
 
 
 
@@ -273,7 +271,7 @@
         //支付总积分
         Integer scoreCount=0;
 
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
 
         //计算购物车中物品的优惠信息
         List<OrderItemDto> orderItemDtos = shopOrderDto.getOrderItemList()
@@ -449,7 +447,7 @@
      */
     @Override
     public AjaxResult getMyOrderInfo(OrderInfoQueryPOJO orderInfoQueryPOJO) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         orderInfoQueryPOJO.setSort("update_time");
         if (orderInfoQueryPOJO.getOffset() >= 1) {
             orderInfoQueryPOJO.setOffset((orderInfoQueryPOJO.getOffset() - 1) * orderInfoQueryPOJO.getLimit());
@@ -466,7 +464,7 @@
      */
     @Override
     public AjaxResult getOrderInfoById(Integer orderId) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopOrder shopOrder = shopOrderDao.selectOrderInfoById(sysVipInfo.getId(), orderId);
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(shopOrder));
     }
@@ -488,7 +486,7 @@
         }
         if (shopOrder.getDiscountAmount() != null && shopOrder.getDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
             ShopCouponRecord shopCouponRecord = new ShopCouponRecord();
-            SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+            SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
             shopCouponRecord.setUserId(sysVipInfo.getId());
             shopCouponRecord.setOrderId(orderId);
             List<ShopCouponRecord> recordList = shopCouponRecordDao.selectByModel(shopCouponRecord);
@@ -614,8 +612,6 @@
      * @param orderId
      * @return
      */
-    @Autowired
-    RabiitMqTemplate rabiitMqTemplate;
 
     @Override
     public AjaxResult findOrderPayStatus(Integer orderId) {
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
index aefbb92..5cdb27c 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
@@ -2,7 +2,7 @@
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.tools.WxUtils;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
 import com.matrix.core.exception.GlobleException;
@@ -42,7 +42,7 @@
     private ShopActivitiesGroupInfoDao shopActivitiesGroupInfoDao;
 
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
 
     @Autowired
     private ShopActivitiesGroupPriceDao shopActivitiesGroupPriceDao;
@@ -89,7 +89,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult createGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) throws Exception {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
 
         ShopActivitiesGroupPrice groupPrice = shopActivitiesGroupPriceDao.selectById(createGroupBuyDTO.getGpId());
         ShopActivitiesGroupInfo groupInfo = shopActivitiesGroupInfoDao.selectGroupInfoByActId(groupPrice.getActId());
@@ -191,7 +191,7 @@
     @Transactional(rollbackFor = Exception.class)
     @Override
     public AjaxResult joinGroupBuy(CreateGroupBuyDTO createGroupBuyDTO) throws Exception {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
 
         // TODO 需判断拼团结束时间以及当前拼团是否已满员
 
@@ -316,7 +316,7 @@
         if (shopReceiveAddress == null) {
             throw new GlobleException("请选择正确的收获地址");
         }
-        SysVipInfo user=redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo user=userCacheManager.getLoginUser();
         ShopOrder shopOrder = new ShopOrder();
         shopOrder.setCompanyId(user.getCompanyId());
         shopOrder.setStoreId(Integer.parseInt(createGroupBuyDTO.getShopId().toString()));
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
index ab875e9..b7f8f78 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
@@ -3,7 +3,7 @@
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.component.tools.WxUtils;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
 import com.matrix.core.exception.GlobleException;
@@ -55,13 +55,13 @@
     @Autowired
     private ShopOrderDetailsDao shopOrderDetailsDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     private ShopActivitiesSeckillRecordDao shopActivitiesSeckillRecordDao;
 
     @Override
     public AjaxResult createSecKillOrder(CreateSecKillDTO secKillDTO) throws Exception {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopActivitiesSeckillInfo seckillInfo = shopActivitiesSeckillInfoDao.selectById(secKillDTO.getId());
         if (seckillInfo == null) {
             return AjaxResult.buildFailInstance("秒杀不存在");
@@ -126,7 +126,7 @@
     }
 
     private ShopOrder createOrder(CreateSecKillDTO secKillDTO) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(secKillDTO.getAddressId());
         if (shopReceiveAddress == null) {
             throw new GlobleException("请选择正确的收获地址");
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
index d2840d3..c00c91a 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
@@ -1,7 +1,7 @@
 package com.matrix.system.shopXcx.api.service.impl;
 
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.core.tools.LogUtil;
@@ -33,7 +33,7 @@
     @Autowired
     private WxShopOrderUtil wxShopOrderUtil;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     private ShopCouponDao shopCouponDao;
     @Autowired
@@ -61,7 +61,7 @@
         List<CouponReceiveInfoVO> shopCoupons = new ArrayList<>();
 
 
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         //1.找到用户所有的优惠券
         List<CouponReceiveInfoVO> userAllCoupon = shopCouponRecordDao.selectMyCouponByStatus(companyId, sysVipInfo.getId(), AppConstance.MY_COUPON_NOT_USE,
                 null);
@@ -150,7 +150,7 @@
      */
     @Override
     public AjaxResult getUsableCoupon(PaginationVO pageVo) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         boolean newPeople = wxShopCouponUtil.verifyIsNewPeople(sysVipInfo.getId());
         List<ShopCoupon> list = shopCouponDao.selectUsableCoupon(newPeople, sysVipInfo.getOpenId(), pageVo);
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, list);
@@ -166,7 +166,7 @@
     @Override
     public AjaxResult receiveCoupon(Integer couponId) {
         ShopCoupon shopCoupon = shopCouponDao.selectById(couponId);
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
 
         // 如果没有找到该优惠券
         if (shopCoupon == null) {
@@ -219,7 +219,7 @@
      */
     @Override
     public AjaxResult getMyCouponInfoByStatus(Long companyId, Integer status, PaginationVO pageVo) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         // 如果查询使用或未使用状态的优惠券列表
         if (AppConstance.MY_COUPON_USE.equals(status) || AppConstance.MY_COUPON_NOT_USE.equals(status)) {
             List<CouponReceiveInfoVO> list = shopCouponRecordDao.selectMyCouponByStatus(companyId,sysVipInfo.getId(), status,
@@ -256,7 +256,7 @@
                 attrIds.addAll(ids);
             }
         }
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         List<ShopCoupon> list = shopCouponDao.selectUsableCouponByProductInfo(sysVipInfo.getOpenId(), productId,
                 attrIds);
         return list;
@@ -304,7 +304,7 @@
      */
     @Override
     public AjaxResult getCouponListByTag(String tag, Long companyId) {
-        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
         boolean newPeople = wxShopCouponUtil.verifyIsNewPeople(sysVipInfo.getId());
         List<ShopCoupon> couponList = shopCouponDao.selectCouponListByTag(newPeople, sysVipInfo.getOpenId(), tag,companyId);
         AjaxResult res = new AjaxResult(AjaxResult.STATUS_SUCCESS, couponList);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopCouponUtil.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopCouponUtil.java
index e7fc64a..3e0595f 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopCouponUtil.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopCouponUtil.java
@@ -1,6 +1,6 @@
 package com.matrix.system.shopXcx.api.tools;
 
-import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.system.common.init.UserCacheManager;
 import com.matrix.system.shopXcx.api.service.WxShopMemberDayService;
 import com.matrix.system.shopXcx.bean.ShopOrder;
 import com.matrix.system.shopXcx.dao.ShopCouponRecordDao;
@@ -22,7 +22,7 @@
     @Autowired
     private ShopOrderDao shopOrderDao;
     @Autowired
-    private RedisUserLoginUtils redisUserLoginUtils;
+    private UserCacheManager userCacheManager;
     @Autowired
     private ShopCouponRecordDao shopCouponRecordDao;
     @Autowired
diff --git a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java
index c662a65..9680fbb 100644
--- a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java
+++ b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java
@@ -55,14 +55,13 @@
     public void handle(Map<String,Object> param){
         try {
 
-            JSONObject messageJsonParam=JSONObject.parseObject(param.get("messages").toString());
 
-            if(!messageJsonParam.containsKey("companyId")||(!messageJsonParam.containsKey("templateCode"))){
+            if(!param.containsKey("companyId")||(!param.containsKey("templateCode"))){
                 LogUtil.error("小程序消息推送参数格式异常发送模板消息需要传JSONO字符串作为格式 例如:{\"companyId\":17,\"templateCode\":10000} companyId 、templateCode 是必须属性");
                 return;
             }
-            Long companyId = Long.parseLong( messageJsonParam.get("companyId").toString());
-            Integer templateCode = Integer.parseInt( messageJsonParam.get("templateCode").toString());
+            Long companyId = Long.parseLong( param.get("companyId").toString());
+            Integer templateCode = Integer.parseInt( param.get("templateCode").toString());
 
             //获取公司微信配置参数
             BusParameterSettings xcxAppId = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_APPID, companyId);
@@ -82,7 +81,7 @@
             bulderParam.put("xcxAppId", xcxAppId.getParamValue());
             bulderParam.put("gzhAppid", gzhAppid.getParamValue());
             bulderParam.put("template_id", template.getUuid());
-            bulderParam.put("messageJsonParam", messageJsonParam);
+            bulderParam.put("messageJsonParam", param);
             //调用模板计算出消息体
             Map msgResult = templateMessageBulder.buildMsg(bulderParam);
 
diff --git a/zq-erp/src/main/resources/config/application.properties b/zq-erp/src/main/resources/config/application.properties
index 16d29b9..7b6d3b6 100644
--- a/zq-erp/src/main/resources/config/application.properties
+++ b/zq-erp/src/main/resources/config/application.properties
@@ -53,10 +53,10 @@
 
 
 #rabbitMQ配置
-rabbitmq.host=47.111.134.136
-rabbitmq.port=5672
-rabbitmq.username=hivequeue
-rabbitmq.password=hivequeueadmin
+#rabbitmq.host=47.111.134.136
+#rabbitmq.port=5672
+#rabbitmq.username=hivequeue
+#rabbitmq.password=hivequeueadmin
 useRabbit=false
 
 server.session.timeout=120
diff --git a/zq-erp/src/main/resources/config/system.properties b/zq-erp/src/main/resources/config/system.properties
index 42c4024..9355c08 100644
--- a/zq-erp/src/main/resources/config/system.properties
+++ b/zq-erp/src/main/resources/config/system.properties
@@ -23,15 +23,15 @@
 maxUploadSize=10485760
 
 #Matser\u7684ip\u5730\u5740
-redis.hostname=120.27.238.55
+#redis.hostname=120.27.238.55
 #\u7AEF\u53E3\u53F7
-redis.port=6379
+#redis.port=6379
 #\u5982\u679C\u6709\u5BC6\u7801
-redis.password=xcong123
+#redis.password=xcong123
 #\u5BA2\u6237\u7AEF\u8D85\u65F6\u65F6\u95F4\u5355\u4F4D\u662F\u6BEB\u79D2 \u9ED8\u8BA4\u662F2000
-redis.timeout=10000  
-redis.database=2
-redis_time_out=1800000
+#redis.timeout=10000
+#redis.database=2
+#redis_time_out=1800000
 cookie_time_out=36000
 
 #APP登录公钥
diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html
index 00050a1..db5f1e4 100644
--- a/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html
+++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html
@@ -55,17 +55,17 @@
 <body>
 <div class="panel-body" id="app" v-cloak>
     <el-row style="padding:20px;">
-        <el-col :span="4">
-            <el-card class="box-card" :body-style="{ padding: '10px 10px'}">
-                <img src="../../../images/sign/meiriqiandao.png" class="image">
-                <div style="padding: 5px;">
-                    <span style="padding:5px;font-size: 18px;">每日签到</span>
-                    <div class="bottom clearfix">
-                        <el-button type="primary" size="mini" class="button" @click="createSign()" round>马上创建</el-button>
-                    </div>
-                </div>
-            </el-card>
-        </el-col>
+<!--        <el-col :span="4">-->
+<!--            <el-card class="box-card" :body-style="{ padding: '10px 10px'}">-->
+<!--                <img src="../../../images/sign/meiriqiandao.png" class="image">-->
+<!--                <div style="padding: 5px;">-->
+<!--                    <span style="padding:5px;font-size: 18px;">每日签到</span>-->
+<!--                    <div class="bottom clearfix">-->
+<!--                        <el-button type="primary" size="mini" class="button" @click="createSign()" round>马上创建</el-button>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--            </el-card>-->
+<!--        </el-col>-->
         <el-col :span="4">
             <el-card class="box-card" :body-style="{ padding: '10px 10px'}">
                 <img src="../../../images/sign/tiantianpingtuan.png" class="image">
@@ -100,19 +100,19 @@
             </el-card>
         </el-col>
     </el-row>
-    <el-row style="padding:20px;">
-        <el-col :span="4">
-            <el-card class="box-card" :body-style="{ padding: '10px 10px'}">
-                <img src="../../../images/luckyDraw/zhuanpanchoujian.png" class="image">
-                <div style="padding: 5px;">
-                    <span style="padding:5px;font-size: 18px;">转盘抽奖</span>
-                    <div class="bottom clearfix">
-                        <el-button type="primary" size="mini" class="button" @click="createLuckyDraw()" round>马上创建</el-button>
-                    </div>
-                </div>
-            </el-card>
-        </el-col>
-    </el-row>
+<!--    <el-row style="padding:20px;">-->
+<!--        <el-col :span="4">-->
+<!--            <el-card class="box-card" :body-style="{ padding: '10px 10px'}">-->
+<!--                <img src="../../../images/luckyDraw/zhuanpanchoujian.png" class="image">-->
+<!--                <div style="padding: 5px;">-->
+<!--                    <span style="padding:5px;font-size: 18px;">转盘抽奖</span>-->
+<!--                    <div class="bottom clearfix">-->
+<!--                        <el-button type="primary" size="mini" class="button" @click="createLuckyDraw()" round>马上创建</el-button>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--            </el-card>-->
+<!--        </el-col>-->
+<!--    </el-row>-->
 
 </div>
 </body>
diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/service_all_list.html b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/service_all_list.html
index cfcf888..106f1be 100644
--- a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/service_all_list.html
+++ b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/service_all_list.html
@@ -82,7 +82,7 @@
             <div class="form-group mr-20">
                 <button type="button" class="btn btn-my btn-sm" id="btn4" value="">全部</button>
                 <button type="button" class="btn btn-my btn-sm active" id="btn1" value="待预约">待预约</button>
-<!--                <button type="button" class="btn btn-my btn-sm" id="btn2" value="预约成功待处理">待派单</button>-->
+                <!--                <button type="button" class="btn btn-my btn-sm" id="btn2" value="预约成功待处理">待派单</button>-->
                 <button type="button" class="btn btn-my btn-sm" id="btn3" value="需配料">待配料</button>
                 <button type="button" class="btn btn-my btn-sm" id="btn3" value="配料完成">待服务</button>
                 <button type="button" class="btn btn-my btn-sm" id="btn6" value="服务中">服务中</button>
@@ -132,22 +132,22 @@
 <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script>
 <script type="text/javascript">
 
-   $("#vipPhone").val($.query.get('vipPhone'));
-   var _initParam = {format : 'yyyy-mm-dd hh:ii',
-       todayBtn : true,
-       autoclose : true,
-       startView : 2,
-       maxView : 3,
-       minView : 0};
-   MTools.ininDatetimepicker(_initParam);
-   //限制结束时间不小于开始时间
-   var initParam = {format : 'yyyy-mm-dd hh:ii',
-       todayBtn : true,
-       autoclose : true,
-       startView : 2,
-       maxView : 3,
-       minView : 0};
-   MTools.limitStartEndTime(initParam);
+    $("#vipPhone").val($.query.get('vipPhone'));
+    var _initParam = {format : 'yyyy-mm-dd hh:ii',
+        todayBtn : true,
+        autoclose : true,
+        startView : 2,
+        maxView : 3,
+        minView : 0};
+    MTools.ininDatetimepicker(_initParam);
+    //限制结束时间不小于开始时间
+    var initParam = {format : 'yyyy-mm-dd hh:ii',
+        todayBtn : true,
+        autoclose : true,
+        startView : 2,
+        maxView : 3,
+        minView : 0};
+    MTools.limitStartEndTime(initParam);
 
     var myGrid;
     $(function () {
@@ -179,9 +179,9 @@
 
         }
     }
-   var btns=[];
-   btns[0]="",btns[1]="",btns[2]="",btns[3]="",btns[4]="",btns[5]="",btns[6]="";
-   function buidOperate(value, row, index) {
+    var btns=[];
+    btns[0]="",btns[1]="",btns[2]="",btns[3]="",btns[4]="",btns[5]="",btns[6]="";
+    function buidOperate(value, row, index) {
         var status = row.state;
         var html ='<a class="text-primary mr-5" onClick="selectFwz(' + value + ')"  title="查看"><i class="fa fa-eye">查看</i></a>&nbsp;'
         switch (status) {
@@ -201,6 +201,9 @@
             case '服务完成':
                 html +=btns[4].replace('VALUE',value);
                 html += btns[2].replace('VALUE',value);
+                break;
+            case '待确认':
+                html +=btns[7].replace('VALUE',value);
                 break;
         }
         html += btns[5].replace('VALUE',value);
@@ -272,42 +275,60 @@
 
 
 
-   function removeOrder(id) {
-       var id=myGrid.getSelectItemId();
-       layer.confirm('确定取消此订单?', {
-           btn: ['确认', '取消'] //可以无限个按钮
-       }, function(index, layero){
-           $.post(basePath+'/admin/projService/cancelOrder?id='+id, {}, function(data){
-               parent.layer.msg(data.info,{icon: 1});
-               layer.closeAll();
-               myGrid.serchData();
-           });
-           //按钮【按钮一】的回调
-       }, function(index){
-           // alert("2 = "+index);
-           //按钮【按钮二】的回调
-       });
+    function removeOrder(id) {
+        var id=myGrid.getSelectItemId();
+        layer.confirm('确定取消此订单?', {
+            btn: ['确认', '取消'] //可以无限个按钮
+        }, function(index, layero){
+            $.post(basePath+'/admin/projService/cancelOrder?id='+id, {}, function(data){
+                parent.layer.msg(data.info,{icon: 1});
+                layer.closeAll();
+                myGrid.serchData();
+            });
+            //按钮【按钮一】的回调
+        }, function(index){
+            // alert("2 = "+index);
+            //按钮【按钮二】的回调
+        });
 
-   }
+    }
 
-   //打开查看界面
-   function openEdit2() {
-       var id=myGrid.getSelectItemId();
-       layer.open({
-           type : 2,
-           title : "查看服务单详情",
-           area :   MUI.SIZE_M,
-           maxmin : true,
-           content : [ basePath+'/admin/projService/serviceInfo?pageFlae=pc&id=' + id]
-       });
-   }
+    function confirmServiceOrder(id) {
+        layer.confirm('确定确认订单吗?', {
+            btn: ['确认', '取消'] //可以无限个按钮
+        }, function(index, layero){
+            $.post(basePath+'/admin/projService/confirmServiceOrder?id='+id, {}, function(data){
+                parent.layer.msg(data.info,{icon: 1});
+                layer.closeAll();
+                myGrid.serchData();
+            });
+            //按钮【按钮一】的回调
+        }, function(index){
+            // alert("2 = "+index);
+            //按钮【按钮二】的回调
+        });
 
-   //导出
-   //导出
-   function exportExcel(){
-       var param=MForm.toUrlParam("#serchform");
-       window.location.href=basePath+"/admin/projService/exportExcel?"+param;
-   }
+    }
+
+
+    //打开查看界面
+    function openEdit2() {
+        var id=myGrid.getSelectItemId();
+        layer.open({
+            type : 2,
+            title : "查看服务单详情",
+            area :   MUI.SIZE_M,
+            maxmin : true,
+            content : [ basePath+'/admin/projService/serviceInfo?pageFlae=pc&id=' + id]
+        });
+    }
+
+    //导出
+    //导出
+    function exportExcel(){
+        var param=MForm.toUrlParam("#serchform");
+        window.location.href=basePath+"/admin/projService/exportExcel?"+param;
+    }
 
 </script>
 
@@ -337,5 +358,8 @@
 <script matrix:btn="serviceClub-edit">
     btns[6]='<a  class="text-primary mr-5" onclick="updateTime(\'VALUE\')" title="修改时间"><i class="fa fa-edit">修改时间</i></a>&nbsp;'
 </script>
+<script matrix:btn="serviceClub-edit">
+    btns[7]='<a  class="text-primary mr-5" onclick="confirmServiceOrder(\'VALUE\')" title="确认服务单"><i class="fa fa-edit">确认服务单</i></a>&nbsp;'
+</script>
 
 </html>
diff --git a/zq-erp/src/main/resources/templates/views/admin/index.html b/zq-erp/src/main/resources/templates/views/admin/index.html
index 219d21a..1e6217d 100644
--- a/zq-erp/src/main/resources/templates/views/admin/index.html
+++ b/zq-erp/src/main/resources/templates/views/admin/index.html
@@ -89,7 +89,7 @@
                         <i class="fa fa-user" ></i>
                         <span style="line-height: 35px; color: #333; " th:utext="${session.userInfo.suName}+' | '">
                         </span>
-                        <a style="line-height: 35px; color: #333; " target="_blank" href="https://www.yuque.com/books/share/70c39d28-6aac-4763-ae92-899ea5822a0d" >
+                        <a style="line-height: 35px; color: #333; " target="_blank" href="https://www.yuque.com/books/share/7b10c3aa-f289-4f36-b402-5031fbd7f038" >
                             <i class="fa fa-book" aria-hidden="true"></i>
                             帮助手册</a>
                     </div>
diff --git a/zq-erp/src/main/resources/templates/views/admin/shop/parameterSetting-form.html b/zq-erp/src/main/resources/templates/views/admin/shop/parameterSetting-form.html
index 751099b..0fbaf6f 100644
--- a/zq-erp/src/main/resources/templates/views/admin/shop/parameterSetting-form.html
+++ b/zq-erp/src/main/resources/templates/views/admin/shop/parameterSetting-form.html
@@ -71,6 +71,14 @@
                             </el-checkbox-group>
                         </div>
                     </div>
+
+                    <div class="form-group" v-if="paramSetting.type==5">
+                        <label class="col-md-2 control-label">{{paramSetting.name}}</label>
+                        <div class="col-md-8">
+                            <el-input  type="textarea"  :rows="2" v-model="paramSetting.userValue"></el-input>
+                        </div>
+                    </div>
+
                 </template>
 
 
diff --git a/zq-erp/src/test/java/com/matrix/JyyTests.java b/zq-erp/src/test/java/com/matrix/JyyTests.java
index 741ebdc..3f4c132 100644
--- a/zq-erp/src/test/java/com/matrix/JyyTests.java
+++ b/zq-erp/src/test/java/com/matrix/JyyTests.java
@@ -1,11 +1,6 @@
 package com.matrix;
 
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.matrix.component.redis.RedisClient;
-import com.matrix.system.common.bean.SysFunction;
 import com.matrix.system.hive.bean.MoneyCardUse;
 import com.matrix.system.hive.dao.MoneyCardUseDao;
 import com.matrix.system.hive.service.imp.SysVipInfoServiceImpl;
@@ -21,10 +16,7 @@
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 测试类示例
@@ -51,8 +43,6 @@
     @Autowired
     SysVipInfoServiceImpl sysVipInfoService;
 
-    @Autowired
-    RedisClient redisClient;
 
 
     @Autowired
@@ -89,19 +79,20 @@
     @Test
     public void testRedis() {
 
-        List<SysFunction> fnList = new ArrayList<>();
+        /*List<SysFunction> fnList = new ArrayList<>();
         fnList.add(new SysFunction());
 
         Map map = new HashMap();
         map.put("a", fnList);
         redisClient.saveMapValue("map", map);
-
+*/
 
     }
 
 
     @Test
     public void testRedis2() {
+/*
 
         String map = redisClient.getCachedValue("map");
         JSONObject json = JSONUtil.parseObj(map);
@@ -113,6 +104,7 @@
            SysFunction sysFunction = jsonArray.get(i, SysFunction.class);
            System.out.println(sysFunction.getHasThisFn());
        }
+*/
 
 
 
diff --git a/zq-erp/src/test/java/com/matrix/LocalCacheTest.java b/zq-erp/src/test/java/com/matrix/LocalCacheTest.java
new file mode 100644
index 0000000..df54f35
--- /dev/null
+++ b/zq-erp/src/test/java/com/matrix/LocalCacheTest.java
@@ -0,0 +1,35 @@
+/**
+ * projectName: zq-erp
+ * fileName: LocalCacheTest.java
+ * packageName: com.matrix
+ * date: 2021-10-25 14:03
+ * copyright(c) 2021 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix;
+
+import com.matrix.system.common.init.LocalCache;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+
+/**
+ * @version: V1.0
+ * @author: JiangYouYao
+ * @className: LocalCacheTest
+ * @packageName: com.matrix
+ * @description: LocalCache
+ * @data: 2021-10-25 14:03
+ **/
+public class LocalCacheTest {
+
+    @Test
+    public void testNoticeTask() throws IOException, InterruptedException {
+        LocalCache.save("name","jyy",1000*3);
+        System.out.println("放入对象");
+        Assert.assertNotNull(LocalCache.get("name"));
+        Thread.sleep(1000*5);
+        Assert.assertNull(LocalCache.get("name"));
+    }
+
+}
\ No newline at end of file
diff --git a/zq-erp/src/test/java/com/matrix/ParameterSettingsTool.java b/zq-erp/src/test/java/com/matrix/ParameterSettingsTool.java
index a3fab25..82778ed 100644
--- a/zq-erp/src/test/java/com/matrix/ParameterSettingsTool.java
+++ b/zq-erp/src/test/java/com/matrix/ParameterSettingsTool.java
@@ -105,14 +105,34 @@
 		newSetting8.setCategory("店务配置");
 		newSettings.add(newSetting8);
 
+		ParameterSettings newSetting9=new ParameterSettings();
+		newSetting9.setCode(AppConstance.SERVICE_FLOW_TEMPLATE);
+		newSetting9.setName("跟进记录模板");
+		newSetting9.setType(5);
+		newSetting9.setCategory("店务配置");
+		newSettings.add(newSetting9);
+
+		ParameterSettings newSetting10=new ParameterSettings();
+		newSetting10.setCode(AppConstance.OPEN_SMS_NOTICE);
+		newSetting10.setName("是否开启短信提醒");
+		newSetting10.setType(1);
+		newSetting10.setCategory("店务配置");
+		newSettings.add(newSetting10);
+
+		ParameterSettings newSetting11=new ParameterSettings();
+		newSetting11.setCode(AppConstance.OPEN_SERVICE_ORDER_AUTO_BATCHING);
+		newSetting11.setName("开启服务单自动配料");
+		newSetting11.setType(1);
+		newSetting11.setCategory("店务配置");
+		newSettings.add(newSetting11);
+
+
 
 		for (ParameterSettings newSetting : newSettings) {
 			List<ParameterSettings> parameterSettings = parameterSettingsDao.selectByModel(newSetting);
 			if(CollectionUtil.isEmpty(parameterSettings)){
 				parameterSettingsDao.insert(newSetting);
 				System.out.println("新增配置"+newSetting.getName());
-			}else {
-				System.out.println("配置"+newSetting.getName()+"已经存在");
 			}
 			addSettingsTOAllCompany(newSetting);
 		}
@@ -131,8 +151,6 @@
 				busParameterSettings.setParamValue("");
 				busParameterSettingsDao.insert(busParameterSettings);
 				System.out.println(sysCompany.getComName()+"新增成功");
-			}else{
-				System.out.println("公司"+sysCompany.getComName()+"已经存在配置"+newSetting.getName());
 			}
 
 		}
diff --git a/zq-erp/src/test/java/com/matrix/SourceFlowTests.java b/zq-erp/src/test/java/com/matrix/SourceFlowTests.java
index 8f30c3b..9583c8c 100644
--- a/zq-erp/src/test/java/com/matrix/SourceFlowTests.java
+++ b/zq-erp/src/test/java/com/matrix/SourceFlowTests.java
@@ -1,16 +1,11 @@
 package com.matrix;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
 import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
-import com.matrix.config.RabbitMqConfig;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao;
 import com.matrix.system.hive.bean.*;
 import com.matrix.system.hive.dao.*;
 import com.matrix.system.hive.service.CodeService;
-import com.matrix.system.shopXcx.mqTask.MQTaskRouting;
-import com.matrix.system.shopXcx.vo.SalesmanVo;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,8 +48,6 @@
 	@Autowired
 	private SysVipInfoDao vipInfoDao;
 
-	@Autowired
-	RabiitMqTemplate rabiitMqTemplate;
 @Autowired
 WeixinServiceUtil weixinServiceUtil;
 
@@ -75,7 +68,7 @@
 	 */
 	@Test
 	public void testTopic() throws InterruptedException {
-		rabiitMqTemplate.sendTopicMsg(RabbitMqConfig.MQ_EXCHANGE_TOPIC +"dev", MQTaskRouting.CREATE_ORDER+"dev", "123");
+		// rabiitMqTemplate.sendTopicMsg(RabbitMqConfig.MQ_EXCHANGE_TOPIC +"dev", MQTaskRouting.CREATE_ORDER+"dev", "123");
 		Thread.sleep(10000);
 	}
 
diff --git a/zq-erp/src/test/java/com/matrix/TaiYanAliyunSmsServiceTest.java b/zq-erp/src/test/java/com/matrix/TaiYanAliyunSmsServiceTest.java
new file mode 100644
index 0000000..58b7772
--- /dev/null
+++ b/zq-erp/src/test/java/com/matrix/TaiYanAliyunSmsServiceTest.java
@@ -0,0 +1,39 @@
+package com.matrix;
+
+import com.matrix.system.hive.bean.SysProjServices;
+import com.matrix.system.hive.service.SysProjServicesService;
+import com.matrix.system.hive.service.TaiYanAliyunSmsService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @author jiangyouyao
+ * @email 512061637@qq.com
+ * @date 2019年2月25日
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {ZqErpApplication.class},webEnvironment =SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class TaiYanAliyunSmsServiceTest {
+
+
+
+	@Autowired
+	private TaiYanAliyunSmsService taiYanAliyunSmsService;
+	@Autowired
+	SysProjServicesService projServicesService;
+
+
+	@Test
+	public void addSendYycgNotice(){
+		SysProjServices byId = projServicesService.findById(215550L);
+		byId.setVipId(5949L);
+		taiYanAliyunSmsService.sendYycgNotice(byId);
+		taiYanAliyunSmsService.sendHkNotice(byId);
+
+	}
+
+
+}

--
Gitblit v1.9.1