浏览代码

AdminWorker

Newspaper 1 年之前
父节点
当前提交
f7e45f46bd

+ 8 - 0
src/main/java/com/huimv/wine/entity/vo/AdminWorkerAddParam.java

@@ -0,0 +1,8 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class AdminWorkerAddParam {
+    private String name,phone,password;
+}

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

@@ -0,0 +1,9 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class AdminWorkerQueryParam {
+    private String cond;
+    private Integer page,limit;
+}

+ 8 - 0
src/main/java/com/huimv/wine/entity/vo/AdminWorkerUpdateParam.java

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

+ 12 - 0
src/main/java/com/huimv/wine/entity/vo/WorkerQueryForAdminResult.java

@@ -0,0 +1,12 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class WorkerQueryForAdminResult {
+    private String id,name,phone;
+    private Integer count,cost;
+    private LocalDateTime first,last;
+}

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

@@ -30,4 +30,6 @@ public interface WorkerMapper extends BaseMapper<Worker> {
     List<WorkerWithIdPhoneName> WorkersQueryByPhoneOrName(String managerId,String like);
 
     Page<WorkerQueryForHistoryResult> workerQueryForHistory(Page<WorkerQueryForHistoryResult> page, String managerId, String like);
+
+    Page<WorkerQueryForAdminResult> workerQueryForAdmin(Page<WorkerQueryForAdminResult> page, String manager, String like);
 }

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

@@ -1,5 +1,9 @@
 package com.huimv.wine.utils;
 
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.Random;
   
 public class Utils {  
@@ -32,4 +36,21 @@ public class Utils {
         }
         return builder.toString();
     }
+    public static String hashPassword(String password) throws NoSuchAlgorithmException {
+        MessageDigest digest = MessageDigest.getInstance("SHA-512");
+
+        // 使用密码的字节更新digest
+        byte[] passwordBytes = password.getBytes(StandardCharsets.UTF_8);
+        digest.update(passwordBytes, 0, passwordBytes.length);
+
+        // 完成哈希计算并获取结果
+        byte[] hash = digest.digest();
+
+        // 将字节数组转换为十六进制字符串
+        BigInteger number = new BigInteger(1, hash);
+        String hashtext = number.toString(16);
+
+        return hashtext;
+    }
+
 }

+ 119 - 0
src/main/java/com/huimv/wine/ws/admin/AdminWorker.java

@@ -0,0 +1,119 @@
+package com.huimv.wine.ws.admin;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+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.Worker;
+import com.huimv.wine.entity.vo.*;
+import com.huimv.wine.mapper.OperationMapper;
+import com.huimv.wine.mapper.WorkerMapper;
+import com.huimv.wine.utils.*;
+import lombok.Data;
+
+import javax.websocket.Session;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+
+@Data
+public class AdminWorker {
+    public void handle(JSONObject message, Session session, Manager manager) throws NoSuchAlgorithmException {
+        String event = message.getString("event");
+        JSONObject data = message.getJSONObject("data");
+        WorkerMapper workerMapper = SpringContextUtil.getBean(WorkerMapper.class);
+        OperationMapper operationMapper = SpringContextUtil.getBean(OperationMapper.class);
+        switch (event) {
+            case "adminWorkerQuery":
+                query(session, manager, data, workerMapper);
+                break;
+            case "adminWorkerUpdate":
+                update(session, manager, data, workerMapper, operationMapper);
+                break;
+            case "adminWorkerDelete":
+                remove(session, manager, message.getJSONArray("data"),workerMapper,operationMapper);
+                break;
+            case "adminWorkerAdd":
+                add(session, manager, data,workerMapper,operationMapper);
+                break;
+            default:
+                WsEvent wsEvent = EventWsErrUtil.getWsErr("unrecognized event");
+                WebsocketManagerUtil.sendMessage(session, wsEvent);
+                break;
+        }
+    }
+
+    private void query(Session session, Manager manager, JSONObject data, WorkerMapper workerMapper) {
+        AdminWorkerQueryParam queryParam = JSONObject.toJavaObject(data, AdminWorkerQueryParam.class);
+        String like = "%" + queryParam.getCond() + "%";
+        Page<WorkerQueryForAdminResult> page = new Page<>(queryParam.getPage(),queryParam.getLimit());
+        Page<WorkerQueryForAdminResult> resultPage = workerMapper.workerQueryForAdmin(page,manager.getId(),like);
+        WsEvent wsEvent = new WsEvent("adminWorkerQueryRes", Result.success(resultPage));
+        WebsocketManagerUtil.sendMessage(session,wsEvent);
+    }
+
+    private void update(Session session, Manager manager, JSONObject data, WorkerMapper workerMapper, OperationMapper operationMapper) throws NoSuchAlgorithmException {
+        AdminWorkerUpdateParam updateParam = JSONObject.toJavaObject(data, AdminWorkerUpdateParam.class);
+        if (ObjectUtil.isEmpty(updateParam.getPhone())){
+            WsEvent wsEvent = new WsEvent("adminWorkerUpdateRes", Result.fail("联系电话不可为空"));
+            WebsocketManagerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        Worker worker = workerMapper.selectById(updateParam.getId());
+        if (ObjectUtil.isEmpty(worker)){
+            WsEvent wsEvent = new WsEvent("adminWorkerUpdateRes", Result.fail("更新失败 01"));
+            WebsocketManagerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        String password = updateParam.getPassword();
+        if (ObjectUtil.isNotEmpty(password)){
+            String serverPrivate = KeyUtil.getServerPrivate();
+            String realPassword = RSAUtil.decrypt1(password, serverPrivate);
+            worker.setPassword(Utils.hashPassword(realPassword));
+        }
+        if (workerMapper.updateById(worker) != 1) {
+            WsEvent wsEvent = new WsEvent("adminWorkerUpdateRes", Result.fail("更新失败 02"));
+            WebsocketManagerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        WsEvent wsEvent = new WsEvent("adminWorkerUpdateRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session,wsEvent);
+
+        Operation operation = new Operation(0,manager.getId(),1,0,"修改上酒工信息");
+        operationMapper.insert(operation);
+    }
+
+    private void remove(Session session, Manager manager, JSONArray data, WorkerMapper workerMapper, OperationMapper operationMapper) {
+        List<String> ids = data.toJavaList(String.class);
+        workerMapper.deleteBatchIds(ids);
+        WsEvent wsEvent = new WsEvent("adminWorkerUpdateRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session,wsEvent);
+        Operation operation = new Operation(0,manager.getId(),2,0,"删除上酒工");
+        operationMapper.insert(operation);
+    }
+
+    private void add(Session session, Manager manager, JSONObject data, WorkerMapper workerMapper, OperationMapper operationMapper) throws NoSuchAlgorithmException {
+        AdminWorkerAddParam addParam = JSONObject.toJavaObject(data, AdminWorkerAddParam.class);
+        if (ObjectUtil.isEmpty(addParam.getName()) || ObjectUtil.isEmpty(addParam.getPhone()) || ObjectUtil.isEmpty(addParam.getPassword())){
+            WsEvent wsEvent = new WsEvent("adminWorkerAddRes", Result.fail("数据不可为空"));
+            WebsocketManagerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        String serverPrivate = KeyUtil.getServerPrivate();
+        String realPassword = RSAUtil.decrypt1(addParam.getPassword(), serverPrivate);
+        Worker worker = new Worker();
+        worker.setId(Utils.randomString(16));
+        worker.setName(addParam.getName());
+        worker.setPhone(addParam.getPhone());
+        worker.setPassword(Utils.hashPassword(realPassword));
+        worker.setManager(manager.getId());
+        workerMapper.insert(worker);
+
+        WsEvent wsEvent = new WsEvent("adminWorkerUpdateRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session,wsEvent);
+        Operation operation = new Operation(0,manager.getId(),0,0,"新增上酒工");
+        operationMapper.insert(operation);
+    }
+}

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

@@ -54,4 +54,8 @@
     <select id="workerQueryForHistory" resultType="com.huimv.wine.entity.vo.WorkerQueryForHistoryResult">
         SELECT `id`,`last`,`name`,`phone`,`count`,`todo`,`avg_cost` as 'avg',`max_cost` as 'max' FROM `worker` WHERE `manager`= #{managerId} AND (`name` LIKE #{like} OR `phone` LIKE #{like});
     </select>
+    <select id="workerQueryForAdmin" resultType="com.huimv.wine.entity.vo.WorkerQueryForAdminResult">
+        SELECT `id`,`first`,`last`,`name`,`phone`,`count`,`avg_cost` as 'cost' FROM `worker`
+        WHERE `manager`= #{managerId} AND (`name` LIKE #{like} OR `phone` LIKE #{like})
+    </select>
 </mapper>