修复了一些
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user