Files
vue-fastapi-admin/app/controllers/action.py
T
2026-06-25 17:41:06 +08:00

110 lines
4.7 KiB
Python

from app.core.crud import CRUDBase
from app.schemas.msg import (
ActionCreate,
ActionUpdate,
)
from app.models.automation import Action, ActionType
from app.models.weixin import WeixinCustomer, CustomerGroup, WeixinGroupChat, WeixinUser
from some_sdk.lintao_sdk.biz.by_order import get_order_relative_user
from some_sdk.services.binder import lintao_client
from app.controllers.weixin.customer import weixin_customer_controller
from datetime import datetime
import logging
logger = logging.getLogger(__name__)
class ActionController(CRUDBase[Action, ActionCreate, ActionUpdate]):
def __init__(self):
super().__init__(model=Action)
async def new_action(self, type: ActionType, user, done=False, **kwargs):
action = ActionCreate(userid=user.userid, username=f'{user.username}({user.english_name})', done=done, type=type, detail=kwargs)
return await self.create(action)
async def check_create_group_action_is_done(self, group_info, shop_name: str = None):
name = group_info.get('name')
chat_id = group_info.get('chat_id')
# 完成建群操作
create_group_action = await self.model.filter(type=ActionType.CREATE_GROUP, done=False, detail__contains={"group_name": name}).order_by('-id').first()
if not create_group_action: return
create_group_action_detail = create_group_action.detail
create_group_action_detail.update({
"chat_id": chat_id,
})
create_group_action.done = True
create_group_action.done_at = datetime.now()
create_group_action.result = group_info
create_group_action.detail = create_group_action_detail
await create_group_action.save()
# 完成建群操作后,将群成员添加到客户群中
weixin_group = await WeixinGroupChat.filter(chat_id=chat_id).first()
if not weixin_group: return
staff = await WeixinUser.filter(userid=create_group_action.userid).first()
external_user_ids = create_group_action.detail.get('external_user_ids') or []
for userid in external_user_ids:
customer = await WeixinCustomer.filter(weixin_id=userid).first()
if not customer: continue
membership = await CustomerGroup.create(
staff_userid=create_group_action.userid,
customer_userid=customer.weixin_id,
group_chatid=chat_id,
staff=staff,
customer=customer,
group=weixin_group,
shop_name=shop_name,
order_id=create_group_action.detail.get('order_id'),
join_time=create_group_action.created_at,
)
logger.info(f'【建群成功】保存客户的群聊 {name}({chat_id}) 信息')
async def check_remark_action_is_done(self):
actions = await self.model.filter(done=False, type=ActionType.WRITE_REMARK)
logger.info(f'检查备注操作是否完成,监控列表中:共有{len(actions)}')
update_list = []
for action in actions:
action_info = action.detail
order_id = action_info.get("order_id")
remark = action_info.get("remark")
if not order_id: continue
done = False
action_result = []
if remark:
async for order in get_order_relative_user(lintao_client, trade_no=order_id):
try:
await weixin_customer_controller.remark_order(order, remark=remark)
if order.get('title'):
logger.info(f'【监控列表中,订单被领单】重新为订单 {order.get("trade_no")} 打上备注 {remark}')
# 未领单的订单,需要添加到监控列表中进行监控,防止被刷掉
done = True
action_result.append({
"trade_no": order.get("trade_no"),
"title": order.get("title"),
"remark": remark,
})
except Exception as e:
logger.exception(f'【监控列表中,订单被领单】重新为订单为订单 {order.get("trade_no")} 打上备注 {remark} 失败,异常: {e}')
if done or not remark:
action.done = True
action.done_at = datetime.now()
action.result = action_result
update_list.append(action)
if update_list:
await self.model.bulk_update(update_list, fields=['done', 'result', 'done_at'])
action_controller = ActionController()