jyy
2021-04-07 6f9a0cdb6360ff80818ce9ac947fb686e3045f8a
登录权限加入redis
55 files deleted
22 files modified
12585 ■■■■■ changed files
zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java 38 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/actions/AdminAction.java 22 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java 8 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java 81 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/bean/SysFnBtnRel.java 50 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/bean/SysFunction.java 50 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/bean/SysUsers.java 3 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java 15 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/constance/SystemConstance.java 9 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/BaseController.java 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java 46 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java 7 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/VipInfoController.java 32 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java 4 ●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java 173 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java 12 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysWorktimeServiceImpl.java 26 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpVipInfoController.java 80 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/static/js/function/vip.js 21 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_bak.html 1 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-card.html 161 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-choice.html 176 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-detail.html 156 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-follow-add.html 218 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-follow.html 188 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-mealuse.html 177 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-msg.html 185 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-my.html 259 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-potential.html 184 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-service.html 186 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-turn.html 184 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account.html 126 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-card-user.html 111 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-search.html 127 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-vip.html 245 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-vipInfo-search.html 265 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-visit-info.html 213 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-visit-list.html 161 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-visit.html 273 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM.html 226 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/_foot.html 19 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/_pageNav.html 67 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/cwqk-list.html 227 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/mls-list.html 248 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/mobileLogin.html 142 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-car.html 308 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-history-msg.html 280 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-history.html 194 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-list.html 281 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg.html 253 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg2.html 264 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg3.html 289 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg4.html 245 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg5.html 269 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-search.html 209 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-service.html 289 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-completed.html 234 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-end-service.html 303 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-look-endService.html 320 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-new.html 320 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-start-service.html 298 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-time.html 260 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order.html 255 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-msg.html 288 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-resetPassWord.html 156 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-shop-list.html 279 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-staff-list.html 302 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials-data.html 114 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials-info.html 98 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials1.html 104 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials2.html 104 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal.html 229 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/store-check-detail.html 248 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/store-check.html 261 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/mobile/vip-archives.html 251 ●●●●● patch | view | raw | blame | history
zq-erp/src/test/java/com/matrix/FenxiaoSoreInitTest.java 2 ●●● patch | view | raw | blame | history
zq-erp/src/test/java/com/matrix/JyyTests.java 65 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
@@ -1,5 +1,10 @@
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;
@@ -31,7 +36,12 @@
    private static final int DEFAULT_2 = 2;
    @Autowired
    RedisClient redisClient;
    @Autowired
    SysFunctionService sysFunctionService;
    public static final String USER_POWER_REDISKEY = "USER_POWER_";
    public static final String USERFUNCTION = "userFunction";
    /** 用户所有路径权限的记录 **/
@@ -91,8 +101,32 @@
        List<String> userUrlMapping = new ArrayList<>();
        // 获取用户所有权限
        getUserFunction(user,userFunction, userUrlMapping);
        String redisKey = USER_POWER_REDISKEY + 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));
            });
            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));
            }
        } else {
            // 获取用户所有权限
            getUserFunction(user,userFunction, userUrlMapping);
            Map<String ,Object> powerMap=new HashMap<>();
            powerMap.put(USERFUNCTION, userFunction);
            powerMap.put(USER_URL_MAPPING, userUrlMapping);
            redisClient.saveValue(redisKey,JSONUtil.parseObj(powerMap,true));
        }
        // TODO 这里的用户权限应该放到redis缓存中,在拦截器中做权限拦截
zq-erp/src/main/java/com/matrix/system/common/actions/AdminAction.java
@@ -25,9 +25,7 @@
import com.matrix.system.common.service.SysUsersService;
import com.matrix.system.common.tools.PasswordUtil;
import com.matrix.system.common.tools.ResponseHeadUtil;
import com.matrix.system.constance.SystemConstance;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.SysVipInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -45,11 +43,8 @@
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import static com.matrix.system.common.constance.AppConstance.SAFEPATH;
/**
 * @author 姜ø友瑶
@@ -486,23 +481,6 @@
    }
    /**
     * 查询历史搜索人数
     *
     * @return
     * @author luoyuanhong
     */
    @SuppressWarnings("unchecked")
    @RequestMapping(value = "/showHistoryUser")
    public @ResponseBody
    AjaxResult showHistoryUser() {
        if (WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER) != null) {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS,
                    (LinkedList<SysVipInfo>) WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER), 0);
        } else {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, null, 0);
        }
    }
    /**
zq-erp/src/main/java/com/matrix/system/common/actions/SysRoleAction.java
@@ -1,5 +1,6 @@
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;
@@ -9,6 +10,7 @@
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.core.web.BaseAction;
import com.matrix.system.common.authority.DefaultAuthorityManager;
import com.matrix.system.common.bean.SysFnBtnRel;
import com.matrix.system.common.bean.SysFunction;
import com.matrix.system.common.bean.SysRole;
@@ -16,7 +18,6 @@
import com.matrix.system.common.constance.AppVocabularyCode;
import com.matrix.system.common.service.SysFunctionService;
import com.matrix.system.common.service.SysRoleService;
import com.matrix.system.constance.Dictionary;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@@ -49,7 +50,8 @@
    private SysFunctionService sysFunctionService;
    public static final String BEV = "SYSROLE_BEV";
    @Autowired
    RedisClient redisClient;
    /**
     * 列表显示
     * 
@@ -230,9 +232,11 @@
        }
        AjaxResult result = modify(sysRoleService, WebUtil.getSessionAttribute(BEV), sysRole, AppVocabularyCode.ROLE);
        WebUtil.removeSessionAttribute(BEV);
        redisClient.batchDel(DefaultAuthorityManager.USER_POWER_REDISKEY);
        return result;
    }
    /**
     * 进入修改界面
     * 
zq-erp/src/main/java/com/matrix/system/common/authority/DefaultAuthorityManager.java
@@ -1,8 +1,12 @@
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.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.authority.strategy.LoginStrategy;
@@ -17,7 +21,6 @@
import java.util.*;
import java.util.Map.Entry;
import java.util.logging.Logger;
/**
 * DefaultAuthorityManager 实现了权限控制接口
@@ -31,13 +34,20 @@
    private static final int DEFAULT_2 = 2;
    public static final String USER_POWER_REDISKEY = "USER_POWER_";
    @Autowired
    SysFunctionService sysFunctionService;
    public static final String USERFUNCTION = "userFunction";
    public static final String MENUSFUNCTION = "menusFunction";
    /** 用户所有路径权限的记录 **/
    /**
     * 用户所有路径权限的记录
     **/
    public static final String USER_URL_MAPPING = "userUrlMapping";
    @Autowired
    RedisClient redisClient;
    private DefaultAuthorityManager() {
    }
@@ -90,6 +100,7 @@
    /**
     * 判断用户是否具有功能权限
     *
     * @return
     */
    @Override
@@ -108,10 +119,10 @@
    /**
     * 初始化用户权限
     *
     * @param result
     * @author JIANGYOUYAO
     * @email 935090232@qq.com
     * @date 2017年12月5日
     * @param result
     */
    public void initUserPower(AjaxResult result) {
@@ -127,11 +138,43 @@
        // 用户的所有功能权限用id记录,方便后面查询菜单树形结构
        Map<String, SysFunction> menuFunctionMap = new TreeMap<>();
        // 获取用户所有权限
        getUserFunction(userFunction, menuFunctionMap, userUrlMapping);
        SysUsers sysUser = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        // 组装菜单
        assembleMenu(menuFunction, menuFunctionMap);
        String redisKey = USER_POWER_REDISKEY + 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));
            }
        } else {
            // 获取用户所有权限
            getUserFunction(userFunction, menuFunctionMap, userUrlMapping);
            // 组装菜单
            assembleMenu(menuFunction, menuFunctionMap);
            Map<String ,Object> powerMap=new HashMap<>();
            powerMap.put(USERFUNCTION, userFunction);
            powerMap.put(MENUSFUNCTION, menuFunction);
            powerMap.put(USER_URL_MAPPING, userUrlMapping);
            redisClient.saveValue(redisKey,JSONUtil.parseObj(powerMap,true));
        }
        // 把用户菜单和用户的功能都存在session中。
        WebUtil.setSessionAttribute(USERFUNCTION, userFunction);
@@ -145,12 +188,12 @@
    /**
     * 获取用的功能,包括菜单功能和非菜单功能
     *
     * @author JIANGYOUYAO
     * @email 935090232@qq.com
     * @date 2017年12月5日
     * @param userFunctionMap
     * @param menuFunctionMap
     * @param userUrlMapping
     * @author JIANGYOUYAO
     * @email 935090232@qq.com
     * @date 2017年12月5日
     */
    private void getUserFunction(Map<String, SysFunction> userFunctionMap, Map<String, SysFunction> menuFunctionMap,
                                 List<String> userUrlMapping) {
@@ -165,7 +208,7 @@
                userFunctionMap.put(sysFunction.getFnCode(), sysFunction);
                // 注册访问路径
                registerUrlMapping(userUrlMapping, sysFunction,true);
                registerUrlMapping(userUrlMapping, sysFunction, true);
                // 如果是菜单功能单独记录
                if (AppConstance.IS_Y.equals(sysFunction.getFnShowMenu())) {
@@ -177,7 +220,7 @@
            List<SysFunction> userFunctionList = sysFunctionService.findFunctionByRoleIds(sysUser.getRoleIds());
            for (SysFunction sysFunction : userFunctionList) {
                // TODO注册访问路径
                registerUrlMapping(userUrlMapping, sysFunction,false);
                registerUrlMapping(userUrlMapping, sysFunction, false);
                if (userFunctionMap.containsKey(sysFunction.getFnCode())) {
@@ -204,11 +247,11 @@
    /**
     * 注册功能和按钮的访问路径
     *
     * @param userUrlMapping
     * @param sysFunction
     * @author JIANGYOUYAO
     * @email 935090232@qq.com
     * @date 2017年12月8日
     * @param userUrlMapping
     * @param sysFunction
     */
    private void registerUrlMapping(List<String> userUrlMapping, SysFunction sysFunction, boolean isAdmin) {
        String path = sysFunction.getFnPath();
@@ -220,7 +263,7 @@
        if (CollectionUtils.isNotEmpty(btnRels)) {
            for (SysFnBtnRel sysFnBtnRel : btnRels) {
                //公司管理员可以添加所有按钮权限否则只能添加员工自己所有拥有的权限
                if(isAdmin ||StringUtils.isContentSet(sysFnBtnRel.getBtnValue(),sysFunction.getRpfBns())){
                if (isAdmin || StringUtils.isContentSet(sysFnBtnRel.getBtnValue(), sysFunction.getRpfBns())) {
                    String btnPath = sysFnBtnRel.getFbPath();
                    if (StringUtils.isNotBlank(btnPath) && !userUrlMapping.contains(btnPath)) {
                        userUrlMapping.add(btnPath);
@@ -233,11 +276,11 @@
    /**
     * 把菜单组装成树形结构
     *
     * @param menuFunction
     * @param menuFunctionMap
     * @author JIANGYOUYAO
     * @email 935090232@qq.com
     * @date 2017年12月5日
     * @param menuFunction
     * @param menuFunctionMap
     */
    private void assembleMenu(List<SysFunction> menuFunction, Map<String, SysFunction> menuFunctionMap) {
        // 将map.entrySet()转换成list,并按照功能的FnSequence倒序
@@ -261,7 +304,7 @@
            } else {
                // 非一级节点找到父节点后存入
                SysFunction parentFn = menuFunctionMap.get(String.valueOf(function.getFnParentId()));
                if(parentFn!=null){
                if (parentFn != null) {
                    List<SysFunction> childs = parentFn.getChilds();
                    if (childs == null) {
                        parentFn.setChilds(new ArrayList<SysFunction>());
zq-erp/src/main/java/com/matrix/system/common/bean/SysFnBtnRel.java
@@ -1,7 +1,9 @@
package com.matrix.system.common.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.matrix.core.anotations.Extend;
import com.matrix.core.pojo.EntityDTO;
import java.util.Date;
/**
 * 功能按钮关系表
@@ -9,11 +11,21 @@
 * @email 935090232@qq.com
 * @date 2017年12月3日
 */
public class SysFnBtnRel extends EntityDTO {
public class SysFnBtnRel   {
    @Extend
    private static final long serialVersionUID = 1L;
    private String createBy;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
    private Date createTime;
    private String updateBy;
    private Date updateTime;
    /** 主键:这个关系表物理主键在修改比较中不参与比较 **/
    @Extend
    private Long fbId;
@@ -80,4 +92,36 @@
    public void setBtnKey(String btnKey) {
        this.btnKey = btnKey;
    }
    public String getCreateBy() {
        return createBy;
    }
    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getUpdateBy() {
        return updateBy;
    }
    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
zq-erp/src/main/java/com/matrix/system/common/bean/SysFunction.java
@@ -1,9 +1,9 @@
package com.matrix.system.common.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.matrix.core.anotations.Extend;
import com.matrix.core.pojo.EntityDTO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -12,10 +12,19 @@
 * @email 935090232@qq.com
 * @date 2017年12月3日
 */
public class SysFunction extends EntityDTO {
public class SysFunction  {
    @Extend
    private static final long serialVersionUID = 1L;
    private String createBy;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
    private Date createTime;
    private String updateBy;
    private Date updateTime;
    private Long fnId;
@@ -203,4 +212,39 @@
        this.fnCode = fnCode;
    }
    public String getCreateBy() {
        return createBy;
    }
    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getUpdateBy() {
        return updateBy;
    }
    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public boolean isHasThisFn() {
        return hasThisFn;
    }
}
zq-erp/src/main/java/com/matrix/system/common/bean/SysUsers.java
@@ -19,8 +19,11 @@
    private static final long serialVersionUID = 1L;
    /** 有效*/
    @Extend
    public static final String VALID_Y="Y";
    /** 无效*/
    @Extend
    public static final String VALID_N="N";
    private Long suId;
zq-erp/src/main/java/com/matrix/system/common/service/impl/SysUsersServiceImpl.java
@@ -1,12 +1,16 @@
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;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.ModelUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.authority.DefaultAuthorityManager;
import com.matrix.system.common.bean.SysUserLoginRecord;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.constance.AppConstance;
@@ -20,8 +24,6 @@
import com.matrix.system.hive.bean.SysProjServices;
import com.matrix.system.hive.bean.SysShopInfo;
import com.matrix.system.hive.dao.SysShopInfoDao;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.core.tools.DateUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -45,7 +47,8 @@
    private static final String SU_ID = "su_id";
    private static final String SU_ACCOUNT = "su_account";
    @Autowired
    RedisClient redisClient;
    @Autowired
    private SysUsersDao sysUsersDao;
@@ -128,8 +131,12 @@
        }
        if (modifyMap.size() > 0) {
            modifyMap.put("suId", oldSysUsers.getSuId());
            return sysUsersDao.updateByMap(modifyMap);
            sysUsersDao.updateByMap(modifyMap);
        }
        //删除用户权限缓存
        String redisKey=DefaultAuthorityManager.USER_POWER_REDISKEY+ SecureUtil.md5(oldSysUsers.getSuId()+"");
        redisClient.removeObject(redisKey);
        return MatrixConstance.DML_SUCCESSS;
    }
zq-erp/src/main/java/com/matrix/system/constance/SystemConstance.java
@@ -3,10 +3,6 @@
public class SystemConstance {
     
    /**
     * 当前进行操作的用户
     */
    public static final String CURRENT_CUSTOMER = "CURRENT_CUSTOMER";
    /**
@@ -14,10 +10,7 @@
     */
    public static final String SYSTEM_USER = "SYSTEM";
    /**
     * 查询历史记录
     */
    public static final String HISTORY_CUSTOMER = "HISTORY_CUSTOMER";
    /**
     * 登陆前要访问的地址
     */
zq-erp/src/main/java/com/matrix/system/hive/action/BaseController.java
@@ -6,8 +6,6 @@
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.constance.SystemConstance;
import com.matrix.system.hive.bean.SysVipInfo;
import com.matrix.system.hive.plugin.util.BaseServices;
import java.util.List;
@@ -75,14 +73,7 @@
    
    }
    /**
     * 获取当前操作的会员对象
     * @author 姜友瑶
     * @date 2016/7/5
     */
    public SysVipInfo getCurrentVioInfo() {
        return (SysVipInfo) (WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER));
    }
}
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
@@ -15,12 +15,9 @@
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.tools.ResponseHeadUtil;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.constance.SystemConstance;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.pojo.ShoppingCarItem;
import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import com.matrix.system.hive.service.*;
import com.matrix.system.shopXcx.mqTask.MQTaskRouting;
import com.matrix.system.wechart.templateMsg.UniformMsgParam;
@@ -190,49 +187,6 @@
        return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单保存成功");
    }
    /**
     * 新建订单
     *
     * @author jiangyouyao
     */
    @RequestMapping(value = "/addOrder")
    public @ResponseBody
    AjaxResult addOrder(ShoppingCarItemsVo car) {
        List<ShoppingCarItem> sessionCarItems = (List<ShoppingCarItem>) WebUtil.getSession().getAttribute(
                SystemConstance.SHOPPING_CAR);
        List<ShoppingCarItem> carItems = new ArrayList<>();
        // 设置购车中的具体类型信息,过滤没有被选中的商品
        for (ShoppingCarItem carItem : car.getCarItems()) {
            for (ShoppingCarItem sessionCar : sessionCarItems) {
                if (carItem.getId().equals(sessionCar.getId())) {
                    //已最后提交的数量为准
                    sessionCar.setCount(carItem.getCount());
                    carItems.add(sessionCar);
                    break;
                }
            }
        }
        //设置过滤后的购物车条目
        car.setCarItems(carItems);
        SysVipInfo info = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER);
        car.setVipId(info.getId());
        // 添加新订单
        int i = orderService.createOrder(WebUtil.getSession(), car);
        if (i > 0) {
            WebUtil.getSession().removeAttribute(SystemConstance.SHOPPING_CAR);
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "下单成功");
        } else {
            return new AjaxResult(AjaxResult.STATUS_FAIL, "下单添加失败");
        }
    }
    /**
zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java
@@ -489,8 +489,7 @@
    @RequestMapping(value = "/addService")
    public @ResponseBody
    AjaxResult servicceAdd(@RequestBody SysProjServices sysProjServices) {
        SysVipInfo vipInfo = getCurrentVioInfo();
        sysProjServices.setVipId(vipInfo.getId());
        if (CollectionUtils.isEmpty(sysProjServices.getServiceItems())) {
            return new AjaxResult(AjaxResult.STATUS_FAIL, "没有选中可消耗的项目");
@@ -520,8 +519,8 @@
    @RequestMapping(value = "/addServiceForForm")
    public @ResponseBody
    AjaxResult servicceAddForForm(SysProjServices sysProjServices) {
        SysVipInfo vipInfo = getCurrentVioInfo();
        sysProjServices.setVipId(vipInfo.getId());
        if (CollectionUtils.isEmpty(sysProjServices.getServiceItems())) {
            return new AjaxResult(AjaxResult.STATUS_FAIL, "没有选中可消耗的项目");
zq-erp/src/main/java/com/matrix/system/hive/action/VipInfoController.java
@@ -17,7 +17,6 @@
import com.matrix.system.common.service.SystemDictionaryService;
import com.matrix.system.common.tools.ResponseHeadUtil;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.constance.SystemConstance;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.Question;
import com.matrix.system.hive.bean.SysVipInfo;
@@ -48,7 +47,10 @@
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
/**
@@ -403,33 +405,7 @@
    @RequestMapping(value = "/findUserByPhoneOrNo")
    public @ResponseBody
    AjaxResult findUserByPhoneOrNo(String keyWord) {
        LinkedList<SysVipInfo> userList = null;
        // 获取最近查询客户
        if (WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER) == null) {
            userList = new LinkedList<SysVipInfo>();
            WebUtil.getSession().setAttribute(SystemConstance.HISTORY_CUSTOMER, userList);
        } else {
            userList = (LinkedList<SysVipInfo>) WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER);
        }
        List<SysVipInfo> vips = vipInfoService.findByVipNoOrTel(keyWord);
        if (vips.size() > 0) {
            // 在session存放当前查询的客户
            WebUtil.getSession().setAttribute(SystemConstance.CURRENT_CUSTOMER, vips.get(0));
            // 满20后删除一个
            if (userList.size() == 20) {
                userList.poll();
            }
            // 去重标志
            boolean isNoRepeat = true;
            for (SysVipInfo sysVipInfo : userList) {
                if (vips.get(0).getPhone().equals(sysVipInfo.getPhone())) {
                    isNoRepeat = false;
                }
            }
            if (isNoRepeat) {
                userList.add(vips.get(0));
            }
        }
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, vips, 0);
    }
zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java
@@ -64,9 +64,7 @@
     * 床位
     */
    private Long bedId;
    /**
     * 床位
     */
    private Long companyId;
    /**
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -5,6 +5,7 @@
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.OrderListDto;
@@ -15,6 +16,7 @@
import com.matrix.system.app.vo.RankingVo;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.bean.SysUsers;
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.constance.Dictionary;
@@ -119,6 +121,8 @@
    @Autowired
    private SysInstoreInfoService sysInstoreInfoService;
    @Autowired
    BusParameterSettingsDao parameterSettingsDao;
    @Value("${evn}")
    private String evn;
@@ -984,8 +988,6 @@
    }
    @Autowired
    BusParameterSettingsDao parameterSettingsDao;
    /**
     * @param order 新增出库单并更新本店库存
@@ -995,103 +997,110 @@
    @Override
    public void addOutStore(SysOrder order) {
        List<SysOutStoreItem> storeItemList = new ArrayList<>();
        BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId());
        if(AppConstance.IS_Y.equals(manageStockSetting.getParamValue())){
        for (SysOrderItem sysOrderItem : order.getItems()) {
            List<SysOutStoreItem> storeItemList = new ArrayList<>();
            if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) {
            for (SysOrderItem sysOrderItem : order.getItems()) {
                SysOutStoreItem storeItem = new SysOutStoreItem();
                storeItem.setSkuId(sysOrderItem.getGoodsId());
                storeItem.setAmount(Double.valueOf(sysOrderItem.getCount()));
                storeItemList.add(storeItem);
                if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) {
            } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType())
                    SysOutStoreItem storeItem = new SysOutStoreItem();
                    storeItem.setSkuId(sysOrderItem.getGoodsId());
                    storeItem.setAmount(Double.valueOf(sysOrderItem.getCount()));
                    storeItemList.add(storeItem);
                    || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
                } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType())
                List<ShoppingGoodsAssemble> goodsList = new ArrayList<>();
                        || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
                goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
                    List<ShoppingGoodsAssemble> goodsList = new ArrayList<>();
                if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
                    //综合卡处理,中的套餐,中的家居产品
                    List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC);
                    zhkAssemble.forEach(item -> {
                        goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
                    goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
                    if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
                        //综合卡处理,中的套餐,中的家居产品
                        List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC);
                        zhkAssemble.forEach(item -> {
                            goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
                        });
                    }
                    goodsList.forEach(item -> {
                        SysOutStoreItem storeItem = new SysOutStoreItem();
                        storeItem.setSkuId(item.getAssembleGoodId());
                        storeItem.setAmount(Double.valueOf(item.getTotal()));
                        storeItemList.add(storeItem);
                    });
                }
                goodsList.forEach(item -> {
                    SysOutStoreItem storeItem = new SysOutStoreItem();
                    storeItem.setSkuId(item.getAssembleGoodId());
                    storeItem.setAmount(Double.valueOf(item.getTotal()));
                    storeItemList.add(storeItem);
                });
            }
        }
        if (CollectionUtils.isNotEmpty(storeItemList)) {
            Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId();
            SysOutStore outStore = new SysOutStore();
            outStore.setOutStoreNo(codeService.getOutStoreCode());
            outStore.setOrderId(order.getId());
            outStore.setShopId(order.getShopId());
            outStore.setShopId(order.getShopId());
            outStore.setStaffId(order.getStaffId());
            outStore.setType(Dictionary.OUT_STORE_JJCPCK);
            outStore.setServiceNo(order.getOrderNo());
            outStore.setTime(new Date());
            outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
            outStore.setCompanyId(order.getCompanyId());
            sysOutStoreDao.insert(outStore);
            if (CollectionUtils.isNotEmpty(storeItemList)) {
                Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId();
                SysOutStore outStore = new SysOutStore();
                outStore.setOutStoreNo(codeService.getOutStoreCode());
                outStore.setOrderId(order.getId());
                outStore.setShopId(order.getShopId());
                outStore.setShopId(order.getShopId());
                outStore.setStaffId(order.getStaffId());
                outStore.setType(Dictionary.OUT_STORE_JJCPCK);
                outStore.setServiceNo(order.getOrderNo());
                outStore.setTime(new Date());
                outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
                outStore.setCompanyId(order.getCompanyId());
                sysOutStoreDao.insert(outStore);
            //出库明细,根据批次维度定义
            List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>();
                //出库明细,根据批次维度定义
                List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>();
            storeItemList.forEach(outStoreItem -> {
                storeItemList.forEach(outStoreItem -> {
                //设置出库主键
                outStoreItem.setOutStoreId(outStore.getId());
                    //设置出库主键
                    outStoreItem.setOutStoreId(outStore.getId());
                //计算库存总数是否满足本次扣减的需求
                List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId);
                double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum();
                if (sum < outStoreItem.getAmount()) {
                    ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId());
                    if (sysGoods != null) {
                        throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】");
                    //计算库存总数是否满足本次扣减的需求
                    List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId);
                    double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum();
                    if (sum < outStoreItem.getAmount()) {
                        ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId());
                        if (sysGoods != null) {
                            throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】");
                    } else {
                        throw new GlobleException("出库失败没有找到出库产品");
                        } else {
                            throw new GlobleException("出库失败没有找到出库产品");
                        }
                    }
                }
                //循环获取所有批次产品,并扣减库存
                Double number = outStoreItem.getAmount();
                for (SysStoreInfo storeInfo : stores) {
                    Double oldStoreTotal = storeInfo.getStoreTotal();
                    Double surplus = storeInfo.getStoreTotal() - number;
                    //更新库存
                    storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus);
                    //循环获取所有批次产品,并扣减库存
                    Double number = outStoreItem.getAmount();
                    for (SysStoreInfo storeInfo : stores) {
                        Double oldStoreTotal = storeInfo.getStoreTotal();
                        Double surplus = storeInfo.getStoreTotal() - number;
                        //更新库存
                        storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus);
                    //每次扣减库存都创建一个出库记录
                    SysOutStoreItem sysOutStoreItem = new SysOutStoreItem();
                    BeanUtils.copyProperties(outStoreItem, sysOutStoreItem);
                    sysOutStoreItem.setStoreId(storeInfo.getId());
                    sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal());
                    realOutStoreItemList.add(sysOutStoreItem);
                        //每次扣减库存都创建一个出库记录
                        SysOutStoreItem sysOutStoreItem = new SysOutStoreItem();
                        BeanUtils.copyProperties(outStoreItem, sysOutStoreItem);
                        sysOutStoreItem.setStoreId(storeInfo.getId());
                        sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal());
                        realOutStoreItemList.add(sysOutStoreItem);
                    storeInfoDao.update(storeInfo);
                    //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量
                    if (surplus > 0) {
                        break;
                    } else {
                        number = Math.abs(surplus);
                        storeInfoDao.update(storeInfo);
                        //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量
                        if (surplus > 0) {
                            break;
                        } else {
                            number = Math.abs(surplus);
                        }
                    }
                }
            });
            sysOutStoreItemDao.batchInsert(realOutStoreItemList);
                });
                sysOutStoreItemDao.batchInsert(realOutStoreItemList);
            }
        }else{
            LogUtil.debug("不管理库存");
        }
@@ -1636,10 +1645,14 @@
            shoppingGoodsDao.update(goods);
        }
        // 家居产品退库存
        if (CollectionUtils.isNotEmpty(returnGoodsList)) {
            refundInstore(returnGoodsList);
        BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, sysOrder.getCompanyId());
        if(AppConstance.IS_Y.equals(manageStockSetting.getParamValue())){
            // 家居产品退库存
            if (CollectionUtils.isNotEmpty(returnGoodsList)) {
                refundInstore(returnGoodsList);
            }
        }
    }
    /**
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
@@ -14,6 +14,7 @@
import com.matrix.system.app.vo.ServiceOrderListVo;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.bean.SysUsers;
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.constance.Dictionary;
@@ -776,6 +777,7 @@
        if (!projServices.getState().equals(Dictionary.SERVICE_STATU_XPL)) {
            throw new GlobleException("该服务单状态为" + projServices.getState() + ",不可以进行当前操作!");
        }
        projServicesVo.setCompanyId(projServices.getCompanyId());
        if (isNeedOutStore(projServicesVo)) {
            // 生成出库单
@@ -879,10 +881,14 @@
     * @return
     */
    private boolean isNeedOutStore(SysProjServices projServicesVo) {
        if (CollectionUtils.isNotEmpty(projServicesVo.getOutStoreItem())) {
            for (SysOutStoreItem item : projServicesVo.getOutStoreItem()) {
                if (item.getAmount() != null && item.getAmount() > 0) {
                    return true;
            BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, projServicesVo.getCompanyId());
            if(AppConstance.IS_Y.equals(manageStockSetting.getParamValue())){
                for (SysOutStoreItem item : projServicesVo.getOutStoreItem()) {
                    if (item.getAmount() != null && item.getAmount() > 0) {
                        return true;
                    }
                }
            }
        }
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysWorktimeServiceImpl.java
@@ -97,16 +97,20 @@
    @Override
    public boolean isInWorkTime(Long shopId, Date beginTime, Date endTime) {
        Date minTime = findMinTime(shopId);
        Date maxTime = findMaxTime(shopId);
        minTime.setYear(beginTime.getYear());
        minTime.setMonth(beginTime.getMonth());
        minTime.setDate(beginTime.getDate());
        maxTime.setYear(beginTime.getYear());
        maxTime.setMonth(beginTime.getMonth());
        maxTime.setDate(beginTime.getDate());
        return (
                (DateUtil.isDuringDate(minTime, maxTime, beginTime) || minTime.getTime()==beginTime.getTime()  )
                && DateUtil.isDuringDate(minTime, maxTime, endTime) || maxTime.getTime()==endTime.getTime() );
        if(beginTime==null){
            Date minTime = findMinTime(shopId);
            Date maxTime = findMaxTime(shopId);
            minTime.setYear(beginTime.getYear());
            minTime.setMonth(beginTime.getMonth());
            minTime.setDate(beginTime.getDate());
            maxTime.setYear(beginTime.getYear());
            maxTime.setMonth(beginTime.getMonth());
            maxTime.setDate(beginTime.getDate());
            return (
                    (DateUtil.isDuringDate(minTime, maxTime, beginTime) || minTime.getTime()==beginTime.getTime()  )
                            && DateUtil.isDuringDate(minTime, maxTime, endTime) || maxTime.getTime()==endTime.getTime() );
        }else{
            return false;
        }
    }
}
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpVipInfoController.java
@@ -11,21 +11,25 @@
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.common.bean.SystemDictionary;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.service.SystemDictionaryService;
import com.matrix.system.common.bean.SystemDictionary;
import com.matrix.system.common.service.SysUsersService;
import com.matrix.system.common.service.SystemDictionaryService;
import com.matrix.system.common.tools.ResponseHeadUtil;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.constance.SystemConstance;
import com.matrix.system.hive.action.BaseController;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.bean.Question;
import com.matrix.system.hive.bean.SysVipInfo;
import com.matrix.system.hive.bean.SysVipLevel;
import com.matrix.system.hive.bean.VipAnswer;
import com.matrix.system.hive.dao.MoneyCardUseDao;
import com.matrix.system.hive.dao.VipAnswerDao;
import com.matrix.core.tools.DateUtil;
import com.matrix.system.hive.pojo.RegisterInfo;
import com.matrix.system.hive.service.*;
import com.matrix.system.hive.service.MoneyCardUseService;
import com.matrix.system.hive.service.QuestionSerivce;
import com.matrix.system.hive.service.SysVipInfoService;
import com.matrix.system.hive.service.SysVipLevelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
@@ -42,7 +46,10 @@
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
/**
@@ -104,39 +111,7 @@
    @RequestMapping(value = "/showVipInfo")
    public @ResponseBody
    AjaxResult findByModel(String keyWord) {
        LinkedList<SysVipInfo> userList = null;
        // 获取最近查询客户
        if (WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER) == null) {
            userList = new LinkedList<SysVipInfo>();
            WebUtil.getSession().setAttribute(SystemConstance.HISTORY_CUSTOMER, userList);
        } else {
            userList = (LinkedList<SysVipInfo>) WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER);
        }
        List<SysVipInfo> vips = vipInfoService.findByVipNoOrTel(keyWord);
        if (vips.size() > 0) {
            // 在session存放当前查询的客户
            MoneyCardUse cardUseInfo = cardUseService.findByVipId(vips.get(0).getId());
            if (cardUseInfo == null) {
                cardUseInfo=vipInfoService.addVipDefaultCard(vips.get(0).getId());
            }
            vips.get(0).setLevelCard(cardUseInfo);
            WebUtil.getSession().setAttribute(SystemConstance.CURRENT_CUSTOMER, vips.get(0));
            // 满20后删除一个
            if (userList.size() == 20) {
                userList.poll();
            }
            // 去重标志
            boolean isNoRepeat = true;
            for (SysVipInfo sysVipInfo : userList) {
                if (vips.get(0).getPhone().equals(sysVipInfo.getPhone())) {
                    isNoRepeat = false;
                }
            }
            if (isNoRepeat) {
                userList.add(vips.get(0));
            }
        }
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, vips, 0);
    }
@@ -397,35 +372,8 @@
    @RequestMapping(value = "/findUserByPhoneOrNo")
    public @ResponseBody
    AjaxResult findUserByPhoneOrNo(String keyWord) {
        LinkedList<SysVipInfo> userList = null;
        // 获取最近查询客户
        if (WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER) == null) {
            userList = new LinkedList<SysVipInfo>();
            WebUtil.getSession().setAttribute(SystemConstance.HISTORY_CUSTOMER, userList);
        } else {
            userList = (LinkedList<SysVipInfo>) WebUtil.getSession().getAttribute(SystemConstance.HISTORY_CUSTOMER);
        }
        List<SysVipInfo> vips = vipInfoService.findByVipNoOrTel(keyWord);
        if (vips.size() > 0) {
            // 在session存放当前查询的客户
            WebUtil.getSession().setAttribute(SystemConstance.CURRENT_CUSTOMER, vips.get(0));
            // 满20后删除一个
            if (userList.size() == 20) {
                userList.poll();
            }
            // 去重标志
            boolean isNoRepeat = true;
            for (SysVipInfo sysVipInfo : userList) {
                if (vips.get(0).getPhone().equals(sysVipInfo.getPhone())) {
                    isNoRepeat = false;
                }
            }
            if (isNoRepeat) {
                userList.add(vips.get(0));
            }
        }
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, vips, 0);
    }
    @RequestMapping(value = "/getBirthday")
zq-erp/src/main/resources/static/js/function/vip.js
@@ -73,7 +73,6 @@
            $("#levelName").html(loj.getString(0, "vipLevel.levelName"));
            vipId = loj.getString(0, "id");
            updateHistory();
            if (isActive) {
                $(".isActive").removeAttr("disabled");
                isActive = false;
@@ -83,25 +82,7 @@
    }
}
/**
 * 更新最近查询客户
 */
function updateHistory() {
    $
        .AjaxProxy()
        .invoke(
            basePath + "/admin/showHistoryUser",
            function (loj) {
                var html = "";
                for (var i = 0; i < loj.getRowCount(); i++) {
                    html += "<li class='list-group-item'onclick='selectHistory(\""
                        + loj.getString(i, "phone")
                        + "\")' >"
                        + loj.getString(i, "vipName") + "</li>";
                }
                $("#historyList").html(html);
            });
}
/*
 * 点击切换最近查询用户
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_bak.html
@@ -268,7 +268,6 @@
                    $("#userList").hide();
                }
            });
        updateHistory();
        $("#userList").mouseleave(function () {
            $(this).hide();
        })
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-card.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-choice.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-detail.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-follow-add.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-follow.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-mealuse.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-msg.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-my.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-potential.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-service.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account-turn.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-account.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-card-user.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-search.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-vip.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-vipInfo-search.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-visit-info.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-visit-list.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM-visit.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/CRM.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/_foot.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/_pageNav.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/cwqk-list.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/mls-list.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/mobileLogin.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-car.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-history-msg.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-history.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-list.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg2.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg3.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg4.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-msg5.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-search.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-service.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-completed.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-end-service.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-look-endService.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-new.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-start-service.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order-use-time.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/order.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-msg.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-resetPassWord.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-shop-list.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-staff-list.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials-data.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials-info.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials1.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal-trainingMaterials2.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/personal.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/store-check-detail.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/store-check.html
File was deleted
zq-erp/src/main/resources/templates/views/admin/hive/mobile/vip-archives.html
File was deleted
zq-erp/src/test/java/com/matrix/FenxiaoSoreInitTest.java
@@ -47,7 +47,7 @@
        ruleSettings.add(addScoreRuleSetting(ScoreSettingConstant.CASH_CONSUMPTION_SHOP, companyId));
        ruleSettings.add(addScoreRuleSetting(ScoreSettingConstant.RESERVATION_SERVICE_SHOP, companyId));
        ruleSettings.add(addScoreRuleSetting(ScoreSettingConstant.EVALUATUIN_ORDER_SHOP, companyId));
        ruleSettings.add(addScoreRuleSetting(ScoreSettingConstant.SIGN_SHOP, companyId));
        //ruleSettings.add(addScoreRuleSetting(ScoreSettingConstant.SIGN_SHOP, companyId));
        busParameterSettingsDao.batchInsert(ruleSettings);
    }
zq-erp/src/test/java/com/matrix/JyyTests.java
@@ -1,43 +1,84 @@
package com.matrix;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.matrix.component.redis.RedisClient;
import com.matrix.system.common.bean.SysFunction;
import com.matrix.system.hive.service.imp.SysVipInfoServiceImpl;
import com.matrix.system.score.dao.ScoreVipDetailDao;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.dao.ShopOrderV2Dao;
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;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 测试类示例
 *
 *
 * @author jiangyouyao
 * @email 512061637@qq.com
 * @date 2019年2月25日
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {ZqErpApplication.class},webEnvironment =SpringBootTest.WebEnvironment.RANDOM_PORT)
@SpringBootTest(classes = {ZqErpApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class JyyTests {
    @Autowired
    private ShopOrderV2Dao shopOrderV2Dao;
    @Autowired
    private ShopOrderV2Dao shopOrderV2Dao;
    @Autowired
    ScoreVipDetailDao scoreVipDetailDao;
    @Autowired
    ScoreVipDetailDao scoreVipDetailDao;
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
    @Autowired
    SysVipInfoServiceImpl sysVipInfoService;
    @Autowired
    SysVipInfoServiceImpl sysVipInfoService;
    @Autowired
    RedisClient redisClient;
    @Test
    public void testRedis() {
        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);
        String a = json.get("a").toString();
        JSONArray jsonArray = JSONUtil.parseArray(a);
       for (int i=0;i<jsonArray.size();i++){
           SysFunction sysFunction = jsonArray.get(i, SysFunction.class);
           System.out.println(sysFunction.getHasThisFn());
       }
    }
}