async def registerUser(ns): """ 用户注册 """ db = DBPools() async with db.sqlorContext('kboss') as sor: if ns: if ns.get('username'): userns = {'username': ns['username']} isuser = await sor.R('users', userns) if len(isuser) >= 1: return {'status': False, 'msg': '用户名已注册'} if ns.get('email'): useremai = {'email': ns['email']} isuser = await sor.R('users', useremai) if len(isuser) >= 1: return {'status': False, 'msg': '该邮箱已注册'} usermobile = {'mobile':ns['mobile']} isuser = await sor.R('users', usermobile) if len(isuser) >= 1: return {'status': False, 'msg': '该手机号已注册'} # 用户名没有 则用手机号作为用户名 if not ns.get('username'): ns['username'] = ns['mobile'] if ns.get('password'): if len(ns.get('password')) < 6: return {'status': False, 'msg': '密码必须6位数以上'} if not ns.get('codeid'): return {'status': False, 'msg': '验证码ID不能为空'} if ns.get('codeid'): code = await sor.R('validatecode', {'id': ns.get('codeid'), 'vcode': ns.get('vcode')}) # 验证码五分钟内才有效 create_at是字符串 格式是"2025-11-05 16:00:19" if code: create_at = code[0]['create_at'] now = datetime.datetime.now() create_at_dt = datetime.datetime.strptime(create_at, "%Y-%m-%d %H:%M:%S") if (now - create_at_dt).seconds > 500: return {'status': False, 'msg': '验证码过期'} else: return {'status': False, 'msg': '验证码不正确'} #通过邀请码注册 if ns.get('invitecode'): invitecodens = {} invitecodens['invitecode'] = ns['invitecode'] reacss = await sor.R('invitecode', invitecodens) if len(reacss) >= 1: date = await get_business_date(sor=None) if reacss[0]['expire_date'] < date: return {'status': False, 'msg': '邀请码过期'} try: ns['id'] = uuid() # ns['id'] = UUID() orgid = ns['id'] ns['contactor_phone'] = ns.get('mobile') usercode = await sor.R('users', {'id': reacss[0]['iusserid'], 'del_flg': '0'}) # 通过域名注册 if ns.get('domain_name'): reseller = await sor.R('reseller', {'domain_name': ns.get('domain_name')}) if len(reseller) >= 1: org = await sor.R('organization', {'id': reseller[0]['orgid'], 'del_flg': '0'}) ns['parentid'] = org[0]['id'] else: ns['parentid'] = usercode[0]['orgid'] else: ns['parentid'] = usercode[0]['orgid'] await sor.C('organization', ns) ns['id'] = uuid() # ns['id'] = UUID() userid = ns['id'] ns['orgid'] = orgid ns['password'] = password_encode(ns['password']) await sor.C('users', ns) listrole = ['管理员', '客户'] for i in listrole: role = await sor.R('role', {'role': i, 'org_type': ns['org_type']}) await sor.C('userrole', {'id': uuid(), 'userid': userid, 'roleid': role[0]['id']}) ns['invite_code'] = ns['invitecode'] ns['customerid'] = orgid ns['id'] = uuid() # ns['id'] = UUID() ns['salemanid'] = reacss[0]['iusserid'] await sor.C('customer', ns) promoted_cutomerns = {} promoted_cutomerns['id'] = uuid() # promoted_cutomerns['id'] = UUID() promoted_cutomerns['inviteid'] = reacss[0]['id'] promoted_cutomerns['customer'] = orgid promoted_cutomerns['join_date'] = datetime.datetime.now() await sor.C('promoted_cutomer', promoted_cutomerns) promote_discount = await sor.R('promote_discount', {'promotingid': reacss[0]['promotingid']}) iusseriduser = await sor.R('users', {'id': reacss[0]['iusserid']}) dictns = {} dictns['id'] = uuid() dictns['offer_orgid'] = iusseriduser[0]['orgid'] dictns['bid_orgid'] = orgid dictns['salemode'] = '0' dictns['start_date'] = datetime.datetime.now() dictns['end_date'] = '9999-12-31' await sor.C('saleprotocol', dictns) for i in promote_discount: products = await sor.R('product', {'id': i['productid']}) product_salemode = {} product_salemode['id'] = uuid() product_salemode['protocolid'] = dictns['id'] product_salemode['providerid'] = products[0]['providerid'] product_salemode['productid'] = i['productid'] product_salemode['discount'] = i['discount'] await sor.C('product_salemode', product_salemode) await openCustomerAccounts(sor, usercode[0]['orgid'], orgid) return {'status': True, 'msg': '邀请码注册成功'} except Exception as error: raise error else: return {'status': False, 'msg': '邀请码不正确'} else: try: # 用户orgid ns['id'] = uuid() org_id = ns['id'] ns['contactor_phone'] = ns.get('mobile') # 通过域名注册 if ns.get('domain_name'): # 通过域名查找分销商信息 reseller = await sor.R('reseller', {'domain_name': ns.get('domain_name')}) if len(reseller) >= 1: # 分销商机构ID 即orgid org = await sor.R('organization', {'id': reseller[0]['orgid'], 'del_flg': '0'}) else: # 分销商不存在 则查找业主机构ID org = await sor.R('organization', {'org_type': '0', 'del_flg': '0'}) else: # 没有通过域名 则默认是获取业主机构ID org = await sor.R('organization', {'org_type': '0', 'del_flg': '0'}) # 获取所在机构父级ID ns['parentid'] = org[0]['id'] # 新增用户机构信息 await sor.C('organization', ns) # 生成用户userid ns['id'] = uuid() userid = ns['id'] # 加密用户密码 if ns.get('password'): ns['password'] = password_encode(ns['password']) ns['orgid'] = org_id # 新增用户信息 await sor.C('users', ns) # 新增用户角色信息 listrole = ['管理员', '客户'] for i in listrole: role = await sor.R('role', {'role': i, 'org_type': ns['org_type']}) await sor.C('userrole', {'id': uuid(), 'userid': userid, 'roleid': role[0]['id']}) # 新增客户信息并使用openCustomerAccounts为客户开账 ns['id'] = uuid() ns['customerid'] = org_id await sor.C('customer', ns) await openCustomerAccounts(sor, org[0]['id'], org_id) return {'status': True, 'msg': '注册成功'} except Exception as error: # raise error return {'status': False, 'msg': '注册失败, %s' % str(error)} ret = await registerUser(params_kw) return ret