云
昨天 74b0d9c5ab1dc316b29f8525dcffe45225d4c43c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import sys, json
from pathlib import Path
from datetime import datetime
sys.stdout.reconfigure(encoding='utf-8')
sys.path.insert(0, str(Path(__file__).parent / 'iqc-import-20261012/deps'))
import pymysql
apply = '--apply' in sys.argv
phrase = '未录入实际回款'
with pymysql.connect(host='36.213.150.237', port=10000, user='root', password=sys.stdin.readline().strip(), database='mom-hm', charset='utf8mb4', connect_timeout=15, cursorclass=pymysql.cursors.DictCursor) as conn:
    with conn.cursor() as q:
        q.execute('SELECT DATABASE() db')
        assert q.fetchone()['db'] == 'mom-hm'
        q.execute('SELECT id,remark,update_time FROM crm_receivable_plan WHERE deleted=0 AND remark LIKE %s ORDER BY id' + (' FOR UPDATE' if apply else ''), ('%'+phrase+'%',))
        rows=q.fetchall()
        if not apply and not rows:
            q.execute('SELECT id,remark FROM crm_receivable_plan WHERE deleted=0 ORDER BY id DESC LIMIT 40')
            print(json.dumps({'recentRemarks':q.fetchall()},ensure_ascii=False,default=str))
        print(json.dumps({'count':len(rows),'rows':rows},ensure_ascii=False,default=str))
        if apply:
            out=Path(__file__).parent/'receivable-plan-remark-20261015'
            out.mkdir(exist_ok=True)
            backup=out/('before-'+datetime.now().strftime('%Y%m%d%H%M%S')+'.json')
            backup.write_text(json.dumps(rows,ensure_ascii=False,default=str,indent=2),encoding='utf-8')
            for row in rows:
                text=row['remark']
                for prefix in (';',';',',',','):
                    text=text.replace(prefix+phrase, '')
                text=text.replace(phrase, '').strip()
                q.execute('UPDATE crm_receivable_plan SET remark=%s,update_time=update_time WHERE id=%s AND deleted=0 AND remark=%s', (text,row['id'],row['remark']))
                assert q.rowcount==1
            q.execute('SELECT COUNT(*) n FROM crm_receivable_plan WHERE deleted=0 AND remark LIKE %s', ('%'+phrase+'%',))
            assert q.fetchone()['n']==0
            conn.commit()
            print(json.dumps({'updated':len(rows),'backup':str(backup)},ensure_ascii=False))