wwh 1 gadu atpakaļ
vecāks
revīzija
e9cb36cbff

+ 3 - 1
src/main/java/com/huimv/wine/entity/Operation.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -52,7 +54,7 @@ public class Operation implements Serializable {
     /**
      * 时间
      */
-    private LocalDateTime time;
+    private Date time;
 
     /**
      * 描述

+ 9 - 0
src/main/java/com/huimv/wine/entity/vo/ManagerVo.java

@@ -0,0 +1,9 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class ManagerVo {
+    private String id;
+    private String name;
+}

+ 9 - 0
src/main/java/com/huimv/wine/entity/vo/QueryAdminVo.java

@@ -0,0 +1,9 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class QueryAdminVo {
+    private String time;
+    private Integer total;
+}

+ 10 - 0
src/main/java/com/huimv/wine/entity/vo/RankAdminsVo.java

@@ -0,0 +1,10 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class RankAdminsVo {
+    private String id;
+    private String name;
+    private Integer total;
+}

+ 9 - 0
src/main/java/com/huimv/wine/entity/vo/RankDevicesVo.java

@@ -0,0 +1,9 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class RankDevicesVo {
+    private String id;
+    private Integer total;
+}

+ 17 - 0
src/main/java/com/huimv/wine/entity/vo/workQueryResVo.java

@@ -0,0 +1,17 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class workQueryResVo {
+    private String id;
+    private String name;
+    private String phone;
+    private Integer count;
+    private Integer cost;
+    private Date first;
+    private Date last;
+    private ManagerVo managerVo;
+}

+ 6 - 0
src/main/java/com/huimv/wine/mapper/ChangeMapper.java

@@ -2,6 +2,9 @@ package com.huimv.wine.mapper;
 
 import com.huimv.wine.entity.Change;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.QueryAdminVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ChangeMapper extends BaseMapper<Change> {
 
+    List<QueryAdminVo> changeQueryWorker(String id);
+
+    List<QueryAdminVo> changeQueryWorker2(String id,Integer days,String type);
 }

+ 2 - 1
src/main/java/com/huimv/wine/mapper/ManagerMapper.java

@@ -2,6 +2,7 @@ package com.huimv.wine.mapper;
 
 import com.huimv.wine.entity.Manager;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.ManagerVo;
 
 /**
  * <p>
@@ -12,5 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2024-04-18
  */
 public interface ManagerMapper extends BaseMapper<Manager> {
-
+    ManagerVo getManagerVo(String id);
 }

+ 22 - 0
src/main/java/com/huimv/wine/mapper/TradeMapper.java

@@ -1,7 +1,15 @@
 package com.huimv.wine.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.wine.entity.Trade;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.QueryAdminVo;
+import com.huimv.wine.entity.vo.RankAdminsVo;
+import com.huimv.wine.entity.vo.RankDevicesVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +21,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TradeMapper extends BaseMapper<Trade> {
 
+    List<RankAdminsVo> rankAdmins(String start, String end);
+
+    List<RankDevicesVo> rankDevices(String start, String end);
+
+    List<RankAdminsVo> rankWines(String start, String end);
+
+    List<QueryAdminVo> queryAdmins(@Param(Constants.WRAPPER) QueryWrapper<Trade> queryWrapper);
+
+    List<QueryAdminVo> queryAdmins2(String id, Integer days,String type);
+
+    List<QueryAdminVo> queryAdmins3(String id, Integer days,String type);
+
+    List<QueryAdminVo> queryAdmins4(String id, Integer days,String type);
+
 }

+ 10 - 0
src/main/java/com/huimv/wine/mapper/WorkerMapper.java

@@ -3,7 +3,11 @@ package com.huimv.wine.mapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.wine.entity.Worker;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.RankAdminsVo;
 import com.huimv.wine.entity.vo.WorkerQueryResult;
+import com.huimv.wine.entity.vo.workQueryResVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -18,4 +22,10 @@ public interface WorkerMapper extends BaseMapper<Worker> {
     Worker login(String account, String realPassword);
 
     Page<WorkerQueryResult> ChangesQueryForWorker(Page<WorkerQueryResult> page, int status,String like ,String worker);
+
+    List<RankAdminsVo> changeRankWorkers(String start, String end);
+
+    Page<workQueryResVo> WorkerQuery(Page<workQueryResVo> page,String cond);
+
+    Page<workQueryResVo> WorkerQuery2(Page<workQueryResVo> page,String manager,String cond);
 }

+ 25 - 0
src/main/java/com/huimv/wine/utils/Utils.java

@@ -0,0 +1,25 @@
+package com.huimv.wine.utils;
+
+import java.util.Random;
+  
+public class Utils {  
+    private static final String ALPHA_NUMERIC_STRING = "QWERTYUIOPLKJHGFDSAZXCVBNM0123456789zxcvbnmlkjhgfdsaqwertyuiop";
+    private static final int ALPHA_NUMERIC_STRING_LENGTH = ALPHA_NUMERIC_STRING.length();  
+    private static final Random RANDOM = new Random();  
+  
+    /**  
+     * 生成指定长度的随机字符串,只包含字母和数字。  
+     *  
+     * @param length 字符串长度  
+     * @return 随机生成的字符串  
+     */  
+    public static String randomString(int length) {  
+        StringBuilder builder = new StringBuilder();  
+        while (length-- > 0) {  
+            int index = (int) (RANDOM.nextFloat() * ALPHA_NUMERIC_STRING_LENGTH);  
+            char randomChar = ALPHA_NUMERIC_STRING.charAt(index);  
+            builder.append(randomChar);  
+        }  
+        return builder.toString();  
+    }  
+}

+ 3 - 1
src/main/java/com/huimv/wine/utils/WebsocketManagerUtil.java

@@ -13,7 +13,9 @@ public class WebsocketManagerUtil {
    * 记录当前在线的Session
    */
   private static final Map<String, Session> SESSIONS = new ConcurrentHashMap<>();
- 
+  public static Map<String, Session> getSessions() {
+    return SESSIONS;
+  }
 
 
   /**

+ 138 - 7
src/main/java/com/huimv/wine/ws/ManagerController.java

@@ -1,6 +1,22 @@
 package com.huimv.wine.ws;
 
-import com.huimv.wine.utils.WebsocketManagerUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.huimv.wine.entity.Manager;
+import com.huimv.wine.entity.Worker;
+import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.mapper.DeviceMapper;
+import com.huimv.wine.mapper.ManagerMapper;
+import com.huimv.wine.mapper.WorkerMapper;
+import com.huimv.wine.utils.*;
+import com.huimv.wine.ws.su.SuperDashboard;
+import com.huimv.wine.ws.su.SuperOrder;
+import com.huimv.wine.ws.su.SuperRole;
+import jdk.internal.joptsimple.internal.Strings;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.socket.handler.TextWebSocketHandler;
@@ -9,6 +25,9 @@ import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
 import java.io.IOException;
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * websocket接口处理类
@@ -20,6 +39,7 @@ public class ManagerController extends TextWebSocketHandler {
 
     /**
      * 连接事件,加入注解
+     *
      * @param session
      */
     @OnOpen
@@ -29,6 +49,15 @@ public class ManagerController extends TextWebSocketHandler {
 
         // 添加到session的映射关系中
         WebsocketManagerUtil.addSession(seq, session);
+        getSecrets(session);
+    }
+
+    private void getSecrets(Session session) {
+        Map map = new HashMap();
+        map.put("public", KeyUtil.getClientPublic());
+        map.put("private", KeyUtil.getClientPrivate());
+        WsEvent wsEvent = new WsEvent("secrets", map);
+        WebsocketWorkerUtil.sendMessage(session, wsEvent);
     }
 
     /**
@@ -50,15 +79,53 @@ public class ManagerController extends TextWebSocketHandler {
     /**
      * 当接收到用户上传的消息
      *
-     * @param seq
+     * @param token
      * @param session
      */
     @OnMessage
-    public void onMessage(@PathParam(value = "seq") String seq, Session session, String message) {
-        String msg = "[" + seq + "]:" + message;
-        System.out.println("接收到信息:" + msg);
-        // 直接广播
-//        WebsocketManagerUtil.sendMessageForAll(msg);
+    public void onMessage(@PathParam(value = "token") String token, Session session, String message) {
+
+        RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
+        JSONObject jsonObject = JSON.parseObject(message);
+        String event = (String) jsonObject.get("event");
+        JSONObject data = jsonObject.getJSONObject("data");
+        if ("login".equals(event)) {
+            userLogin(session, token, data);
+        } else if ("pin".equals(event)) {
+            keepAlive(session);
+        } else {
+            if (!redisTemplate.hasKey("ManagerToken_" + token)) {
+                WebsocketWorkerUtil.sendMessage(session, new WsEvent("tokenExpired", null));
+                return;
+            }
+            ManagerMapper mapper = SpringContextUtil.getBean(ManagerMapper.class);
+            String id =(String) redisTemplate.opsForValue().get("ManagerToken_" + token);
+            Manager manager = mapper.selectById(id);
+
+//            String worker = (String) redisTemplate.opsForValue().get(token);
+            if (event.equals("logout")) {
+                userLogout(session, token);
+            } else if (event.equals("getUserInfo")) {
+                getUserInfo(session,manager);
+            } else if (event.startsWith("superDashboard")) {
+                SuperDashboard dashboard = new SuperDashboard();
+                dashboard.handle(event,data,session,manager);
+            } else if (event.startsWith("superRole")) {
+                SuperRole superRole = new SuperRole();
+                superRole.handle(event,data,session,manager);
+            } else if (event.startsWith("superOrder")) {
+                SuperOrder superOrder = new SuperOrder();
+                superOrder.handle(event, data, session, manager);
+            } else if (event.startsWith("superConfig")) {
+            } else if (event.startsWith("superRecord")) {
+            } else if (event.startsWith("adminDashboard")) {
+            } else if (event.startsWith("adminWorker")) {
+            } else if (event.startsWith("adminTrade")) {
+            } else if (event.startsWith("adminWine")) {
+            } else {
+
+            }
+        }
     }
 
     /**
@@ -76,4 +143,68 @@ public class ManagerController extends TextWebSocketHandler {
         }
         throwable.printStackTrace();
     }
+
+    private void userLogin(Session session, String token, Object data) {
+        RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
+        JSONObject jsonObject = (JSONObject) data;
+        if (StringUtils.isBlank(jsonObject.getString("account")) || StringUtils.isBlank(jsonObject.getString("password"))) {
+            WsEvent wsEvent = new WsEvent("loginResult", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        String serverPrivate = KeyUtil.getServerPrivate();
+        String realPassword = RSAUtil.decrypt1(jsonObject.getString("password"), serverPrivate);
+        if (StringUtils.isBlank(realPassword)) {
+            WsEvent wsEvent = new WsEvent("loginResult", Result.fail("解密失败"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        ManagerMapper managerMapper = SpringContextUtil.getBean(ManagerMapper.class);
+        QueryWrapper<Manager> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account", jsonObject.getString("account")).eq("password", realPassword);
+        Manager manager = managerMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isEmpty(manager)) {
+            WsEvent wsEvent = new WsEvent("loginResult", Result.fail("用户名或密码错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        Map<String, Session> sessions = WebsocketManagerUtil.getSessions();
+        if (sessions.containsKey(manager.getId())) {
+            WsEvent wsEvent = new WsEvent("loginResult", Result.fail("账户已在别处登录"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        token = String.format("ManagerToken_%s", token);
+
+        redisTemplate.opsForValue().set(token, manager.getId(), Duration.ofDays(7));
+        JSONObject object = new JSONObject();
+        object.put("token", token);
+        object.put("super", manager.getIsSuper());
+        WsEvent wsEvent = new WsEvent("loginResult", Result.success(token));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+    }
+
+    public void keepAlive(Session session) {
+        WsEvent wsEvent = new WsEvent("pon", null);
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+    }
+
+    public void getUserInfo(Session session, Manager manager) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("id", manager.getId());
+        jsonObject.put("super", manager.getIsSuper());
+        jsonObject.put("name", manager.getName());
+        jsonObject.put("order", manager.getOrder());
+        jsonObject.put("income", manager.getIncome());
+        WsEvent wsEvent = new WsEvent("userInfo", jsonObject);
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+    }
+    public void userLogout(Session session,String data) {
+        RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
+        redisTemplate.delete("ManagerToken_" + data);
+        WsEvent wsEvent = new WsEvent("logoutResult", null);
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+    }
+
+
 }

+ 318 - 0
src/main/java/com/huimv/wine/ws/su/SuperDashboard.java

@@ -0,0 +1,318 @@
+package com.huimv.wine.ws.su;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.huimv.wine.common.EventWsErrUtil;
+import com.huimv.wine.entity.Change;
+import com.huimv.wine.entity.Manager;
+import com.huimv.wine.entity.Trade;
+import com.huimv.wine.entity.vo.QueryAdminVo;
+import com.huimv.wine.entity.vo.RankAdminsVo;
+import com.huimv.wine.entity.vo.RankDevicesVo;
+import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.mapper.ChangeMapper;
+import com.huimv.wine.mapper.TradeMapper;
+import com.huimv.wine.mapper.WorkerMapper;
+import com.huimv.wine.utils.Result;
+import com.huimv.wine.utils.WebsocketManagerUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.Session;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Component
+public class SuperDashboard {
+
+    @Autowired
+    private TradeMapper tradeMapper;
+    @Autowired
+    private WorkerMapper workerMapper;
+    @Autowired
+    private ChangeMapper changeMapper;
+
+    public void handle(String event, JSONObject data, Session session, Manager manager) {
+        switch (event) {
+            case "superDashboardRankAdmins":
+                rankAdmins(session, manager, data);
+                break;
+            case "superDashboardRankDevices":
+                rankDevices(session, manager, data);
+                break;
+            case "superDashboardRankWines":
+                rankWines(session, manager, data);
+                break;
+            case "superDashboardRankWorkers":
+                rankWorkers(session, manager, data);
+                break;
+            case "superDashboardQueryAdmin":
+                queryAdmin(session, manager, data);
+                break;
+            case "superDashboardQueryDevice":
+                queryDevice(session, manager, data);
+                break;
+            case "superDashboardQueryWine":
+                queryWine(session, manager, data);
+                break;
+            case "superDashboardQueryWorker":
+                queryWorker(session, manager, data);
+                break;
+            default:
+                WsEvent wsEvent = EventWsErrUtil.getWsErr("unrecognized event");
+                WebsocketManagerUtil.sendMessage(session, wsEvent);
+                break;
+        }
+    }
+
+    public void rankAdmins(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankAdminsRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("start")) || StringUtils.isBlank(data.getString("end"))) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankAdminsRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        List<RankAdminsVo> rankAdminsVos = tradeMapper.rankAdmins(data.getString("start"), data.getString("end"));
+        WsEvent wsEvent = new WsEvent("superDashboardRankAdminsRes", Result.success(rankAdminsVos));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        return;
+    }
+
+    public void rankDevices(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankDevicesRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("start")) || StringUtils.isBlank(data.getString("end"))) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankDevicesRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        List<RankDevicesVo> devicesVos = tradeMapper.rankDevices(data.getString("start"), data.getString("end"));
+        WsEvent wsEvent = new WsEvent("superDashboardRankDevicesRes", Result.success(devicesVos));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        return;
+    }
+
+    public void rankWines(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankWinesRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("start")) || StringUtils.isBlank(data.getString("end"))) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankWinesRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        List<RankAdminsVo> devicesVos = tradeMapper.rankWines(data.getString("start"), data.getString("end"));
+        WsEvent wsEvent = new WsEvent("superDashboardRankWinesRes", Result.success(devicesVos));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        return;
+
+    }
+
+    public void rankWorkers(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankWorkersRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("start")) || StringUtils.isBlank(data.getString("end"))) {
+            WsEvent wsEvent = new WsEvent("superDashboardRankWorkersRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        List<RankAdminsVo> changeRankWorkers = workerMapper.changeRankWorkers(data.getString("start"), data.getString("end"));
+        WsEvent wsEvent = new WsEvent("superDashboardRankWorkersRes", Result.success(changeRankWorkers));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        return;
+    }
+
+    public void queryAdmin(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryAdminRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("id")) || data.getInteger("type") == null) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryAdminRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        Integer type = data.getInteger("type");
+        if (0 == type) {
+            QueryWrapper<Trade> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("manager", data.getString("id"));
+            List<QueryAdminVo> queryAdmins = tradeMapper.queryAdmins(queryWrapper);
+            WsEvent wsEvent = new WsEvent("superDashboardQueryAdminRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        } else {
+            List<QueryAdminVo> queryAdmins = new ArrayList<>();
+            switch (type) {
+                case 1:
+                    queryAdmins = tradeMapper.queryAdmins2(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+                case 2:
+                    queryAdmins = tradeMapper.queryAdmins2(data.getString("id"), 30, "%Y-%m-%d");
+                    break;
+                case 3:
+                    queryAdmins = tradeMapper.queryAdmins2(data.getString("id"), 120, "%Y-%m");
+                    break;
+                case 4:
+                    queryAdmins = tradeMapper.queryAdmins2(data.getString("id"), 180, "%Y-%m");
+                    break;
+                case 5:
+                    queryAdmins = tradeMapper.queryAdmins2(data.getString("id"), 360, "%Y-%m");
+                    break;
+                default:
+                    queryAdmins = tradeMapper.queryAdmins2(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+            }
+            WsEvent wsEvent = new WsEvent("superDashboardQueryAdminRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        }
+
+    }
+
+    public void queryDevice(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryDeviceRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("id")) || data.getInteger("type") == null) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryDeviceRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        Integer type = data.getInteger("type");
+        if (0 == type) {
+            QueryWrapper<Trade> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("device", data.getString("id"));
+            List<QueryAdminVo> queryAdmins = tradeMapper.queryAdmins(queryWrapper);
+            WsEvent wsEvent = new WsEvent("superDashboardQueryDeviceRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        } else {
+            List<QueryAdminVo> queryAdmins = new ArrayList<>();
+            switch (type) {
+                case 1:
+                    queryAdmins = tradeMapper.queryAdmins3(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+                case 2:
+                    queryAdmins = tradeMapper.queryAdmins3(data.getString("id"), 30, "%Y-%m-%d");
+                    break;
+                case 3:
+                    queryAdmins = tradeMapper.queryAdmins3(data.getString("id"), 120, "%Y-%m");
+                    break;
+                case 4:
+                    queryAdmins = tradeMapper.queryAdmins3(data.getString("id"), 180, "%Y-%m");
+                    break;
+                case 5:
+                    queryAdmins = tradeMapper.queryAdmins3(data.getString("id"), 360, "%Y-%m");
+                    break;
+                default:
+                    queryAdmins = tradeMapper.queryAdmins3(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+            }
+            WsEvent wsEvent = new WsEvent("superDashboardQueryDeviceRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        }
+    }
+
+    public void queryWine(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWineRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("id")) || data.getInteger("type") == null) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWineRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        Integer type = data.getInteger("type");
+        if (0 == type) {
+            QueryWrapper<Trade> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("wine", data.getString("id"));
+            List<QueryAdminVo> queryAdmins = tradeMapper.queryAdmins(queryWrapper);
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWineRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        } else {
+            List<QueryAdminVo> queryAdmins = new ArrayList<>();
+            switch (type) {
+                case 1:
+                    queryAdmins = tradeMapper.queryAdmins4(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+                case 2:
+                    queryAdmins = tradeMapper.queryAdmins4(data.getString("id"), 30, "%Y-%m-%d");
+                    break;
+                case 3:
+                    queryAdmins = tradeMapper.queryAdmins4(data.getString("id"), 120, "%Y-%m");
+                    break;
+                case 4:
+                    queryAdmins = tradeMapper.queryAdmins4(data.getString("id"), 180, "%Y-%m");
+                    break;
+                case 5:
+                    queryAdmins = tradeMapper.queryAdmins4(data.getString("id"), 360, "%Y-%m");
+                    break;
+                default:
+                    queryAdmins = tradeMapper.queryAdmins4(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+            }
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWineRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        }
+    }
+
+    public void queryWorker(Session session, Manager manager, JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWorkerRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("id")) || data.getInteger("type") == null) {
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWorkerRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        Integer type = data.getInteger("type");
+        if (0 == type) {
+            List<QueryAdminVo> queryAdmins = changeMapper.changeQueryWorker(data.getString("id"));
+            WsEvent wsEvent = new WsEvent("superDashboardQueryAdminRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        } else {
+            List<QueryAdminVo> queryAdmins = new ArrayList<>();
+            switch (type) {
+                case 1:
+                    queryAdmins = changeMapper.changeQueryWorker2(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+                case 2:
+                    queryAdmins = changeMapper.changeQueryWorker2(data.getString("id"), 30, "%Y-%m-%d");
+                    break;
+                case 3:
+                    queryAdmins = changeMapper.changeQueryWorker2(data.getString("id"), 120, "%Y-%m");
+                    break;
+                case 4:
+                    queryAdmins = changeMapper.changeQueryWorker2(data.getString("id"), 180, "%Y-%m");
+                    break;
+                case 5:
+                    queryAdmins = changeMapper.changeQueryWorker2(data.getString("id"), 360, "%Y-%m");
+                    break;
+                default:
+                    queryAdmins = changeMapper.changeQueryWorker2(data.getString("id"), 7, "%Y-%m-%d");
+                    break;
+            }
+            WsEvent wsEvent = new WsEvent("superDashboardQueryWorkerRes", Result.success(queryAdmins));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        }
+    }
+}

+ 45 - 0
src/main/java/com/huimv/wine/ws/su/SuperOrder.java

@@ -0,0 +1,45 @@
+package com.huimv.wine.ws.su;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.wine.common.EventWsErrUtil;
+import com.huimv.wine.entity.Manager;
+import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.utils.WebsocketManagerUtil;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.Session;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class SuperOrder {
+
+    public void handle(String event, JSONObject data, Session session, Manager manager) {
+        switch (event) {
+            case "superOrderTradeQueryUser":
+
+                break;
+            case "superOrderTradeQueryTrade":
+
+                break;
+            case "superOrderTradeRefund":
+
+                break;
+            case "superOrderChangeQueryWorker":
+
+                break;
+            case "superOrderChangeQueryOrder":
+
+                break;
+            default:
+                WsEvent wsEvent = EventWsErrUtil.getWsErr("unrecognized event");
+                WebsocketManagerUtil.sendMessage(session, wsEvent);
+                break;
+        }
+    }
+
+    public void QueryUser(Session session, Manager manager, JSONObject data) {
+
+    }
+}

+ 213 - 0
src/main/java/com/huimv/wine/ws/su/SuperRole.java

@@ -0,0 +1,213 @@
+package com.huimv.wine.ws.su;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huimv.wine.common.EventWsErrUtil;
+import com.huimv.wine.entity.Manager;
+import com.huimv.wine.entity.Operation;
+import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.entity.vo.workQueryResVo;
+import com.huimv.wine.mapper.ManagerMapper;
+import com.huimv.wine.mapper.OperationMapper;
+import com.huimv.wine.mapper.WorkerMapper;
+import com.huimv.wine.utils.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.Session;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class SuperRole {
+
+    @Autowired
+    private ManagerMapper managerMapper;
+    @Autowired
+    private OperationMapper operationMapper;
+    @Autowired
+    private WorkerMapper workerMapper;
+    public void handle(String event, JSONObject data, Session session, Manager manager) {
+        switch (event) {
+            case "superRoleAdminQuery":
+                query(session, manager, data);
+                break;
+            case "superRoleAdminUpdate":
+                Update(session, manager, data);
+                break;
+            case "superRoleAdminDelete":
+                JSONArray array = data.getJSONArray("data");
+                List<String> list = new ArrayList<>();
+                for (int i = 0; i < array.size(); i++) {
+                    list.add(array.getString(i));
+                }
+                Delete(session,manager,list);
+                break;
+            case "superRoleAdminAdd":
+                Add(session, manager, data);
+                break;
+            case "superRoleWorkerQuery":
+                Query(session, manager, data);
+                break;
+            default:
+                WsEvent wsEvent = EventWsErrUtil.getWsErr("unrecognized event");
+                WebsocketManagerUtil.sendMessage(session, wsEvent);
+                break;
+        }
+    }
+
+    public void query(Session session,Manager manager,JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminQueryRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("cond")) || data.getInteger("page") == null || data.getInteger("limit") == null) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminQueryRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        QueryWrapper<Manager> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("super", 0).and(i -> i.like("name", data.getString("cond")).or()
+                .like("account", data.getString("cond")));
+        Page<Manager> page = new Page(data.getInteger("page"), data.getInteger("limit"));
+        Page<Manager> managerPage = managerMapper.selectPage(page, queryWrapper);
+        WsEvent wsEvent = new WsEvent("superRoleAdminQueryRes", Result.success(managerPage));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+
+    }
+    public void Update(Session session,Manager manager,JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminUpdateRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("id")) || StringUtils.isBlank(data.getString("name"))
+                || StringUtils.isBlank(data.getString("account"))||StringUtils.isBlank(data.getString("password"))) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminUpdateRes", Result.fail("参数错误"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        String id = data.getString("id");
+        Manager manager1 = managerMapper.selectById(id);
+        if (ObjectUtil.isEmpty(manager1)) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminUpdateRes", Result.fail("管理员不存在"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        String serverPrivate = KeyUtil.getServerPrivate();
+        String realPassword = RSAUtil.decrypt1(data.getString("password"), serverPrivate);
+        if (StringUtils.isBlank(realPassword)) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminUpdateRes", Result.fail("解密失败"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        manager1.setAccount(data.getString("account"));
+        manager1.setName(data.getString("name"));
+        int update = managerMapper.updateById(manager1);
+        if (update == 0) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminUpdateRes", Result.fail("更新失败"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        WsEvent wsEvent = new WsEvent("superRoleAdminUpdateRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        Operation operation = new Operation();
+        operation.setUserType(0);
+        operation.setUserId(manager.getId());
+        operation.setOpType(1);
+        operation.setLevel(0);
+        operation.setTime(new Date());
+        operation.setDescribe("更新管理员信息");
+        operationMapper.insert(operation);
+    }
+
+    public void Delete(Session session, Manager manager, List<String> data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminDeleteRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+         managerMapper.deleteBatchIds(data);
+        WsEvent wsEvent = new WsEvent("superRoleAdminDeleteRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        Operation operation = new Operation();
+        operation.setUserType(0);
+        operation.setUserId(manager.getId());
+        operation.setOpType(2);
+        operation.setLevel(1);
+        operation.setTime(new Date());
+        operation.setDescribe("删除管理员");
+        operationMapper.insert(operation);
+    }
+
+    public void Add(Session session,Manager manager,JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminAddRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        if (StringUtils.isBlank(data.getString("name")) || data.getInteger("account") == null || data.getInteger("password") == null) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminAddRes", Result.fail("数据不可为空"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        String serverPrivate = KeyUtil.getServerPrivate();
+        String realPassword = RSAUtil.decrypt1(data.getString("password"), serverPrivate);
+        if (StringUtils.isBlank(realPassword)) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminAddRes", Result.fail("解密失败"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        String id = Utils.randomString(16);
+        Manager manager1 = new Manager();
+        manager1.setId(id);
+        manager1.setName(data.getString("name"));
+        manager1.setAccount(data.getString("account"));
+        manager1.setPassword(realPassword);
+        int insert = managerMapper.insert(manager1);
+        if (insert == 0) {
+            WsEvent wsEvent = new WsEvent("superRoleAdminAddRes", Result.fail("添加失败"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        WsEvent wsEvent = new WsEvent("superRoleAdminAddRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session, wsEvent);
+        Operation operation = new Operation();
+        operation.setUserType(0);
+        operation.setUserId(manager.getId());
+        operation.setOpType(0);
+        operation.setLevel(0);
+        operation.setTime(new Date());
+        operation.setDescribe("新增管理员");
+        operationMapper.insert(operation);
+    }
+
+    public void Query(Session session,Manager manager,JSONObject data) {
+        if (!manager.getIsSuper()) {
+            WsEvent wsEvent = new WsEvent("superRoleWorkerQueryRes", Result.fail("权限不足"));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+            return;
+        }
+        String manger = data.getString("manger");
+        String cond = data.getString("cond");
+        Integer page = data.getInteger("page");
+        Integer limit = data.getInteger("limit");
+        if ("".equals(manger)) {
+            Page<workQueryResVo> voPage = new Page(page, limit);
+            Page<workQueryResVo> workerQuery = workerMapper.WorkerQuery(voPage, cond);
+            WsEvent wsEvent = new WsEvent("superRoleWorkerQueryRes", Result.success(workerQuery));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        } else {
+            Page<workQueryResVo> voPage = new Page(page, limit);
+            Page<workQueryResVo> workerQuery = workerMapper.WorkerQuery2(voPage, manger, cond);
+            WsEvent wsEvent = new WsEvent("superRoleWorkerQueryRes", Result.success(workerQuery));
+            WebsocketManagerUtil.sendMessage(session, wsEvent);
+        }
+    }
+}

+ 8 - 0
src/main/resources/com/huimv/wine/mapper/ChangeMapper.xml

@@ -31,4 +31,12 @@
         <result column="remain4n" property="remain4n" />
     </resultMap>
 
+    <select id="changeQueryWorker" resultType="com.huimv.wine.entity.vo.QueryAdminVo">
+        SELECT DATE_FORMAT(`finish`,'%Y-%m') as 'time',COUNT(`id`) as 'total' FROM `change` WHERE `status`=2 AND `worker`=#{id} GROUP BY 'time'
+    </select>
+
+    <select id="changeQueryWorker2" resultType="com.huimv.wine.entity.vo.QueryAdminVo">
+        SELECT DATE_FORMAT(`finish`,#{type}) as 'time',COUNT('time') as 'total' FROM `change` WHERE `status`=2 AND `worker`=#{id} AND (`finish` BETWEEN
+        DATE_SUB(CURRENT_TIMESTAMP,INTERVAL #{days} DAY) AND CURRENT_TIMESTAMP) GROUP BY 'time'
+    </select>
 </mapper>

+ 3 - 0
src/main/resources/com/huimv/wine/mapper/ManagerMapper.xml

@@ -15,4 +15,7 @@
         <result column="income" property="income" />
     </resultMap>
 
+    <select id="getManagerVo" resultType="com.huimv.wine.entity.vo.ManagerVo">
+        select id as 'id',name as 'name' from manager where id=#{id}
+    </select>
 </mapper>

+ 38 - 0
src/main/resources/com/huimv/wine/mapper/TradeMapper.xml

@@ -16,4 +16,42 @@
         <result column="manager" property="manager" />
     </resultMap>
 
+    <select id="rankAdmins" resultType="com.huimv.wine.entity.vo.RankAdminsVo">
+        SELECT m.id 'id',m.name 'name',SUM(t.cash) AS 'total' FROM trade AS t
+        LEFT JOIN manager AS m ON t.manager=m.id
+        WHERE t.time BETWEEN #{start} AND #{end} GROUP BY t.manager ORDER BY total DESC
+    </select>
+
+    <select id="rankDevices" resultType="com.huimv.wine.entity.vo.RankDevicesVo">
+        SELECT device 'id' ,SUM(cash) AS 'total' FROM trade
+        WHERE  time  BETWEEN #{start} AND #{end} GROUP BY device ORDER BY total DESC
+    </select>
+
+    <select id="rankWines" resultType="com.huimv.wine.entity.vo.RankAdminsVo">
+     SELECT w.id 'id',w.name 'name',SUM(t.cash) AS 'total' FROM trade AS t
+		LEFT JOIN wine AS w ON t.wine=w.id 
+		WHERE t.time BETWEEN TIMESTAMP(?) AND TIMESTAMP(?) GROUP BY t.wine ORDER BY total DESC
+    </select>
+
+    <select id="queryAdmins" resultType="com.huimv.wine.entity.vo.QueryAdminVo">
+        SELECT DATE_FORMAT(`time`,'%%Y-%%m') as 'time',SUM(`cash`) as 'total' FROM `trade`
+        ${ew.customSqlSegment}
+        GROUP BY 'time'
+    </select>
+
+    <select id="queryAdmins2" resultType="com.huimv.wine.entity.vo.QueryAdminVo">
+        SELECT DATE_FORMAT(`time`,#{type}) as 'time',SUM(`cash`) as 'total' FROM `trade`
+         WHERE `manage`=#{id} AND (`time` BETWEEN DATE_SUB(CURRENT_TIMESTAMP,INTERVAL #{days} DAY) AND CURRENT_TIMESTAMP)
+         GROUP BY 'time'
+    </select>
+    <select id="queryAdmins3" resultType="com.huimv.wine.entity.vo.QueryAdminVo">
+        SELECT DATE_FORMAT(`time`,#{type}) as 'time',SUM(`cash`) as 'total' FROM `trade`
+         WHERE `device`=#{id} AND (`time` BETWEEN DATE_SUB(CURRENT_TIMESTAMP,INTERVAL #{days} DAY) AND CURRENT_TIMESTAMP)
+         GROUP BY 'time'
+    </select>
+    <select id="queryAdmins4" resultType="com.huimv.wine.entity.vo.QueryAdminVo">
+        SELECT DATE_FORMAT(`time`,#{type}) as 'time',SUM(`cash`) as 'total' FROM `trade`
+         WHERE `wine`=#{id} AND (`time` BETWEEN DATE_SUB(CURRENT_TIMESTAMP,INTERVAL #{days} DAY) AND CURRENT_TIMESTAMP)
+         GROUP BY 'time'
+    </select>
 </mapper>

+ 30 - 0
src/main/resources/com/huimv/wine/mapper/WorkerMapper.xml

@@ -16,6 +16,18 @@
         <result column="avg_cost" property="avgCost" />
         <result column="max_cost" property="maxCost" />
     </resultMap>
+
+    <resultMap id="getManagerVo" type="com.huimv.wine.entity.vo.workQueryResVo">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="phone" property="phone"/>
+        <result column="count" property="count"/>
+        <result column="cost" property="cost"/>
+        <result column="first" property="first"/>
+        <result column="last" property="last"/>
+        <association property="managerVo" javaType="com.huimv.wine.entity.vo.ManagerVo" select="com.huimv.wine.mapper.ManagerMapper" column="mangerId"></association>
+    </resultMap>
+
     <select id="login" resultType="com.huimv.wine.entity.Worker">
         select *  FROM `worker` WHERE phone=#{account} AND password = #{password}
     </select>
@@ -25,4 +37,22 @@
 				WHERE c.`status`=#{status} AND c.`worker`=#{worker} AND (d.`id` LIKE #{like} OR d.`addr` LIKE #{like})
     </select>
 
+    <select id="changeRankWorkers" resultType="com.huimv.wine.entity.vo.RankAdminsVo">
+       SELECT w.`id` AS `id`,w.`name` as 'name' ,COUNT(c.`id`) AS `total` FROM `change` AS c
+		LEFT JOIN `worker` AS w ON c.`worker`=w.`id`  WHERE c.`status`=2
+		AND (c.`finish` BETWEEN TIMESTAMP(?) AND TIMESTAMP(?)) GROUP BY `id` ORDER BY `total` DESC
+    </select>
+
+    <select id="WorkerQuery" resultMap="getManagerVo">
+        SELECT w.`id` as 'id',w.`first` as 'first',w.`last` as 'last',w.`name` as 'name',w.`phone` as 'phone',w.`count` as 'count'
+        ,w.`avg_cost` as 'cost',m.`id` as 'mangerId'
+        FROM `worker` AS w LEFT JOIN `manager` AS m ON w.`manager`=m.`id`
+        WHERE w.`name` LIKE #{cond} OR w.`phone` LIKE #{cond}
+    </select>
+
+    <select id="WorkerQuery2" resultMap="getManagerVo">
+        SELECT w.`id` as 'id',w.`first` as 'first',w.`last` as 'last',w.`name` as 'name',w.`phone` as 'phone',w.`count` as 'count',w.`avg_cost` as 'cost',m.`id` as 'mangerId'
+		FROM `worker` AS w LEFT JOIN `manager` AS m ON w.`manager`=m.`id`
+		WHERE w.`manager`=#{manager} AND (w.`name` LIKE #{cond} OR w.`phone` LIKE #{cond})
+    </select>
 </mapper>