修复了一些

This commit is contained in:
2026-06-18 18:02:45 +08:00
parent e67bc17fa2
commit 53049d1588
20 changed files with 3671 additions and 2541 deletions

View File

@@ -3,7 +3,7 @@ import json
import logging
import requests
from django.conf import settings
from orders.models import Dingdan, DingdanPingtai, DingdanShangjia
from orders.models import Order, PlatformOrderExt, MerchantOrderExt
from users.models import UserDashou, UserBoss, UserShangjia
from gvsdsdk.models import User
@@ -99,12 +99,12 @@ def _send_group_message(appkey, secret, group_id, sender_id, sender_name, sender
# ========== 核心入口 ==========
def establish_order_chat(dingdan_id):
try:
order = Dingdan.objects.select_related('pingtai_kuozhan', 'shangjia_kuozhan').get(dingdan_id=dingdan_id)
except Dingdan.DoesNotExist:
order = Order.objects.select_related('pingtai_kuozhan', 'shangjia_kuozhan').get(OrderID=dingdan_id)
except Order.DoesNotExist:
logger.error(f"订单 {dingdan_id} 不存在")
return False
dashou_uid = order.jiedan_dashou_id
dashou_uid = order.PlayerID
dashou_goeasy_id = f"Ds{dashou_uid}"
dashou_nickname = f'打手{dashou_uid[:6]}'
dashou_avatar_relative = ''
@@ -129,9 +129,9 @@ def establish_order_chat(dingdan_id):
# ========== 普通订单 / 我方派单 ==========
def _handle_local_order(order, dashou_goeasy_id, dashou_name, dashou_avatar, appkey, secret):
group_id = f"group_{order.dingdan_id}"
group_name = (order.jieshao[:20] + '') if order.jieshao and len(order.jieshao) > 20 else (order.jieshao or f"订单{order.dingdan_id}")
group_avatar = _full_local_avatar(order.tupian) if order.tupian else _full_local_avatar('')
group_id = f"group_{order.OrderID}"
group_name = (order.Description[:20] + '') if order.Description and len(order.Description) > 20 else (order.Description or f"订单{order.OrderID}")
group_avatar = _full_local_avatar(order.ImageURL) if order.ImageURL else _full_local_avatar('')
partner_goeasy_id, partner_name, partner_avatar = _get_local_partner_info(order)
if not partner_goeasy_id:
@@ -142,27 +142,27 @@ def _handle_local_order(order, dashou_goeasy_id, dashou_name, dashou_avatar, app
return False
# 1. 打手发送初始化消息
init_msg_text = f"订单已接单,内容:{order.jieshao},备注:{order.beizhu}游戏ID{order.nicheng}"
init_msg_text = f"订单已接单,内容:{order.Description},备注:{order.Remark}游戏ID{order.Nickname}"
success1 = _send_group_message(
appkey, secret, group_id, dashou_goeasy_id, dashou_name, group_avatar,
init_msg_text, None, group_name=group_name, order_id=order.dingdan_id
init_msg_text, None, group_name=group_name, order_id=order.OrderID
)
# 2. 【新增】派单方也发一条消息,确保他也能看到群聊
partner_msg = f"订单已确认,请开始服务。"
success2 = _send_group_message(
appkey, secret, group_id, partner_goeasy_id, partner_name, partner_avatar,
partner_msg, None, group_name=group_name, order_id=order.dingdan_id
partner_msg, None, group_name=group_name, order_id=order.OrderID
)
return success1 and success2
def _get_local_partner_info(order):
"""本地订单下单方:老板或商家"""
if order.fadan_pingtai == 1: # 老板
if order.Platform == 1: # 老板
try:
ext = order.pingtai_kuozhan
laoban_id = ext.laoban_id
laoban_id = ext.BossID
avatar_full = _full_local_avatar('')
nickname = f'老板{laoban_id[:6]}'
try:
@@ -177,11 +177,11 @@ def _get_local_partner_info(order):
except Exception as e:
logger.error(f"获取老板信息失败: {e}")
return None, None, None
elif order.fadan_pingtai == 2: # 商家
elif order.Platform == 2: # 商家
try:
ext = order.shangjia_kuozhan
shangjia_id = ext.shangjia_id
nickname = ext.sjnicheng or f'商家{shangjia_id[:6]}'
shangjia_id = ext.MerchantID
nickname = ext.MerchantNickname or f'商家{shangjia_id[:6]}'
avatar_full = _full_local_avatar('')
try:
sj_user = User.objects.get(UserUID=shangjia_id)

View File

@@ -1,5 +1,5 @@
# utils/fadan_utils.py
from orders.models import Fadan
from orders.models import Penalty
import logging
logger = logging.getLogger('xiaochengxu')
@@ -20,10 +20,10 @@ def check_fadan_qiangdan_eligible(yonghuid: str, action_type: int) -> tuple:
try:
if action_type == 1:
# 抢单:仅当存在“影响抢单”且“未解决”的罚单时拦截(待缴纳或申诉中)
blocked = Fadan.objects.filter(
beichufa_id=yonghuid,
yingxiang_qiangdan=1,
zhuangtai__in=[1, 3] # 1=待缴纳, 3=申诉中
blocked = Penalty.objects.filter(
PenalizedUserID=yonghuid,
AffectsGrabbing=1,
Status__in=[1, 3] # 1=待缴纳, 3=申诉中
).exists()
if blocked:
logger.info(f"用户 {yonghuid} 抢单被拦截:存在未解决的影响抢单罚单")
@@ -32,9 +32,9 @@ def check_fadan_qiangdan_eligible(yonghuid: str, action_type: int) -> tuple:
elif action_type == 2:
# 提现:只要存在任意未解决的罚单(待缴纳/申诉中),不论是否影响抢单,一律禁止提现
blocked = Fadan.objects.filter(
beichufa_id=yonghuid,
zhuangtai__in=[1, 3] # 1=待缴纳, 3=申诉中
blocked = Penalty.objects.filter(
PenalizedUserID=yonghuid,
Status__in=[1, 3] # 1=待缴纳, 3=申诉中
).exists()
if blocked:
logger.info(f"用户 {yonghuid} 提现被拦截:存在未解决的罚单")
@@ -57,7 +57,7 @@ def check_fadan_qiangdan_eligible(yonghuid: str, action_type: int) -> tuple:
import logging
from django.db import transaction
from decimal import Decimal
from orders.models import Fadan, FadanFenhong, FadanFenhongLilv
from orders.models import Penalty, PenaltyBonus, PenaltyBonusRate
logger = logging.getLogger('xiaochengxu')
@@ -69,30 +69,30 @@ def fadan_fenhong(fadan_id):
try:
# 1. 查询罚单
try:
fadan = Fadan.objects.get(id=fadan_id)
except Fadan.DoesNotExist:
fadan = Penalty.objects.get(id=fadan_id)
except Penalty.DoesNotExist:
logger.warning(f"罚单 {fadan_id} 不存在,分红跳过")
return
if fadan.zhuangtai != 2:
if fadan.Status != 2:
logger.info(f"罚单 {fadan_id} 状态非已缴纳,不分红")
return
fenhongzhe_id = fadan.shenqing_chufa or ''
shenfen_in_fadan = fadan.shenqingren_shenfen # 罚单中的申请人身份
jine = fadan.fakuanjine
fenhongzhe_id = fadan.ApplicantID or ''
shenfen_in_fadan = fadan.ApplicantIdentity # 罚单中的申请人身份
jine = fadan.FineAmount
if not fenhongzhe_id or jine <= 0:
logger.info(f"罚单 {fadan_id} 缺少申请处罚人或金额为0不分红")
return
# 2. 直接用罚单身份的原始值查询费率(费率表 shenfen 与之含义一致)
rate_record = FadanFenhongLilv.objects.filter(shenfen=shenfen_in_fadan).first()
if not rate_record or rate_record.lilv <= 0:
rate_record = PenaltyBonusRate.objects.filter(Identity=shenfen_in_fadan).first()
if not rate_record or rate_record.Rate <= 0:
logger.info(f"身份 {shenfen_in_fadan} 无有效分红费率,不分红")
return
rate = rate_record.lilv
rate = rate_record.Rate
# 3. 计算分红金额
amount = (jine * rate).quantize(Decimal('0.01'))
@@ -115,25 +115,25 @@ def fadan_fenhong(fadan_id):
# 5. 事务累加分红记录(同一用户+身份只保留一条记录)
with transaction.atomic():
record = FadanFenhong.objects.select_for_update().filter(
fenhongzhe_id=fenhongzhe_id,
shenfen=shenfen_in_fenhong # 使用映射后的身份值
record = PenaltyBonus.objects.select_for_update().filter(
BeneficiaryID=fenhongzhe_id,
Identity=shenfen_in_fenhong # 使用映射后的身份值
).first()
if record:
record.zonge += amount
record.ketixian_fenhong += amount
record.fenhong_cishu += 1
record.yingde_lilv = rate
record.TotalAmount += amount
record.WithdrawableAmount += amount
record.BonusCount += 1
record.IndividualRate = rate
record.save()
else:
FadanFenhong.objects.create(
fenhongzhe_id=fenhongzhe_id,
shenfen=shenfen_in_fenhong,
zonge=amount,
ketixian_fenhong=amount,
fenhong_cishu=1,
yingde_lilv=rate,
PenaltyBonus.objects.create(
BeneficiaryID=fenhongzhe_id,
Identity=shenfen_in_fenhong,
TotalAmount=amount,
WithdrawableAmount=amount,
BonusCount=1,
IndividualRate=rate,
)
logger.info(f"罚单 {fadan_id} 分红完成:用户 {fenhongzhe_id} 身份 {shenfen_in_fenhong} 金额 {amount}")