1
0
forked from erp-dev/erp

feat: correct first

This commit is contained in:
2026-05-19 23:41:34 +08:00
parent f409f2e6ee
commit b97e86257e
25 changed files with 3885 additions and 25 deletions

View File

@@ -0,0 +1,64 @@
from django.core.management.base import BaseCommand, CommandError
from basic_info import models as basic_models
from business.external_finance_sync import sync_customer_finance
from django.conf import settings
class Command(BaseCommand):
help = '按指定客户名从 HaoBuYe 外部财务接口同步收款/退款到 ReceiptOrder'
def add_arguments(self, parser):
parser.add_argument('customer_name', type=str, help='外部客户名称(精确匹配)')
parser.add_argument('--operator-id', type=int, default=None, help='本地经办人 Employee.id')
parser.add_argument(
'--allow-create-customer',
action='store_true',
default=False,
help='当本地客户不存在时自动创建',
)
parser.add_argument(
'--dry-run',
action='store_true',
default=False,
help='仅拉取和校验,不实际写入',
)
parser.add_argument(
'--force-update',
action='store_true',
default=False,
help='当已有记录与外部数据不一致时,强制用外部数据覆盖本地记录',
)
parser.add_argument(
'--progress-every',
type=int,
default=200,
help='长任务进度输出步长,默认每 200 条输出一次',
)
def handle(self, *args, **options):
customer_name = str(options['customer_name'] or '').strip()
operator_id = options.get('operator_id') or getattr(settings, 'HAOBUYE_FINANCE_SYNC_OPERATOR_ID', 0)
if not operator_id:
raise CommandError('必须提供 --operator-id或配置 HAOBUYE_FINANCE_SYNC_OPERATOR_ID')
try:
operator = basic_models.Employee.objects.select_related('merchant').get(id=operator_id)
except basic_models.Employee.DoesNotExist as exc:
raise CommandError(f'经办人不存在: {operator_id}') from exc
try:
self.stdout.write(f'[sync] 开始处理客户: {customer_name}')
payload = sync_customer_finance(
customer_name=customer_name,
operator=operator,
allow_create_customer=options['allow_create_customer'],
dry_run=bool(options['dry_run']),
force_update=bool(options['force_update']),
progress_callback=lambda message: self.stdout.write(f'[sync] {message}'),
progress_every=max(1, int(options.get('progress_every') or 200)),
)
except Exception as exc:
raise CommandError(str(exc)) from exc
self.stdout.write(self.style.SUCCESS(str(payload)))