From bc525edd235993012dff41e7e15f569f25712395 Mon Sep 17 00:00:00 2001 From: lcc <805383944@qq.com> Date: Thu, 31 Jul 2025 14:33:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BA=BF=E7=B4=A2=E5=88=86?= =?UTF-8?q?=E4=BD=A3=E8=84=9A=E6=9C=AC=E3=80=81=E7=AE=A1=E7=90=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E5=A2=9E=E5=8A=A0=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9h5=E5=8D=8F=E8=AE=AE=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/admin/controllers/auto/Config.php | 486 ++++++++++++------ .../controllers/pingan/BaseController.php | 4 +- agent/admin/libraries/api/Record.php | 18 + api/controllers/Welcome.php | 10 +- api/controllers/plan/Plan.php | 2 + api/controllers/plan/agent/Commission.php | 57 ++ common/models/biz/Biz_accountLog_model.php | 6 + .../models/receiver/Receiver_clues_model.php | 174 +++++-- .../receiver/Receiver_customers_model.php | 197 +------ 9 files changed, 551 insertions(+), 403 deletions(-) create mode 100644 api/controllers/plan/agent/Commission.php diff --git a/agent/admin/controllers/auto/Config.php b/agent/admin/controllers/auto/Config.php index 676b2a02..bcb5eadd 100644 --- a/agent/admin/controllers/auto/Config.php +++ b/agent/admin/controllers/auto/Config.php @@ -109,188 +109,290 @@ class Config extends BaseController "item_bottom" => [ [ "title" => "《用户须知》", - "content" => '

用户须知

+ "content" => '

用户须知

尊敬的用户:

- 欢迎使用平安好车补平台(以下简称“本平台”)。为了保障您的权益,请在参与活动前仔细阅读本须知。您点击确认或使用优惠权益即视为同意本须知的全部内容。 + 欢迎使用好车补平台(以下简称“本平台”)。为了保障您的权益,请在参与活动前仔细阅读本须知。您点击确认或使用优惠权益即视为同意本须知的全部内容。

 

- 一、优惠权益说明 + 一、优惠权益说明

-   +  

- -

-    您可通过本平台活动页面领取或兑换“平安好车补”优惠权益,该权益适用于指定合作品牌、车型及经销商,具体规则以活动页面公示为准。 +

+ ● 权益获取 +

+

+ 您可通过本平台活动页面领取或兑换好车补”优惠权益,该权益适用于指定合作品牌、车型及经销商,具体规则以活动页面公示为准。 +

+

+ 优惠权益可能以电子券、验证码等形式发放,请妥善保存,遗失不补。 +

+

+ ● 使用规则 +

+

+ 优惠权益需在有效期内使用,过期自动失效。 +

+

+ 使用前请与经销商确认车型、补贴金额及所需材料(如购车合同、身份证明等),因材料不全或不符合要求导致的权益无法兑现,由用户自行承担。

-    优惠权益可能以电子券、验证码等形式发放,请妥善保存,遗失不补。 +  

- -

-    优惠权益需在有效期内使用,过期自动失效。 +

+ 二、用户义务与责任

-    使用前请与经销商确认车型、补贴金额及所需材料(如购车合同、身份证明等),因材料不全或不符合要求导致的权益无法兑现,由用户自行承担。 +   +

+

+ ● 信息真实性 +

+

+ 您需保证参与活动时提交的所有信息(如身份信息、联系方式等)真实有效,否则本平台有权取消您的优惠资格。 +

+

+ ● 权益使用限制 +

+

+ 优惠权益不得转让、出售或用于其他商业用途,一经发现,本平台有权收回权益并追究责任。

 

- 二、用户义务与责任 -

-

-   -

- -

-    您需保证参与活动时提交的所有信息(如身份信息、联系方式等)真实有效,否则本平台有权取消您的优惠资格。 -

- -

-    优惠权益不得转让、出售或用于其他商业用途,一经发现,本平台有权收回权益并追究责任。 -

-

- 若经销商拒绝兑现优惠,您可向本平台提供书面证据(如合同、沟通记录等),我们将协助核实并协调处理。 + 三、责任划分

 

- 三、责任划分 + 平台责任

-

-   +

+ 本平台仅作为优惠权益的发放方,不参与您与经销商之间的购车交易,相关争议需由您与经销商协商解决。

-

-    平台责任 -

-

-    本平台仅作为优惠权益的发放方,不参与您与经销商之间的购车交易,相关争议需由您与经销商协商解决。 -

-

-    因系统维护、不可抗力等原因可能导致服务暂停,本平台将提前公告,但不承担由此产生的间接损失。 +

+ 因系统维护、不可抗力等原因可能导致服务暂停,本平台将提前公告,但不承担由此产生的间接损失。

用户责任

-

-    非因本平台过错导致的权益无法使用(如经销商违约、用户操作失误等),本平台不承担责任。 +

+ 非因本平台过错导致的权益无法使用(如经销商违约、用户操作失误等),本平台不承担责任。

 

- 四、数据与隐私 + 四、数据与隐私 +

+

+   +

+

+ 您授权本平台在合法范围内收集并使用您的个人信息(如手机号、车型偏好等),以便为您提供优惠服务及后续活动通知。 +

+

+ 您的信息将严格保密,仅限与合作经销商共享必要数据以核验优惠权益。

 

-    您授权本平台在合法范围内收集并使用您的个人信息(如手机号、车型偏好等),以便为您提供优惠服务及后续活动通知。 -

-

-    您的信息将严格保密,仅限与合作经销商共享必要数据以核验优惠权益。 + 五、其他条款

 

-

- 五、其他条款 +

+ 法律适用:本须知受中华人民共和国法律管辖,争议提交厦门市思明区人民法院诉讼解决。

-

-   -

-

-    法律适用:本须知受中华人民共和国法律管辖,争议提交深圳市福田区人民法院诉讼解决。 -

-

-    条款更新:本平台有权修订须知内容,修订后将通过官网或APP公示,继续使用服务视为接受新条款。 -

-
', +

+ 条款更新:本平台有权修订须知内容,修订后将通过本平台公示,继续使用服务视为接受新条款。 +

', "type" => 1 ], [ "title" => "《隐私政策》", - "content" => '

隐私政策

-

  保护用户个人信息是平安好车补平台的核心原则。我们将按照本政策及《隐私政策》(链接:平安好车补隐私政策)的规定收集、使用、存储和分享您的个人信息。本政策未明确的条款,以《隐私政策》为准;若本政策与《隐私政策》冲突,以本政策为准。

-

 

-

一、本政策的适用范围

-

  适用于平安好车补通过网站、App、小程序及未来技术形态提供的车补申领、购车优惠及汽车金融服务。若关联公司使用本服务但无独立隐私政策,则本政策同样适用。

-

不适用于第三方提供的服务(如合作经销商服务),其个人信息处理规则以其说明为准。

-

 

-

二、我们如何收集和使用您的个人信息

-

1. 车补申领服务

-

  购车补贴申请:需提供姓名、手机号、购车发票、车辆信息,用于审核及发放补贴。拒绝提供将无法完成申领。

-

  优惠券领取:需提供手机号、购车意向车型,用于推送定制化优惠。拒绝提供将无法使用此功能。

-

  礼品寄送:需提供收件人、地址、联系电话,用于活动奖品寄送。拒绝提供将无法接收礼品。

-

2. 位置服务

-

  查看附近合作经销商时,需授权精准位置信息。拒绝授权将无法使用此功能。

-

3. 用户权利说明

-

以上信息均为自愿提供,拒绝提供可能影响服务使用。

-

不满14周岁用户需由法定监护人同意后方可提供信息。

-

非必要个人信息(如个性化推荐)将单独征得同意。

-

 

-

三、我们如何使用Cookie和同类技术

-

  为优化访问体验、保障账户安全,我们使用Cookie存储站点标识符。您可管理浏览器设置阻止Cookie,但可能导致部分功能异常。

-

四、我们如何分享、转让、公开披露您的个人信息

-

1. 共享

-

  仅在以下情形与第三方共享:

-

  经您明确授权;为提供车补服务,与合作经销商、金融机构共享必要信息(如购车证明);

-

履行法定义务(如配合司法机关调查)。

-

2. 转让

-

  仅限:合并、收购等资产转移时,要求新持有方继续受本政策约束;法律法规要求。

-

3. 公开披露

-

  仅在您同意或法律强制要求时进行。

-

 

-

五、我们如何存储个人信息

-

  存储期限:网络日志保存6个月;其他信息在服务必需期内保留,超期后匿名化处理。

-

  存储地点:中国境内,无跨境传输。

-

  停运处理:停止运营时将删除或匿名化您的信息。

-

 

-

六、我们如何保护个人信息的安全

-

  技术措施:SSL加密、权限管控、监控系统。

-

  管理措施:设立个人信息保护负责人;员工签署保密协议并接受安全培训;合作方需签署数据保护协议。尽管全力保障,无法承诺100%安全,重大过失导致损害将承担法律责任。

-

 

-

七、个人信息的管理

-

  注销账户:

-

  通过客服申请,15日内处理完毕。

-

 

-

八、未成年人个人信息保护

-

  不面向未成年人提供服务。若发现误收未满18周岁用户信息,将立即删除。

-

 

-

九、修订和通知

-

  修订本政策将通过弹窗公告通知。若您不同意修改,请停止使用服务;继续使用视为接受更新。重大变更时将显著提醒。

-

十、联系我们

-

  个人信息问题反馈:

-

  电话:400-XXX-XXXX

-

  邮箱:privacy@pinganhaochebu.com

-

       15个工作日内回复,争议可向监管机构投诉。

-

 

-

十一、附则

-

  本政策适用中国法律,争议提交深圳市福田区人民法院管辖。

-

  政策标题仅为便于阅读,不影响条款解释。

', + "content" => '

隐私政策

+

+ 保护用户个人信息是好车补平台的核心原则。我们将按照本政策及的规定收集、使用、存储和分享您的个人信息。 +

+

+   +

+

+ 一、本政策的适用范围 +

+

+ 适用于好车补通过网站、App、小程序及未来技术形态提供的车补申领、购车优惠及汽车金融服务。若关联公司使用本服务但无独立隐私政策,则本政策同样适用。 +

+

+ 不适用于第三方提供的服务(如合作经销商服务),其个人信息处理规则以其说明为准。 +

+

+   +

+

+ 二、我们如何收集和使用您的个人信息 +

+

+ 1. 车补申领服务 +

+

+ 购车补贴申请:需提供姓名、手机号、购车发票、车辆信息,用于审核及发放补贴。拒绝提供将无法完成申领。 +

+

+ 优惠券领取:需提供手机号、购车意向车型,用于推送定制化优惠。拒绝提供将无法使用此功能。 +

+

+ 礼品寄送:需提供收件人、地址、联系电话,用于活动奖品寄送。拒绝提供将无法接收礼品。 +

+

+ 2. 位置服务 +

+

+ 查看附近合作经销商时,需授权精准位置信息。拒绝授权将无法使用此功能。 +

+

+ 3. 用户权利说明 +

+

+ 以上信息均为自愿提供,拒绝提供可能影响服务使用。 +

+

+ 不满14周岁用户需由法定监护人同意后方可提供信息。 +

+

+ 非必要个人信息(如个性化推荐)将单独征得同意。 +

+

+   +

+

+ 三、我们如何使用Cookie和同类技术 +

+

+ 为优化访问体验、保障账户安全,我们使用Cookie存储站点标识符。您可管理浏览器设置阻止Cookie,但可能导致部分功能异常。 +

+

+ 四、我们如何分享、转让、公开披露您的个人信息 +

+

+ 1. 共享 +

+

+ 仅在以下情形与第三方共享: +

+

+ 经您明确授权;为提供车补服务,与合作经销商、金融机构共享必要信息(如购车证明); +

+

+ 履行法定义务(如配合司法机关调查)。 +

+

+ 2. 转让 +

+

+ 仅限:合并、收购等资产转移时,要求新持有方继续受本政策约束;法律法规要求。 +

+

+ 3. 公开披露 +

+

+ 仅在您同意或法律强制要求时进行。 +

+

+   +

+

+ 五、我们如何存储个人信息 +

+

+ 存储期限:网络日志保存6个月;其他信息在服务必需期内保留,超期后匿名化处理。 +

+

+ 存储地点:中国境内,无跨境传输。 +

+

+ 停运处理:停止运营时将删除或匿名化您的信息。 +

+

+   +

+

+ 六、我们如何保护个人信息的安全 +

+

+ 技术措施:SSL加密、权限管控、监控系统。 +

+

+ 管理措施:设立个人信息保护负责人;员工签署保密协议并接受安全培训;合作方需签署数据保护协议。尽管全力保障,无法承诺100%安全,重大过失导致损害将承担法律责任。 +

+

+   +

+

+ 七、个人信息的管理 +

+

+ 注销账户: +

+

+ 通过客服申请,15日内处理完毕。 +

+

+   +

+

+ 八、未成年人个人信息保护 +

+

+ 不面向未成年人提供服务。若发现误收未满18周岁用户信息,将立即删除。 +

+

+   +

+

+ 九、修订和通知 +

+

+ 修订本政策将通过弹窗公告通知。若您不同意修改,请停止使用服务;继续使用视为接受更新。重大变更时将显著提醒。 +

+

+ 十、联系我们 +

+

+ 个人信息问题反馈: +

+

+ 电话:400-XXX-XXXX +

+

+ 邮箱:privacy@pinganhaochebu.com +

+

+ 15个工作日内回复,争议可向监管机构投诉。 +

+

+   +

+

+ 十一、附则 +

+

+ 本政策适用中国法律,争议提交厦门市湖里区人民法院管辖。 +

+

+ 政策标题仅为便于阅读,不影响条款解释。 +

', "type" => 1 ] ], @@ -358,37 +460,97 @@ class Config extends BaseController "type" => 1 ], [ "title" => "《车主服务个人信息保护声明》", - "content" => '

车主服务个人信息保护声明

-

特别提示:

-

  平安好车补车主服务是平安集团推出的面向使用平安好车补产品与/或服务的车主的专属服务。本服务严格遵循平安集团保护用户个人信息的基本原则,承诺不会通过任何渠道非法泄露您的个人信息,请您放心上传相关认证资料。

-

  平安好车补车主服务将按照本声明及平安集团《隐私政策》的规定收集、使用、储存和分享您的个人信息。

-

  本声明对个人信息保护规定的内容与上述《隐私政策》有相冲突的,及本声明对个人信息保护相关内容未作明确规定的,均以《隐私政策》的内容为准。

-

 

-

一、个人信息的收集

-

  我们收集您的个人信息的最终目的是为了为您提供便捷、高效的车险相关服务(如理赔协助、优惠信息、服务提醒等),优化并丰富您的用户体验。这些个人信息是能够单独或者与其他信息结合识别您的个人身份的信息,包括:

-

  ① 车辆相关证件信息照片(例如行驶证照片,其中可能包含:车主姓名、车牌号、车辆识别码、发动机号、注册日期等);

-

  ② 身份证明信息照片(例如驾驶证或身份证照片,其中包含姓名、证件号码等);

-

  ③ 手机号;

-

  ④ 车辆保险信息(如保单号、保险公司、险种等,用于服务匹配)。

-

(注:具体收集信息项可能根据服务功能调整,以页面实际要求为准)

-

  以上个人信息均是您自愿提供。您有权拒绝提供,但如果您拒绝提供某些必要的个人信息, 您将可能无法使用我们提供的特定服务,或者可能对您使用服务的完整性和体验造成影响。

-

  平安好车补车主服务主要面向年满18周岁的车主用户。我们原则上不主动收集未成年人的个人信息。如果存在特殊情形需要处理未成年人的信息,我们将在获得其监护人的明确同意后,依法合规进行。

-

 

-

二、个人信息的使用和分享

-

  您同意,平安好车补车主服务可以通过以下方式对个人信息进行使用和分享(包含对于个人信息的存储和处理):

-

  为您提供服务: 使用您提供的信息进行身份验证、匹配保险信息、处理理赔申请、提供相关服务咨询与支持、发送服务状态通知等;

-

  服务优化与沟通: 为提升服务质量,我们可能在必要时使用您的信息进行内部分析;同时, 我们可能定期或不定期向您发送与服务相关的信息(如服务更新、优惠活动、满意度调研等),您同意接收上述信息;

-

  必要的共享: 为履行服务目的,在法律法规允许且必要的范围内,您的个人信息可能会与平安集团内的关联公司以及提供车险服务的合作保险公司进行共享,以便为您提供更完善的车险相关服务。我们将严格要求接收方按照本声明及我们的指示处理您的个人信息,并采取必要的保密措施。

-

  您同意免除上述个人信息的接收和/或使用方在按照本声明所述授权情形下进行信息披露和使用而导致的或可能导致的所有索赔、责任和损失(因接收方/使用方故意或重大过失造成的除外)。

-

 

-

三、更正或投诉

-

  我们致力于保障您个人信息的安全与准确。

-

  查询、修改或更正: 如果您需要查询、修改或更正您在平安好车补服务中提交的个人信息,您可以通过平安好车补APP或小程序内的相关功能进行操作,或联系客服协助。

-

  疑问或投诉: 如果您对平安好车补车主服务的个人信息保护有任何疑问、建议或投诉,您可以通过以下方式联系我们:

-

  客服热线:平安统一客服热线 95511 (请根据语音提示选择相应服务)

-

  在线客服: 通过平安好车补APP或小程序内的在线客服功能

-

  邮件: (可补充官方指定邮箱,例如:privacy@pingan.com)

-

  我们将尽快响应您的请求。

', + "content" => '

车主服务个人信息保护声明

+

+ 特别提示: +

+

+ 好车补车主服务是本平台推出的面向使用好车补产品与/或服务的车主的专属服务。本服务严格遵循保护用户个人信息的基本原则,承诺不会通过任何渠道非法泄露您的个人信息,请您放心上传相关认证资料。 +

+

+ 好车补车主服务将按照本声明及《隐私政策》的规定收集、使用、储存和分享您的个人信息。 +

+

+ 本声明对个人信息保护规定的内容与上述《隐私政策》有相冲突的,及本声明对个人信息保护相关内容未作明确规定的,均以《隐私政策》的内容为准。 +

+

+   +

+

+ 一、个人信息的收集 +

+

+ 我们收集您的个人信息的最终目的是为了为您提供便捷、高效的购车补贴相关服务,优化并丰富您的用户体验。这些个人信息是能够单独或者与其他信息结合识别您的个人身份的信息,包括: +

+

+ ① 车辆相关证件信息照片(例如行驶证照片,其中可能包含:车主姓名、车牌号、车辆识别码、发动机号、注册日期等); +

+

+ ② 身份证明信息照片(例如身份证照片,其中包含姓名、证件号码等); +

+

+ ③ 手机号; +

+

+ ④ 车辆保险信息(如保单号、保险公司、险种等)。 +

+

+ (注:具体收集信息项可能根据服务功能调整,以页面实际要求为准) +

+

+ 以上个人信息均是您自愿提供。您有权拒绝提供,但如果您拒绝提供某些必要的个人信息,您将可能无法使用我们提供的特定服务,或者可能对您使用服务的完整性和体验造成影响。 +

+

+ 好车补车主服务主要面向年满18周岁的车主用户。我们原则上不主动收集未成年人的个人信息。如果存在特殊情形需要处理未成年人的信息,我们将在获得其监护人的明确同意后,依法合规进行。 +

+

+   +

+

+ 二、个人信息的使用和分享 +

+

+ 您同意,好车补车主服务可以通过以下方式对个人信息进行使用和分享(包含对于个人信息的存储和处理): +

+

+ 为您提供服务:使用您提供的信息进行身份验证、购车补贴申请与发放、提供相关服务咨询与支持、发送服务状态通知等; +

+

+ 服务优化与沟通:为提升服务质量,我们可能在必要时使用您的信息进行内部分析;同时,我们可能定期或不定期向您发送与服务相关的信息(如服务更新、优惠活动、满意度调研等),您同意接收上述信息; +

+

+ 必要的共享:为履行服务目的,在法律法规允许且必要的范围内,您的个人信息可能会与平安集团内的关联公司以及提供车险服务的合作保险公司进行共享,以便为您提供更完善的车险相关服务。我们将严格要求接收方按照本声明及我们的指示处理您的个人信息,并采取必要的保密措施。 +

+

+ 您同意免除上述个人信息的接收和/或使用方在按照本声明所述授权情形下进行信息披露和使用而导致的或可能导致的所有索赔、责任和损失(因接收方/使用方故意或重大过失造成的除外)。 +

+

+   +

+

+ 三、更正或投诉 +

+

+ 我们致力于保障您个人信息的安全与准确。 +

+

+ 查询、修改或更正: 如果您需要查询、修改或更正您在平安好车补服务中提交的个人信息,您可以通过好车补APP或小程序内的相关功能进行操作,或联系客服协助。 +

+

+ 疑问或投诉: 如果您对好车补车主服务的个人信息保护有任何疑问、建议或投诉,您可以通过以下方式联系我们: +

+

+ 客服热线: +

+

+ 在线客服:通过好车补APP或小程序内的在线客服功能 +

+

+ 邮件: +

+

+ 我们将尽快响应您的请求。 +

', "type" => 1 ] ], diff --git a/agent/admin/controllers/pingan/BaseController.php b/agent/admin/controllers/pingan/BaseController.php index 1218b772..0247deb2 100644 --- a/agent/admin/controllers/pingan/BaseController.php +++ b/agent/admin/controllers/pingan/BaseController.php @@ -108,8 +108,8 @@ abstract class BaseController extends REST_Controller $method = lcfirst(get_class($this)); $end_time = microtime(true); $spendTime = ($end_time - $this->start_time) * 1000; //计算差值 毫秒 - $this->record->operationRecord(['userId' => $_SESSION['userId'], 'username' => $_SESSION['username'] - , 'nickname' => $_SESSION['nickname'], 'method' => $method, 'spendTime' => $spendTime + $this->record->operationRecordPinAn(['userId' => $_SESSION['id'], 'username' => $_SESSION['username'] + , 'nickname' => $_SESSION['nickname'] ?: '', 'method' => $method, 'spendTime' => $spendTime , 'module' => $_SESSION['operation_module'], 'description' => $_SESSION['operation_description'] , 'params' => json_encode($this->inputs, JSON_UNESCAPED_UNICODE) , 'result' => json_encode($set_data, JSON_UNESCAPED_UNICODE)]); diff --git a/agent/admin/libraries/api/Record.php b/agent/admin/libraries/api/Record.php index 442ae173..13b87648 100644 --- a/agent/admin/libraries/api/Record.php +++ b/agent/admin/libraries/api/Record.php @@ -58,6 +58,24 @@ class Record } } + /** + * @param $data + */ + public function operationRecordPinAn($data) + { + if ($data['userId']) { + $os_device = $this->get_os_device(); + $data['url'] = uri_string(); + $data['requestMethod'] = $this->ci->input->method(); + $data['ip'] = get_client_ip(); + $data['device'] = $os_device['device']; + $data['os'] = $os_device['os']; + $data['browser'] = $this->get_browser(); + $data['createTime'] = date('Y-m-d H:i:s'); + $this->ci->Pingan_sys_operation_record_model->add($data); + } + } + /** * Notes:新增登录日志 * Created on: 2022/9/15 14:10 diff --git a/api/controllers/Welcome.php b/api/controllers/Welcome.php index e12b1d7d..6f24bf8e 100644 --- a/api/controllers/Welcome.php +++ b/api/controllers/Welcome.php @@ -13,10 +13,10 @@ class Welcome extends CI_Controller public function test() { - $this->load->model('receiver/receiver_customers_model', 'customers_model'); - $rid = 17418; - $bizId = 57; - $res = $this->customers_model->Commissions($rid, $bizId); - var_dump($res); +// $this->load->model('receiver/receiver_customers_model', 'customers_model'); +// $rid = 17418; +// $bizId = 57; +// $res = $this->customers_model->Commissions($rid, $bizId); +// var_dump($res); } } diff --git a/api/controllers/plan/Plan.php b/api/controllers/plan/Plan.php index 328180bd..5c733349 100644 --- a/api/controllers/plan/Plan.php +++ b/api/controllers/plan/Plan.php @@ -37,6 +37,8 @@ class Plan extends CI_Controller $plan[] = array('url' => base_url(array('plan', 'score', 'mergeBiz')), 'interval' => 1); //合并上月门店分数日志 $plan[] = array('url' => base_url(array('plan', 'score', 'mergeAvgUser')), 'interval' => 1); //合并本月个人分数日志 $plan[] = array('url' => base_url(array('plan', 'score', 'mergeAvgBiz')), 'interval' => 1); //合并本月门店分数日志 + //线索分佣 + $plan[] = array('url' => base_url(array('plan', 'agent/commission', 'bizClues')), 'interval' => 1); //合并本月门店分数日志 $plan[] = array('url' => base_url(array('plan', 'report', 'index')), 'interval' => 20); //门店日报 diff --git a/api/controllers/plan/agent/Commission.php b/api/controllers/plan/agent/Commission.php new file mode 100644 index 00000000..7a3be16d --- /dev/null +++ b/api/controllers/plan/agent/Commission.php @@ -0,0 +1,57 @@ +load->model('receiver/receiver_clues_model', 'clues_model'); + $this->load->model('biz/biz_account_model', 'account_model'); + $this->load->model('biz/biz_accountLog_model', 'bizAccountLog'); + $this->load->library('myResponse'); + $this->dir = 'commission'; + } + + /** + * 店铺线索分佣 + * @return void + */ + public function bizClues() + { + $log_path = 'biz_clues.log'; + try { + $page = 1; + $size = 20; + $where = ['comm_status' => Biz_accountLog_model::COMM_STATUS_WAIT, 'target_id>' => 0]; + $rows = $this->bizAccountLog->select($where, 'id asc', $page, $size); + if (!$rows) { + throw new Exception('没有需要分佣的记录'); + } + foreach ($rows as $key => $val) { + $account = $this->account_model->get($val['account_id']); + /** @var MyResponse $result */ + $result = $this->clues_model->Commissions($val['target_id'], $account['biz_id'], $val['money_out']); + if (!$result->isSuccess()) { + debug_log("分佣失败:" . $result->getMessage(), $log_path, $this->dir); + } + $comm_status = $result->isSuccess() ? Biz_accountLog_model::COMM_STATUS_SUCCESS : Biz_accountLog_model::COMM_STATUS_FAIL; + $ret = $this->bizAccountLog->update(['comm_status' => $comm_status], ['id' => $val['id']]); + if ($ret && is_numeric($ret)) { + debug_log('分佣成功,支付记录ID:' . $val['id'], $log_path, $this->dir); + } else { + debug_log('分佣失败,支付记录ID:' . $val['id'], $log_path, $this->dir); + } + } + } catch (Exception $e) { + debug_log($e->getMessage(), $log_path, $this->dir); + } + } +} \ No newline at end of file diff --git a/common/models/biz/Biz_accountLog_model.php b/common/models/biz/Biz_accountLog_model.php index e743ccc0..c98dc0a7 100644 --- a/common/models/biz/Biz_accountLog_model.php +++ b/common/models/biz/Biz_accountLog_model.php @@ -5,6 +5,12 @@ class Biz_accountLog_model extends HD_Model { private $table_name = 'lc_biz_accountlog'; + //分佣状态 + const COMM_STATUS_WAIT = 0; //待处理 + const COMM_STATUS_SUCCESS = 1; //成功 + const COMM_STATUS_FAIL = 2;//失败 + const COMM_STATUS_NOT = 4;//不需要分佣 + public function __construct() { parent::__construct($this->table_name, 'default'); diff --git a/common/models/receiver/Receiver_clues_model.php b/common/models/receiver/Receiver_clues_model.php index b33ea271..8a62ba59 100644 --- a/common/models/receiver/Receiver_clues_model.php +++ b/common/models/receiver/Receiver_clues_model.php @@ -113,44 +113,6 @@ class Receiver_clues_model extends HD_Model return $this->db->get()->result_array(); } - /** - * 解锁线索并分佣 - * @param $id - * @param $bizId - * @return MyResponse - */ - public function unlock($id, $bizId) - { - $this->load->model('receiver/receiver_customers_model', 'customers_model'); - $this->db->trans_begin(); - try { - $row = $this->get(['id' => $id]); - if (!$row) { - throw new Exception('数据不存在'); - } - $res = $this->clues_model->update(['un_lock' => 1], ['id' => $id]); - if (!$res) { - throw new Exception('更新失败'); - } - //添加客户池 - /** @var MyResponse $result */ - $result = $this->customers_model->addCustomerByCluesId($id); - if (!$result->isSuccess()) { - throw new Exception($result->getMessage()); - } - //设置优惠券状态 - $result = $this->setCluesCouponStatus($id, $bizId); - if (!$result->isSuccess()) { - throw new Exception($result->getMessage()); - } - $this->db->trans_commit(); - return new MyResponse(EXIT_SUCCESS, 'success'); - } catch (Exception $e) { - $this->db->trans_rollback(); - return new MyResponse(EXIT_ERROR, '解锁失败:' . $e->getMessage()); - } - } - /** * @param $id * @param $bizId @@ -218,4 +180,140 @@ class Receiver_clues_model extends HD_Model return new MyResponse(EXIT_ERROR, '设置优惠券状态失败:' . $e->getMessage()); } } + + /** + * 分佣 + * @param int $cluesId 线索id + * @param int $bizId 门店id + * @param float $money 分佣金额 + * @return MyResponse + */ + public function Commissions($cluesId, $bizId, $money) + { + $this->load->helper('string'); + $this->load->model('receiver/receiver_clues_model'); + $this->load->model('agent/pingan/pingan_users_model'); + $this->load->model('agent/organization/organization_cmmssn_model', 'mdOrganizationCmmssn'); + $this->load->model('agent/organization/organization_model'); + $this->load->model('agent/pingan/pingan_users_cmmssn_model'); + $this->pingan_users_model->set_db('agentdb'); + $this->mdOrganizationCmmssn->set_db('agentdb'); + $this->organization_model->set_db('agentdb'); + $this->pingan_users_cmmssn_model->set_db('agentdb'); + $log_path = 'commissions.log'; + $log_dir = 'clues'; + try { + debug_log("开始分佣:线索id:{$cluesId},门店id:{$bizId},分佣金额:{$money}", $log_path, $log_dir); + $clues = $this->receiver_clues_model->get(['id' => $cluesId, 'app_id' => Receiver_clues_model::APP_ID_ACTIVITY]); + if (!$clues) { + throw new Exception("线索不存在"); + } + if (!$clues['out_id']) { + throw new Exception("报名来源不存在"); + } + if (!$clues['pingan_user_id']) { + debug_log("结束分佣:线索不需要分佣", $log_path, $log_dir); + return new MyResponse(EXIT_SUCCESS, '保存成功'); + } + + $pinanUser = $this->pingan_users_model->get(['id' => $clues['pingan_user_id']]); + if (!$pinanUser['id']) { + throw new Exception("线索不存在绑定用户关系"); + } + //获取分佣配置 + $cmmssn = $this->mdOrganizationCmmssn->get(['teamId' => $pinanUser['orgTeamId'], 'status' => 0]); + if (!$cmmssn) { + throw new Exception("分佣配置不存在"); + } + //团队设置分佣等级 + $level = $this->organization_model->getTeamLevel($pinanUser['orgTeamId']); + $brokerage1 = $money * ($cmmssn['cluesLevel1'] / 100) ?: 0; + $brokerage2 = $money * ($cmmssn['cluesLevel2'] / 100) ?: 0; + $brokerage3 = $money * ($cmmssn['cluesLevel3'] / 100) ?: 0; + $brokerage4 = $money * ($cmmssn['cluesLevel4'] / 100) ?: 0; + debug_log('分佣金额:' . json_encode([$brokerage1, $brokerage2, $brokerage3, $brokerage4]), $log_path, $log_dir); + $cfId = $clues['id']; + $add_data = []; + if ($brokerage1 && $clues['area_id']) { //一级佣金 + $add_data[] = [ + 'cfId' => $cfId, + 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, + 'money' => $brokerage1, + 'pinganUserId' => $clues['area_id'], + 'teamId' => 0, + 'depId' => 0, + 'areaId' => $clues['area_id'], + 'createTime' => date('Y-m-d H:i:s'), + 'bizId' => $bizId + ]; + } + if ($brokerage2 && $clues['dep_id']) { //二级佣金 + $add_data[] = [ + 'cfId' => $cfId, + 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, + 'money' => $brokerage2, + 'pinganUserId' => $clues['dep_id'], + 'teamId' => 0, + 'depId' => $clues['dep_id'], + 'areaId' => $clues['area_id'] ?: 0, + 'createTime' => date('Y-m-d H:i:s'), + 'bizId' => $bizId + ]; + } + if ($level >= 4) { //4级 + if ($brokerage3 && $clues['team_id']) { + $add_data[] = [ + 'cfId' => $cfId, + 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, + 'money' => $brokerage3, + 'pinganUserId' => $clues['team_id'], + 'teamId' => $clues['team_id'], + 'depId' => $clues['dep_id'], + 'areaId' => $clues['area_id'] ?: 0, + 'createTime' => date('Y-m-d H:i:s'), + 'bizId' => $bizId + ]; + } + if ($brokerage4 && $clues['pingan_user_id']) { + $add_data[] = [ + 'cfId' => $cfId, + 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_OWN, + 'money' => $brokerage4, + 'pinganUserId' => $clues['pingan_user_id'], + 'teamId' => $clues['team_id'], + 'depId' => $clues['dep_id'], + 'areaId' => $clues['area_id'] ?: 0, + 'createTime' => date('Y-m-d H:i:s'), + 'bizId' => $bizId + ]; + } + } else { //三级 + if ($brokerage3 && $clues['pingan_user_id']) { + $add_data[] = [ + 'cfId' => $cfId, + 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, + 'money' => $brokerage3, + 'pinganUserId' => $clues['team_id'], + 'teamId' => 0, + 'depId' => $clues['dep_id'], + 'areaId' => $clues['area_id'] ?: 0, + 'createTime' => date('Y-m-d H:i:s'), + 'bizId' => $bizId + ]; + } + } + debug_log('分佣数据:' . json_encode($add_data), $log_path, $log_dir); + if (count($add_data)) { + $result = $this->pingan_users_cmmssn_model->add_batch($add_data); + if (!$result) { + throw new Exception("保存失败"); + } + } + debug_log('分佣结束', $log_path, $log_dir); + return new MyResponse(EXIT_SUCCESS, '保存成功'); + } catch (Exception $e) { + debug_log($e->getMessage(), $log_path, $log_dir); + return new MyResponse(EXIT_ERROR, '分佣失败:' . $e->getMessage()); + } + } } diff --git a/common/models/receiver/Receiver_customers_model.php b/common/models/receiver/Receiver_customers_model.php index d2cda9b1..53ee1a07 100644 --- a/common/models/receiver/Receiver_customers_model.php +++ b/common/models/receiver/Receiver_customers_model.php @@ -348,8 +348,6 @@ class Receiver_customers_model extends HD_Model if (!is_numeric($res)) { throw new Exception('更新优惠券状态失败'); } - //线索分佣 -// $res = $this->Commissions($row['rid'], $bizId); //扣除门店金额 $res = $this->deductBizMoney($row['rid'], $bizId); if (!$res->isSuccess()) { @@ -360,7 +358,7 @@ class Receiver_customers_model extends HD_Model return new MyResponse(EXIT_SUCCESS, '解锁成功'); } catch (Exception $e) { $this->db->trans_rollback(); -// $this->auto_user_coupon_model->db->trans_rollback(); + $this->auto_user_coupon_model->db->trans_rollback(); debug_log("解锁失败:" . $e->getMessage(), $log_path); return new MyResponse(EXIT_ERROR, '解锁失败:' . $e->getMessage()); } @@ -437,197 +435,4 @@ class Receiver_customers_model extends HD_Model return new MyResponse(EXIT_ERROR, $e->getMessage()); } } - - /** - * 分佣 - * @param $cluesId 线索id - * @param $bizId 门店id - * @return MyResponse - */ - public function Commissions($cluesId, $bizId) - { - $this->load->helper('string'); - $this->load->model('biz/biz_account_model', 'account_model'); - $this->load->model('biz/biz_accountLog_model', 'accountlog_model'); - $this->load->library('bizAccount'); - $this->load->model('receiver/receiver_clues_model'); - $this->load->model('agent/pingan/pingan_users_model'); - $this->load->model('agent/organization/organization_cmmssn_model', 'mdOrganizationCmmssn'); - $this->load->model('agent/organization/organization_model'); - $this->load->model('agent/auto_product_model'); - $this->load->model('agent/pingan/pingan_users_cmmssn_model'); - $this->pingan_users_model->set_db('agentdb'); - $this->mdOrganizationCmmssn->set_db('agentdb'); - $this->organization_model->set_db('agentdb'); - $this->auto_product_model->set_db('agentdb'); - $this->pingan_users_cmmssn_model->set_db('agentdb'); - $log_path = 'commissions.log'; - $log_dir = 'clues'; - try { - debug_log("开始分佣:线索id:{$cluesId}_门店id:{$bizId}", $log_path, $log_dir); - $clues = $this->receiver_clues_model->get(['id' => $cluesId, 'app_id' => Receiver_clues_model::APP_ID_ACTIVITY]); - if (!$clues) { - throw new Exception("线索不存在"); - } - if (!$clues['out_id']) { - throw new Exception("报名来源不存在"); - } - if (!$clues['pingan_user_id']) { - debug_log("结束分佣:线索不需要分佣", $log_path, $log_dir); - return new MyResponse(EXIT_SUCCESS, '保存成功'); - } - - $pinanUser = $this->pingan_users_model->get(['id' => $clues['pingan_user_id']]); - if (!$pinanUser['id']) { - throw new Exception("线索不存在绑定用户关系"); - } - //获取分佣配置 - $cmmssn = $this->mdOrganizationCmmssn->get(['teamId' => $pinanUser['orgTeamId'], 'status' => 0]); - if (!$cmmssn) { - throw new Exception("分佣配置不存在"); - } - //团队设置分佣等级 - $level = $this->organization_model->getTeamLevel($pinanUser['orgTeamId']); - $brokerage1 = $brokerage2 = $brokerage3 = $brokerage4 = 0; - $sourceId = 0; - if ($clues['cf2_id'] == Receiver_clues_model::CF_ID2_PRODUCT) { //产品来源 - $product = $this->auto_product_model->get(['id' => $clues['out_id']]); - if ($product['cluesCommission'] <= 0) { - debug_log("结束分佣:产品未配置线索总用金额", $log_path, $log_dir); - return new MyResponse(EXIT_SUCCESS, '保存成功'); - } - $brokerage1 = $product['cluesCommission'] * ($cmmssn['cluesLevel1'] / 100) ?: 0; - $brokerage2 = $product['cluesCommission'] * ($cmmssn['cluesLevel2'] / 100) ?: 0; - $brokerage3 = $product['cluesCommission'] * ($cmmssn['cluesLevel3'] / 100) ?: 0; - $brokerage4 = $product['cluesCommission'] * ($cmmssn['cluesLevel4'] / 100) ?: 0; - $sourceId = $product['id'] ?: 0; - } - debug_log('分佣金额:' . json_encode([$brokerage1, $brokerage2, $brokerage3, $brokerage4]), $log_path, $log_dir); - $cfId = $clues['id']; - $bizMoney = 0; //商家扣除金额 - $add_data = []; - if ($brokerage1 && $clues['area_id']) { //一级佣金 - $add_data[] = [ - 'cfId' => $cfId, - 'sourceId' => $sourceId, - 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, - 'money' => $brokerage1, - 'pinganUserId' => $clues['area_id'], - 'teamId' => 0, - 'depId' => 0, - 'areaId' => $clues['area_id'], - 'createTime' => date('Y-m-d H:i:s'), - 'bizId' => $bizId - ]; - $bizMoney += $brokerage1; - } - if ($brokerage2 && $clues['dep_id']) { //二级佣金 - $add_data[] = [ - 'cfId' => $cfId, - 'sourceId' => $sourceId, - 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, - 'money' => $brokerage2, - 'pinganUserId' => $clues['dep_id'], - 'teamId' => 0, - 'depId' => $clues['dep_id'], - 'areaId' => $clues['area_id'] ?: 0, - 'createTime' => date('Y-m-d H:i:s'), - 'bizId' => $bizId - ]; - $bizMoney += $brokerage2; - } - if ($level >= 4) { //4级 - if ($brokerage3 && $clues['team_id']) { - $add_data[] = [ - 'cfId' => $cfId, - 'sourceId' => $sourceId, - 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, - 'money' => $brokerage3, - 'pinganUserId' => $clues['team_id'], - 'teamId' => $clues['team_id'], - 'depId' => $clues['dep_id'], - 'areaId' => $clues['area_id'] ?: 0, - 'createTime' => date('Y-m-d H:i:s'), - 'bizId' => $bizId - ]; - $bizMoney += $brokerage3; - } - if ($brokerage4 && $clues['pingan_user_id']) { - $add_data[] = [ - 'cfId' => $cfId, - 'sourceId' => $sourceId, - 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_OWN, - 'money' => $brokerage4, - 'pinganUserId' => $clues['pingan_user_id'], - 'teamId' => $clues['team_id'], - 'depId' => $clues['dep_id'], - 'areaId' => $clues['area_id'] ?: 0, - 'createTime' => date('Y-m-d H:i:s'), - 'bizId' => $bizId - ]; - $bizMoney += $brokerage4; - } - } else { //三级 - if ($brokerage3 && $clues['pingan_user_id']) { - $add_data[] = [ - 'cfId' => $cfId, - 'sourceId' => $sourceId, - 'cfType' => Pingan_users_cmmssn_model::CF_TYPE_CLUES_TEAM, - 'money' => $brokerage3, - 'pinganUserId' => $clues['team_id'], - 'teamId' => 0, - 'depId' => $clues['dep_id'], - 'areaId' => $clues['area_id'] ?: 0, - 'createTime' => date('Y-m-d H:i:s'), - 'bizId' => $bizId - ]; - $bizMoney += $brokerage3; - } - } - $bizAccount = new BizAccount(); - $account = $bizAccount->getAccountBizId($bizId, true); - $leftMoney = $account['money_left']; - if ($leftMoney < $bizMoney) { - throw new Exception("余额不足"); - } - if (count($add_data)) { - $result = $this->pingan_users_cmmssn_model->add_batch($add_data); - if (!$result) { - throw new Exception("保存失败"); - } - $upData = [ - "money_left = money_left-$bizMoney" => null - ]; - $where = [ - "money_left >= $bizMoney" => null - ]; - $upAccount = $this->account_model->update($upData, $where); - if (!(!is_bool($upAccount) && $upAccount)) { - throw new Exception('余额不足', 0); - } - $ck = md5(time() . random_string() . $bizId); - $logData = [ - 'account_id' => $account['id'], - 'trade_type' => BizAccount::TRADE_TYPE_USE, - 'money_type' => BizAccount::MONEY_TYPE_CLUES, - 'money_out' => $bizMoney, - 'money_left' => $leftMoney, - 'ck' => $ck, - 'descrip' => '线索分佣', - 'c_time' => time(), - 'jsondata' => json_encode(['clues_id' => $cluesId]), - ]; - $ret = $this->accountlog_model->add($logData); - if (!$ret) { - throw new Exception('写入交易日志失败', 0); - } - debug_log("商家扣除金额:{$bizMoney}", $log_path, $log_dir); - } - debug_log('分佣结束', $log_path, $log_dir); - return new MyResponse(EXIT_SUCCESS, '保存成功'); - } catch (Exception $e) { - debug_log($e->getMessage(), $log_path, $log_dir); - return new MyResponse(EXIT_ERROR, '分佣失败:' . $e->getMessage()); - } - } }