Browse Source

feat:处理分销的

super-yimizi 2 days ago
parent
commit
a61b6d137f

+ 66 - 0
application/api/controller/commission/AgentApply.php

@@ -260,5 +260,71 @@ class AgentApply extends Base
         return false;
     }
 
+    /**
+     * 修改代理商申请资料
+     */
+    public function update()
+    {
+        try {
+            $user = auth_user();
+            $data = $this->request->param();
+            
+            // 检查用户是否已经是代理商
+            $agent = AgentModel::where('user_id', $user->id)
+                              ->where('status', AgentModel::AGENT_STATUS_NORMAL)
+                              ->find();
+            
+            if (!$agent) {
+                $this->error('您还不是代理商,无法修改资料');
+            }
+            
+            // 获取用户的申请记录
+            $apply = ApplyModel::where('user_id', $user->id)
+                               ->where('status', ApplyModel::STATUS_APPROVED)
+                               ->find();
+            
+            if (!$apply) {
+                $this->error('未找到您的代理商申请记录');
+            }
+            
+            // 先过滤出可更新的字段
+            $validate = new AgentApplyValidate();
+            $updateData = $validate->filterUpdatableFields($data, $apply->apply_type);
+            
+            if (empty($updateData)) {
+                $this->error('没有有效的更新数据');
+            }
+            
+            // 再验证过滤后的字段
+            $validateResult = $validate->validateUpdateFields($updateData, $apply->apply_type);
+            
+            if ($validateResult !== true) {
+                $this->error($validateResult);
+            }
+            
+            // 记录修改前的数据(用于日志)
+            $oldData = $apply->toArray();
+            
+            // 更新申请记录
+            $updateData['updatetime'] = time();
+            // 如果修改了关键信息,可以考虑重新设置为待审核状态(根据业务需要)
+            // $updateData['status'] = ApplyModel::STATUS_PENDING;
+            
+            $apply->save($updateData);
+            
+            // 可以在这里添加操作日志记录
+            
+            $this->success('资料修改成功', [
+                'apply_type' => $apply->apply_type,
+                'apply_type_text' => $apply->apply_type_text,
+                'updated_fields' => array_keys($updateData),
+                'updated_data' => $updateData
+            ]);
+            
+        } catch (Exception $e) {
+            $this->error($e->getMessage());
+        }
+    }
+
 
 }

+ 145 - 1
application/api/validate/AgentApply.php

@@ -105,6 +105,7 @@ class AgentApply extends Validate
         return $this;
     }
 
+
     /**
      * 检查代理商身份是否存在且启用
      * @param mixed $value
@@ -193,7 +194,7 @@ class AgentApply extends Validate
      * @param array $requiredFields 需要验证的字段
      * @return bool|string
      */
-    protected function validateAreaIds($data, $requiredFields = ['province_id', 'city_id', 'district_id'])
+    public function validateAreaIds($data, $requiredFields = ['province_id', 'city_id', 'district_id'])
     {
         $areaModel = new \app\common\model\Area();
         
@@ -298,4 +299,147 @@ class AgentApply extends Validate
             'message' => $requirementInfo['message']
         ];
     }
+
+    /**
+     * 获取可修改的字段列表(根据申请类型)
+     * @param string $applyType
+     * @return array
+     */
+    public static function getUpdatableFields($applyType)
+    {
+        if ($applyType == ApplyModel::APPLY_TYPE_PERSONAL) {
+            // 个人申请可修改字段:真实姓名、身份证号、手机号、身份证照片
+            return [
+                'real_name', 'id_card', 'mobile', 'id_card_front', 'id_card_back'
+            ];
+        } else {
+            // 企业申请可修改字段:企业名称、法人信息、法人身份证、营业执照
+            return [
+                'company_name', 'legal_person', 'legal_mobile', 'legal_id_card',
+                'legal_id_front', 'legal_id_back', 'business_license'
+            ];
+        }
+    }
+
+    /**
+     * 过滤出可更新的字段
+     * @param array $data
+     * @param string $applyType
+     * @return array
+     */
+    public function filterUpdatableFields($data, $applyType)
+    {
+        $allowedFields = self::getUpdatableFields($applyType);
+        
+        // 过滤出允许更新且有值的字段
+        $filteredData = [];
+        foreach ($data as $field => $value) {
+            if (in_array($field, $allowedFields) && $value !== '' && $value !== null) {
+                $filteredData[$field] = $value;
+            }
+        }
+        
+        return $filteredData;
+    }
+
+    /**
+     * 验证更新字段(手动验证,避免正则表达式问题)
+     * @param array $data 已过滤的数据
+     * @param string $applyType
+     * @return bool|string
+     */
+    public function validateUpdateFields($data, $applyType)
+    {
+        if (empty($data)) {
+            return true;
+        }
+        
+        // 手动验证每个字段,避免框架验证器的正则表达式问题
+        foreach ($data as $field => $value) {
+            $result = $this->validateField($field, $value);
+            if ($result !== true) {
+                return $result;
+            }
+        }
+        
+        return true;
+    }
+
+    /**
+     * 验证单个字段
+     * @param string $field
+     * @param mixed $value
+     * @return bool|string
+     */
+    private function validateField($field, $value)
+    {
+        switch ($field) {
+            case 'real_name':
+            case 'legal_person':
+                $len = mb_strlen($value);
+                if ($len < 2 || $len > 30) {
+                    return $this->getFieldName($field) . '长度必须在2-30个字符之间';
+                }
+                break;
+                
+            case 'company_name':
+                $len = mb_strlen($value);
+                if ($len < 2 || $len > 100) {
+                    return $this->getFieldName($field) . '长度必须在2-100个字符之间';
+                }
+                break;
+                
+            case 'id_card':
+            case 'legal_id_card':
+                if (!preg_match('/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/', $value)) {
+                    return $this->getFieldName($field) . '格式不正确';
+                }
+                break;
+                
+            case 'mobile':
+            case 'legal_mobile':
+                if (!preg_match('/^1\d{10}$/', $value)) {
+                    return $this->getFieldName($field) . '格式不正确';
+                }
+                break;
+                
+            case 'id_card_front':
+            case 'id_card_back':
+            case 'legal_id_front':
+            case 'legal_id_back':
+            case 'business_license':
+                if (mb_strlen($value) > 255) {
+                    return $this->getFieldName($field) . '路径过长';
+                }
+                break;
+        }
+        
+        return true;
+    }
+
+    /**
+     * 获取字段中文名称
+     * @param string $field
+     * @return string
+     */
+    private function getFieldName($field)
+    {
+        $fieldNames = [
+            'real_name' => '真实姓名',
+            'id_card' => '身份证号',
+            'mobile' => '手机号',
+            'id_card_front' => '身份证正面照片',
+            'id_card_back' => '身份证反面照片',
+            'company_name' => '企业名称',
+            'legal_person' => '法人姓名',
+            'legal_mobile' => '法人手机号',
+            'legal_id_card' => '法人身份证号',
+            'legal_id_front' => '法人身份证正面照片',
+            'legal_id_back' => '法人身份证反面照片',
+            'business_license' => '营业执照照片'
+        ];
+        
+        return $fieldNames[$field] ?? $field;
+    }
 }
+