def sms_modem_send_sms(outbox_message, message, party): number_of_message = (len(message.content) + (SHORT_LINK_LENGTH if message.is_apply_tips else 0) + BASIC_MESSAGE_LENGTH - 1) / BASIC_MESSAGE_LENGTH userprofile = party.creator.get_profile() try: phone_list = outbox_message.address.split(',') #排除创建者的手机号 try: u_index = phone_list.index(userprofile.phone) phone_list.pop(u_index) except Excepiton: pass if message.is_apply_tips: for phone in phone_list: content = message.content enroll_link = DOMAIN_NAME + '/parties/%d/enroll/?key=%s' % (party.id, hashlib.md5('%d:%s' % (party.id, phone)).hexdigest()) short_link = transfer_to_shortlink(enroll_link) content = u'【爱热闹】%s 快来报名:%s' % (content, short_link) data = {'Mobile':regPhoneNum(phone), 'Content':content.encode('gbk')} #短信扣除 userprofile.used_sms_count = userprofile.used_sms_count + number_of_message userprofile.available_sms_count = userprofile.available_sms_count - number_of_message userprofile.save() try: res = _post_api_request_sendSMS(data) if res != '1': logger.error(res) except: userprofile.used_sms_count = userprofile.used_sms_count - number_of_message userprofile.available_sms_count = userprofile.available_sms_count + number_of_message userprofile.save() logger.info('return avalibale sms count ,user:'******'number:' + str(number_of_message)) logger.exception('send sms error!') else: for phone in phone_list: content = u'【爱热闹】' + message.content data = {'Mobile':regPhoneNum(phone), 'Content':content.encode('gbk')} #短信扣除 userprofile.used_sms_count = userprofile.used_sms_count + number_of_message userprofile.available_sms_count = userprofile.available_sms_count - number_of_message userprofile.save() try: res = _post_api_request_sendSMS(data) if res != '1': logger.error(res) except: userprofile.used_sms_count = userprofile.used_sms_count - number_of_message userprofile.available_sms_count = userprofile.available_sms_count + number_of_message userprofile.save() logger.info('return avalibale sms count ,user:'******'number:' + str(number_of_message)) logger.exception('send sms error!') except: logger.exception('send sms error!') finally: outbox_message.delete()
def PartyList(request, uid, start_id = 0): user = User.objects.get(pk = uid) PartyObjectArray = [] if str(start_id) == "0": partylist = Party.objects.filter(creator = user).order_by('-created_time')[:PARTY_COUNT_PER_PAGE] else: partylist = Party.objects.filter(creator = user, pk__lt = start_id).order_by('-created_time')[:PARTY_COUNT_PER_PAGE] # GMT_FORMAT = '%Y-%m-%d %H:%M:%S' for party in partylist: partyObject = {} partyObject['description'] = party.description partyObject['partyId'] = party.id partyObject['shortURL'] = transfer_to_shortlink(DOMAIN_NAME + reverse('enroll', args = [party.id])) partyObject['type'] = party.invite_type #各个活动的人数情况 party_clients = PartiesClients.objects.select_related('client').filter(party = party) client_counts = { 'appliedClientcount': 0, 'newAppliedClientcount':0, 'donothingClientcount':0, 'refusedClientcount':0, 'newRefusedClientcount':0, } for party_client in party_clients: if party_client.apply_status == 'apply': client_counts['appliedClientcount'] += 1 if party_client.apply_status == 'apply' and party_client.is_check == False: client_counts['newAppliedClientcount'] += 1 if party_client.apply_status == 'noanswer': client_counts['donothingClientcount'] += 1 if party_client.apply_status == 'reject': client_counts['refusedClientcount'] += 1 if party_client.apply_status == 'reject' and party_client.is_check == False: client_counts['newRefusedClientcount'] += 1 partyObject['clientsData'] = client_counts PartyObjectArray.append(partyObject) party_list = Party.objects.filter(creator = user) unreadCount = PartiesClients.objects.filter(party__in = party_list, is_check = False).count() if partylist: return { 'lastID':partylist[partylist.count() - 1].id, 'partyList':PartyObjectArray, 'unreadCount':unreadCount, } else: return { 'lastID':start_id, 'unreadCount':unreadCount, 'partyList':[] }
def send_apply_confirm_sms(party_client): party = party_client.party client = party_client.client enroll_link = DOMAIN_NAME + '/parties/%d/enroll/?key=%s' % (party.id, hashlib.md5('%d:%s' % (party.id, client.phone)).hexdigest()) short_link = transfer_to_shortlink(enroll_link) content = u'【爱热闹】' + client.name=='' and client.phone or client.name + u', 您报名参加了' + party.creator.username + u'发布的活动,点击链接查看该活动:' content = '%s%s' % (content, short_link) phone = client.phone data = {'Mobile':regPhoneNum(phone) , 'Content':content.encode('gbk')} try: res = _post_api_request_sendSMS(data) if res != '1': logger.error(res) except: logger.exception('send send_apply_confirm_sms error!')
def resendMsg(request): if request.method == "POST": receivers = eval(request.POST['receivers']) content = request.POST['content'] # subject = request.POST['subject'] # _isapplytips = request.POST['_isapplytips'] == '1' _issendbyself = request.POST['_issendbyself'] == '1' # msgType = request.POST['msgType'] partyID = request.POST['partyID'] uID = request.POST['uID'] # addressType = request.POST['addressType'] user = User.objects.get(pk = uID) subject = '' _isapplytips = True msgType = "SMS" try: party = Party.objects.get(pk = partyID, creator = user) except Exception: raise myException(u'该会议会议已被删除') # 检测剩余短信余额是否足够 if _issendbyself: number_of_message = (len(content) + SHORT_LINK_LENGTH + BASIC_MESSAGE_LENGTH - 1) / BASIC_MESSAGE_LENGTH client_phone_list_len = len(receivers) userprofile = user.get_profile() sms_count = userprofile.available_sms_count will_send_message_num = client_phone_list_len * number_of_message #可能发送的从短信条数 if will_send_message_num > sms_count:#短信人数*短信数目大于可发送的短信数目 raise myException(ERROR_SEND_MSG_NO_REMAINING, status = ERROR_STATUS_SEND_MSG_NO_REMAINING, data = {'remaining':sms_count}) with transaction.commit_on_success(): addressArray = [] for i in range(len(receivers)): receiver = receivers[i] if msgType == 'SMS': client_list = Client.objects.filter(phone = receiver['cValue'], creator = user ) if client_list: client = client_list[0] if client.name == '': client.name = receiver['cName'] client.save() else: client = Client.objects.create(phone = receiver['cValue'], name = receiver['cName'], creator = user, invite_type = 'phone' ) else: client_list = Client.objects.filter(email = receiver['cValue'], creator = user ) if client_list: client = client_list[0] if client.name == '': client.name = receiver['cName'] client.save() else: client = Client.objects.create(email = receiver['cValue'], name = receiver['cName'], creator = user, invite_type = 'phone' ) PartiesClients.objects.get_or_create( party = party, client = client, defaults = { "apply_status":'noanswer' } ) addressArray.append(receiver['cValue']) if msgType == 'SMS': msg = SMSMessage.objects.get_or_create(party = party)[0] msg.content = content msg.is_apply_tips = _isapplytips msg.is_send_by_self = _issendbyself msg.save() else: msg = EmailMessage.objects.get_or_create(party = party)[0] msg.subject = subject msg.content = content msg.is_apply_tips = _isapplytips msg.is_send_by_self = _issendbyself msg.save() if not msg.is_send_by_self: with transaction.commit_on_success(): if addressArray: addressString = ','.join(addressArray) Outbox.objects.create(address = addressString, base_message = msg) return { 'partyId':party.id, 'applyURL':transfer_to_shortlink(DOMAIN_NAME + reverse('enroll', args = [party.id])), 'sms_count_remaining':user.userprofile.available_sms_count, }
def createParty(request): if request.method == 'POST' : receivers = eval(request.POST['receivers']) content = request.POST['content'] # subject = request.POST['subject'] # _isapplytips = request.POST['_isapplytips'] == '1' _issendbyself = request.POST['_issendbyself'] == '1' # msgType = request.POST['msgType'] # starttime = request.POST['starttime'] # location = request.POST['location'] # description = request.POST['description'] # peopleMaximum = request.POST['peopleMaximum'] uID = request.POST['uID'] # addressType = request.POST['addressType'] user = User.objects.get(pk = uID) startdate = None subject = '' _isapplytips = True msgType = "SMS" starttime = '' location = "" description = content peopleMaximum = 0 try: startdate = datetime.datetime.strptime(re_a.search(starttime).group(), '%Y-%m-%d %H:%M:%S').date() except Exception: startdate = None try: starttime = datetime.datetime.strptime(re_a.search(starttime).group(), '%Y-%m-%d %H:%M:%S').time() except Exception: starttime = None # if len(location) > 256: # raise myException(ERROR_CREATEPARTY_LONG_LOCATION) # 检测剩余短信余额是否足够————当条件_issendbyself==True时 if _issendbyself: number_of_message = (len(content) + SHORT_LINK_LENGTH + BASIC_MESSAGE_LENGTH - 1) / BASIC_MESSAGE_LENGTH client_phone_list_len = len(receivers) userprofile = user.get_profile() sms_count = userprofile.available_sms_count will_send_message_num = client_phone_list_len * number_of_message #可能发送的从短信条数 if will_send_message_num > sms_count:#短信人数*短信数目大于可发送的短信数目 raise myException(ERROR_SEND_MSG_NO_REMAINING, status = ERROR_STATUS_SEND_MSG_NO_REMAINING, data = {'remaining':sms_count}) with transaction.commit_on_success(): #创建活动 party = Party.objects.create(start_date = startdate, start_time = starttime, address = location, description = description, creator = user, limit_count = peopleMaximum, invite_type = (msgType == "SMS" and 'phone' or 'email') ) creator_client, is_new = Client.objects.get_or_create(phone = user.userprofile.phone, creator = user) if creator_client.name != user.userprofile.nickname: creator_client.name = user.userprofile.nickname creator_client.save() PartiesClients.objects.create(party = party, client = creator_client, apply_status = u'apply') addressArray = [] for i in range(len(receivers)): receiver = receivers[i] if msgType == 'SMS': # client = Client.objects.get_or_create(phone = receiver['cValue'], # name = receiver['cName'], # creator = user, # )[0] client_list = Client.objects.filter(phone = receiver['cValue'], creator = user ).exclude(name = '') if client_list: client = client_list[0] else: empty_name_client_list = Client.objects.filter(phone = receiver['cValue'], name = '', creator = user ) if empty_name_client_list: client = empty_name_client_list[0] client.name = receiver['cName'] client.save() else: client = Client.objects.create(phone = receiver['cValue'], name = receiver['cName'], creator = user, invite_type = 'phone' ) else: client_list = Client.objects.filter(email = receiver['cValue'], creator = user ).exclude(name = '') if client_list: client = client_list[0] else: empty_name_client_list = Client.objects.filter(email = receiver['cValue'], name = '', creator = user ) if empty_name_client_list: client = empty_name_client_list[0] client.name = receiver['cName'] client.save() else: client = Client.objects.create(email = receiver['cValue'], name = receiver['cName'], creator = user, invite_type = 'phone' ) PartiesClients.objects.create( party = party, client = client, ) addressArray.append(receiver['cValue']) addressString = simplejson.dumps(addressArray) if msgType == 'SMS': msg = SMSMessage.objects.get_or_create(party = party)[0] msg.content = content msg.is_apply_tips = _isapplytips msg.is_send_by_self = _issendbyself msg.save() else: msg = EmailMessage.objects.get_or_create(party = party)[0] msg.subject = subject msg.content = content msg.is_apply_tips = _isapplytips msg.is_send_by_self = _issendbyself msg.save() if not msg.is_send_by_self: with transaction.commit_on_success(): if addressArray: addressString = ','.join(addressArray) Outbox.objects.create(address = addressString, base_message = msg) return { 'partyId':party.id, 'applyURL':transfer_to_shortlink(DOMAIN_NAME + reverse('enroll', args = [party.id])), 'sms_count_remaining':user.userprofile.available_sms_count, }