Пример #1
0
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()
Пример #2
0
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':[]
                }
Пример #3
0
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!')
Пример #4
0
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,
                }
Пример #5
0
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,
                }