Jelajahi Sumber

feat: update message and js

igb 18 jam lalu
induk
melakukan
60e581e441
6 mengubah file dengan 230 tambahan dan 12 penghapusan
  1. 32 0
      claimCustomer.php
  2. 144 0
      conn.php
  3. 1 1
      js/js.js
  4. 6 4
      message_list.php
  5. 4 7
      panel.php
  6. 43 0
      rebate_redeem_save.php

+ 32 - 0
claimCustomer.php

@@ -33,6 +33,12 @@ if ($reachedLimit) {
     $result = $conn->query($sql);
     
     if ($row = $result->fetch_assoc()) {
+        // 检查是否在认领自己的客户
+        if ($row['cs_belong'] == $_SESSION['employee_id']) {
+            echo "-2"; // 返回错误代码 -2 表示不能认领自己的客户
+            exit;
+        }
+        
         $oldCode = $row['cs_code'];
         $originalEmp = $row['em_user'];
         $originalId= $row['cs_belong'];
@@ -73,6 +79,32 @@ if ($reachedLimit) {
         // Delete tags
         $conn->query("DELETE FROM tagtable WHERE customerId = " . $cid);
         
+        // 发送消息给原业务员
+        if ($originalId > 0) {
+            // 获取客户名称
+            $customerSql = "SELECT cs_code FROM customer WHERE id = " . $cid;
+            $customerResult = $conn->query($customerSql);
+            $customerRow = $customerResult->fetch_assoc();
+            $customerName = $customerRow ? $customerRow['cs_code'] : '客户';
+            
+            // 构建消息内容
+            $messageTitle = "客户被认领通知";
+            $messageContent = "您的客户 {$customerName}(原编码:{$oldCode})已被 {$_SESSION['employee_name']} 认领。\n";
+            $messageContent=textDecode($messageContent);
+            $messageContent .= "认领时间:" . date('Y-m-d H:i:s') . "\n";
+            $messageContent .= "新客户编号:{$newCode}\n";
+            
+            // 发送消息
+            sendMessage(
+                $messageTitle,
+                $messageContent,
+                2,  // 客户相关
+                0,  // 个人消息
+                $originalId,  // 原业务员ID
+                1   // 重要
+            );
+        }
+        
         echo "1";
     }
 }

+ 144 - 0
conn.php

@@ -438,4 +438,148 @@ if(!function_exists('formatCurrency')) {
 }
 
 
+// // 发送个人消息
+// $message_id = sendMessage(
+//     '个人消息标题', 
+//     '消息内容', 
+//     2,  // 客户相关
+//     0,  // 个人消息
+//     123,  // 员工ID
+//     1  // 重要
+// );
+
+// // 发送部分群发消息
+// $message_id = sendMessage(
+//     '部门通知', 
+//     '通知内容', 
+//     1,  // 系统消息
+//     1,  // 部分群发
+//     [101, 102, 103],  // 员工ID数组
+//     0  // 普通优先级
+// );
+
+// // 发送全体公告
+// $message_id = sendMessage(
+//     '系统升级通知', 
+//     '系统将于今晚10点维护', 
+//     1,  // 系统消息
+//     2,  // 全体公告
+//     [],  // 无需指定接收者
+//     2  // 紧急
+// );
+
+// // 获取未读消息数
+// $unread_count = getUnreadMessageCount();
+
+
+
+/**
+ * 发送消息函数
+ * 
+ * @param string $title 消息标题
+ * @param string $content 消息内容
+ * @param int $message_type 消息类型: 1=系统消息, 2=客户相关, 3=订单相关, 4=任务提醒, 5=其他
+ * @param int $target_type 接收目标类型: 0=个人, 1=部分群发, 2=全体公告
+ * @param array|int $recipients 当target_type=0或1时,接收者ID数组或单个接收者ID
+ * @param int $priority 优先级: 0=普通, 1=重要, 2=紧急
+ * @param int|null $related_customer_id 相关客户ID (可选)
+ * @param int|null $related_order_id 相关订单ID (可选)
+ * @return int|false 成功返回消息ID,失败返回false
+ */
+function sendMessage($title, $content, $message_type = 1, $target_type = 0, $recipients = [], $priority = 0, $related_customer_id = null, $related_order_id = null) {
+    global $conn;
+    
+    // 验证和清理输入
+    $title = mysqli_real_escape_string($conn, trim($title));
+    $content = mysqli_real_escape_string($conn, trim($content));
+    $message_type = intval($message_type);
+    $target_type = intval($target_type);
+    $priority = intval($priority);
+    $related_customer_id = $related_customer_id ? intval($related_customer_id) : "NULL";
+    $related_order_id = $related_order_id ? intval($related_order_id) : "NULL";
+    
+    // 验证必填字段
+    if (empty($title) || empty($content)) {
+        return false;
+    }
+    
+    // 插入消息主表
+    $sql = "INSERT INTO messages (title, content, message_type, target_type, priority, related_customer_id, related_order_id) 
+            VALUES ('$title', '$content', $message_type, $target_type, $priority, $related_customer_id, $related_order_id)";
+    
+    if (!$conn->query($sql)) {
+        return false;
+    }
+    
+    // 获取新插入消息的ID
+    $message_id = $conn->insert_id;
+    
+    // 处理接收人
+    if ($target_type == 0 || $target_type == 1) {
+        // 个人消息或部分群发
+        if (!is_array($recipients)) {
+            $recipients = [$recipients]; // 转换为数组
+        }
+        
+        if (empty($recipients)) {
+            return false; // 接收人为空,返回失败
+        }
+        
+        // 插入接收人记录
+        $values = [];
+        foreach ($recipients as $employee_id) {
+            $employee_id = intval($employee_id);
+            if ($employee_id > 0) {
+                $values[] = "($message_id, $employee_id, 0, NULL, 0, NOW())";
+            }
+        }
+        
+        if (!empty($values)) {
+            $recipientSql = "INSERT INTO message_recipients (message_id, employee_id, is_read, read_time, is_deleted, created_at) 
+                             VALUES " . implode(",", $values);
+            $conn->query($recipientSql);
+        }
+    } else if ($target_type == 2) {
+        // 全体公告,不需要添加接收人记录
+        // 在message_list.php中通过target_type=2来判断全员可见
+    }
+    
+    // 记录操作日志
+    logAction("发送消息: $title");
+    
+    return $message_id;
+}
+
+/**
+ * 获取未读消息数量
+ * 
+ * @param int $employee_id 员工ID,默认为当前登录员工
+ * @return int 未读消息数量
+ */
+function getUnreadMessageCount($employee_id = null) {
+    global $conn;
+    
+    // 如果没有指定员工ID,使用当前登录员工ID
+    if ($employee_id === null) {
+        if (empty($_SESSION['employee_id'])) {
+            return 0;
+        }
+        $employee_id = $_SESSION['employee_id'];
+    }
+    
+    $employee_id = intval($employee_id);
+    
+    // 查询未读消息数量
+    $sql = "SELECT COUNT(*) AS count 
+            FROM messages m 
+            LEFT JOIN message_recipients mr ON m.id = mr.message_id AND mr.employee_id = $employee_id
+            WHERE (m.target_type = 2 OR (mr.employee_id = $employee_id)) 
+              AND (mr.is_deleted = 0 OR mr.is_deleted IS NULL)
+              AND (mr.is_read = 0 OR mr.is_read IS NULL)";
+    
+    $result = mysqli_query($conn, $sql);
+    $row = mysqli_fetch_assoc($result);
+    
+    return intval($row['count']);
+}
 

+ 1 - 1
js/js.js

@@ -174,7 +174,7 @@
 					alert("认领成功");
 					window.location.reload();
 				} else {
-					alert("每天只能认领5个客户");
+					alert("认领客户超限/认领失败");
 				}
 			}
 		});

+ 6 - 4
message_list.php

@@ -491,8 +491,9 @@ $sql .= " ORDER BY CASE WHEN mr.is_read = 0 OR mr.is_read IS NULL THEN 0 ELSE 1
                 </div>
                 <div class="notepanel clear">
                    
+                 
                         <div class="noteItem" style="padding-top:0px;">详情</div>
-                        <div class="noteInfo">
+                        <div class="noteInfo" style="padding-top:0px;">
                             <div><strong>类型:</strong> <?= $message_type_text ?></div>
                             <div><strong>优先级:</strong> <span class="<?= $priority_class ?>"><?= $priority_text ?></span></div>
                             <div><strong>时间:</strong> <?= date('Y-m-d H:i:s', strtotime($row['created_at'])) ?></div>
@@ -500,9 +501,10 @@ $sql .= " ORDER BY CASE WHEN mr.is_read = 0 OR mr.is_read IS NULL THEN 0 ELSE 1
                             <div><strong>阅读时间:</strong> <?= date('Y-m-d H:i:s', strtotime($row['read_time'])) ?></div>
                             <?php endif; ?>
                         </div>
-                   
-                    <div class="noteItem" style="padding-top:0px;">内容</div>
-                    <div class="noteContent"><?= nl2br(htmlspecialcharsFix($row['content'])) ?></div>
+                      
+                    <div class="noteItem" style="padding-top:0px;float:left">内容</div>
+                    <div class="noteContent" style="padding-top:0px;float:left"> <?= nl2br(htmlspecialcharsFix($row['content'])) ?>                    
+                    </div>
                 </div>
                 <?php
             }

+ 4 - 7
panel.php

@@ -91,6 +91,7 @@ $stmt->close();
 
             </dt>
             <?php }?>
+            
             <dt><a href="../tagClound.php" target="contentFrame">标签云</a></dt>
             <?php if (checkAdminOrEmployee()): ?>
                 <dt><a href="../silentCustomer.php" target="contentFrame">静默客户</a></dt>
@@ -105,13 +106,9 @@ $stmt->close();
             <?php endif; ?>
             <dt>
                 <?php
-                // 获取未读消息数量
-                $unread_sql = "SELECT COUNT(*) as count FROM messages m 
-                            LEFT JOIN message_recipients mr ON m.id = mr.message_id AND mr.employee_id = {$_SESSION['employee_id']}
-                            WHERE (m.target_type = 2 AND (mr.id IS NULL OR (mr.is_read = 0 AND mr.is_deleted = 0)))
-                                OR (mr.employee_id = {$_SESSION['employee_id']} AND mr.is_read = 0 AND mr.is_deleted = 0)";
-                $unread_result = mysqli_query($conn, $unread_sql);
-                $unread_count = mysqli_fetch_assoc($unread_result)['count'];
+                // 获取未读消息数量               
+                $unread_count =  getUnreadMessageCount();
+
                 ?>
                 <a href="../message_list.php" target="contentFrame">消息列表
                     <?php if($unread_count > 0): ?>

+ 43 - 0
rebate_redeem_save.php

@@ -76,6 +76,49 @@ try {
     // 提交事务
     $conn->commit();
     
+    //向所有财务发送消息提示
+    // 获取客户名称
+    $customerQuery = "SELECT cs_code FROM customer WHERE id = $customerId";
+    $customerResult = $conn->query($customerQuery);
+    $customerName = "未知客户";
+    if ($customerRow = $customerResult->fetch_assoc()) {
+        $customerName = $customerRow['cs_code'];
+    }
+    
+
+
+    // 查询所有财务人员
+    $financeStaffQuery = "SELECT id, em_user FROM employee WHERE em_permission_role_id = 6 AND login_forbidden = 0";
+    $financeStaffResult = $conn->query($financeStaffQuery);
+    
+    if ($financeStaffResult && $financeStaffResult->num_rows > 0) {
+        $financeStaffIds = [];
+        while ($staff = $financeStaffResult->fetch_assoc()) {
+            $financeStaffIds[] = $staff['id'];
+        }
+        
+        // 构建消息内容
+        $messageTitle = "新的返点兑换申请";
+        $messageContent = "客户 {$customerName} 提交了一笔返点兑换申请,金额:¥" . number_format($totalRebateAmount, 2) . "。\n";
+
+        $messageContent = textDecode($messageContent);
+
+        $messageContent .= "兑换ID:{$redemptionId}\n";
+        $messageContent .= "处理人:{$_SESSION['employee_name']}\n";
+        $messageContent .= "申请时间:" . date('Y-m-d H:i:s') . "\n";
+        $messageContent .= "请及时处理。";
+        
+        // 发送消息给所有财务人员
+        sendMessage(
+            $messageTitle,
+            $messageContent,
+            3,  // 订单相关
+            1,  // 部分群发
+            $financeStaffIds,
+            1   // 重要
+        );
+    }
+
     // 返回成功消息
     echo "<script>alert('返点兑换成功!'); window.location.href='rebate_summary.php';</script>";