def save(self, *args, **kwargs): if self.orgBD is None: raise InvestError(20071, msg='orgBD can`t be null') self.datasource = self.orgBD.datasource if self.event_date is None: self.event_date = datetime.datetime.now() if self.orgBD and not self.orgBD.is_deleted: self.orgBD.isSolved = True self.orgBD.lastmodifytime = self.lastmodifytime if self.lastmodifytime else datetime.datetime.now( ) self.orgBD.save(update_fields=['isSolved', 'lastmodifytime']) if not self.pk: try: if self.orgBD.bduser: remark = '项目名称:%s \n\r备注信息:%s' % ( self.orgBD.proj.projtitleC if self.orgBD.proj else '', self.comments if self.comments else '') UserRemarks(user=self.orgBD.bduser, remark=remark, createuser=self.createuser, datasource=self.datasource).save() except Exception: logexcption(msg='同步备注到用户失败,OrgBD_id-%s ' % self.orgBD.id) kwargs['automodifytime'] = False return super(OrgBDComments, self).save(*args, **kwargs)
def saveMessage(content, type, title, receiver, sender=None, modeltype=None, sourceid=None): try: data = {} data['content'] = content data['messagetitle'] = title data['type'] = type data['receiver'] = receiver.id data['datasource'] = receiver.datasource_id if modeltype: data['sourcetype'] = modeltype if sourceid: data['sourceid'] = sourceid if sender: data['sender'] = sender.id msg = MsgSerializer(data=data) if msg.is_valid(): msg.save() else: raise InvestError(code=20019) return msg.data except InvestError as err: logexcption() return err.msg except Exception as err: logexcption() return err.message
def prepare_fileContent(self, obj): """obj 是django里的model实例""" filecontent = None if obj.isFile and obj.key: dataroomPath = os.path.join(APILOG_PATH['es_dataroomPDFPath'], 'dataroom_{}'.format(obj.dataroom_id)) file_path = os.path.join(dataroomPath, obj.key) try: if os.path.exists(file_path): filename, type = os.path.splitext(file_path) if type == '.docx': doc = docx.Document(file_path) filecontent = '\n'.join( [paragraph.text for paragraph in doc.paragraphs]) elif type == '.doc': filecontent = subprocess.check_output( ["antiword", file_path]) elif type == '.pdf': filecontent = getPdfWordContent(file_path) elif type in ['.png', '.jpg', '.jpeg']: filecontent = BaiDuAipGetImageWord(file_path) elif type == '.txt': with open(file_path, "r") as f: text = f.read() type = chardet.detect(text) filecontent = text.decode(type["encoding"], 'ignore') except Exception: logexcption(msg='dataroom文件pdf内容提取失败') return filecontent
def executeTask(self, task_qs): for uploadtask in task_qs: uploadtask.status = 2 uploadtask.starttime = datetime.datetime.now() uploadtask.save() try: file_path = os.path.join(APILOG_PATH['uploadFilePath'], uploadtask.key) if os.path.exists(file_path): ret1, info1 = self.qiniuuploadfile(filepath=file_path, bucket_name=uploadtask.bucket, bucket_key=uploadtask.key) uploadtask.success1 = ret1 uploadtask.info1 = info1 if uploadtask.convertToPDF: converfile_path = os.path.join(APILOG_PATH['uploadFilePath'], uploadtask.convertKey) self.convertAndUploadOffice(file_path, converfile_path) if os.path.exists(converfile_path): ret2, info2 = self.qiniuuploadfile(filepath=converfile_path, bucket_name=uploadtask.bucket, bucket_key=uploadtask.convertKey) uploadtask.success2 = ret2 uploadtask.info2 = info2 else: uploadtask.msg = '文件转换格式失败' else: uploadtask.msg = '上传文件不存在' except Exception: logexcption(msg='文件上传七牛服务器失败') uploadtask.msg = traceback.format_exc() uploadtask.status = 3 uploadtask.endtime = datetime.datetime.now() uploadtask.save()
def getAllProjectsNeedToSendMail(): try: proj_qs = project.objects.filter(isSendEmail=True, is_deleted=False) saveEmailGroupSendData(proj_qs) proj_qs.update(**{'isSendEmail': False}) except Exception as err: print err.message logexcption()
def saveCompanySearchName(com_name, searchuser_id): try: data = {'com_name': com_name, 'searchuser_id': searchuser_id} serializer = CompanySearchNameSerializer(data=data) if serializer.is_valid(): serializer.save() except Exception: logexcption()
def saveSendEmailDataToMongo(data): serializer = GroupEmailDataSerializer(data=data) try: if serializer.is_valid(): serializer.save() else: raise InvestError(2001, msg=serializer.error_messages) except Exception: logexcption()
def getAllProjectsNeedToSendMail(): try: proj_qs = project.objects.filter(isSendEmail=True, is_deleted=False, datasource_id=1, projstatus_id=4) saveEmailGroupSendData(proj_qs) proj_qs.update(**{'isSendEmail': False}) except Exception as err: logexcption()
def run(self): if sendSms: try: destination = receiver.mobile projectsign = 'v9pNC4' vars = {'user': receiver.usernameC} res = xsendSms(destination, projectsign, vars) print(res) except Exception: logexcption()
def run(self): types = self.types receiver = self.receiver model = self.model if isinstance(model, dataroom_User_file): if 'email' in types and sendEmail and checkEmailTrue( receiver.email): try: destination = receiver.email if receiver.datasource_id == 3: projectsign = 'yMgMP' elif receiver.datasource_id == 4: projectsign = 'ewq604' elif receiver.datasource_id == 5: projectsign = 'aJbDc1' else: projectsign = 'umZlP3' vars = { 'name': receiver.usernameC, 'projectC': getDataroomTitleWithSuperLink( model.dataroom, 'cn'), 'projectE': getDataroomTitleWithSuperLink( model.dataroom, 'en') } xsendEmail(destination, projectsign, vars) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: # 发送通知以后,将站内信发送给该DataRoom项目的承揽承做PM try: msg_content = '已向用户【%s】发送了项目【%s】的dataroom邮件通知' % ( receiver.usernameC, model.dataroom.proj.projtitleC) msg_title = '发送dataroom邮件通知记录' user_ids = [] for proj_trader in model.dataroom.proj.proj_traders.filter( is_deleted=False): user_ids.append(proj_trader.user.id) if model.dataroom.proj.PM: user_ids.append(model.dataroom.proj.PM.id) msg_receiverusers = MyUser.objects.filter( id__in=user_ids).distinct() for msg_receiver in msg_receiverusers: saveMessage(msg_content, 12, msg_title, msg_receiver, sender, modeltype='dataroomEmailMsg', sourceid=model.id) except Exception: logexcption()
def sendEmailToUser(): mongodatalist = readSendEmailDataFromMongo() for data in mongodatalist: try: userlist = data['users'] projdata = data['proj'] datasource = data['datasource'] for user in userlist: sendProjEmailToUser(projdata, user, datasource) except Exception: logexcption()
def run(self): msgdic = MESSAGE_DICT['orgBdExpire'] if 'email' in types and sendEmail and checkEmailTrue( receiver.email): try: destination = receiver.email projectsign = msgdic['email_sign'] vars = {'html': content} xsendEmail(destination, projectsign, vars) except Exception: logexcption()
def saveChatMessageDataToMongo(data): queryset = IMChatMessages.objects.all() if queryset(msg_id=data['msg_id']).count() > 0: pass else: serializer = IMChatMessagesSerializer(data=data) try: if serializer.is_valid(): serializer.save() else: raise InvestError(2001, msg=serializer.error_messages) except Exception: logexcption()
def downloadChatMessages(): auth = AppClientAuth(org, app, client_id, client_secret) times = datetime.datetime.now() - datetime.timedelta(hours=2 * 1) strtime = times.strftime('%Y%m%d%H') url = 'http://a1.easemob.com/%s/%s/chatmessages/%s' % (org, app, strtime) success, res = get(url, auth) if success: fileurllist = res.get('data') for fileurldic in fileurllist: fileurl = fileurldic.get('url') getmsg(fileurl) else: logexcption(msg=str({'downloadchatmsg': res})) return success, res
def downloadFileToPath(key,bucket,path): try: download_url = getUrlWithBucketAndKey(bucket, key) if download_url is None: raise InvestError(8002, msg='bucket/key error') r = requests.get(download_url) if r.status_code != 200: raise InvestError(8002, msg=repr(r.content)) with open(path, "wb") as code: code.write(r.content) except Exception as err: logexcption(msg=str(err)) return None else: return path
def run(self): types = self.types receiver = self.receiver model = self.model sender = self.sender if isinstance(model, UserRelation): lang = 'cn' username = model.traderuser.usernameC if self.receiver.country: if self.receiver.country.areaCode not in [ '86', u'86', None, '', u'' ]: lang = 'en' username = model.traderuser.usernameE msgdic = MESSAGE_DICT['traderadd'] title = msgdic['title_%s' % lang] content = msgdic['content_%s' % lang] % username messagetype = msgdic['messagetype'] if 'app' in types and sendAppmsg: try: receiver_alias = receiver.id bdage = 1 n_extras = {} pushnotification(content, receiver_alias, bdage, n_extras) except Exception: logexcption() if 'email' in types and sendEmail and checkEmailTrue( receiver.email): try: destination = receiver.email projectsign = 'X6JEv3' vars = { 'nameC': model.traderuser.usernameC, 'nameE': model.traderuser.usernameE } xsendEmail(destination, projectsign, vars) except Exception: logexcption() if 'sms' in types and sendSms: try: destination = receiver.mobile projectsign = 'pT0yA4' vars = {'user': model.traderuser.usernameC} xsendSms(destination, projectsign, vars) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: try: saveMessage(content, messagetype, title, receiver, sender, modeltype='UserRelation', sourceid=model.id) except Exception: logexcption()
def qiniuuploadfile(self, filepath, bucket_name, bucket_key): try: uploading = True retry_times = 1 ret, info = None, None while uploading and retry_times <= 3: retry_times += 1 token = q.upload_token(bucket_name, bucket_key, 3600, policy={}, strict_policy=True) ret, info = put_file(token, bucket_key, filepath, version='v2') if info is not None: if info.status_code == 200: return True, info.text_body return False, info except Exception: logexcption(msg='文件上传七牛服务器失败') return False, traceback.format_exc()
def run(self): for webexuser in webEXUsers: name, email, role, meeting = webexuser.name, webexuser.email, webexuser.meetingRole, webexuser.meeting if sendEmail and checkEmailTrue(email): try: if role == True: projectsign = 'N7ygf2' vars = { 'name': name, 'title': meeting.title, 'data': meeting.agenda, 'time': meeting.startDate.strftime('%Y-%m-%d %H:%M'), 'duration': meeting.duration, 'meetingkey': meeting.meetingKey, 'hostkey': meeting.hostKey, 'password': meeting.password, } else: projectsign = 'Bk4EY4' vars = { 'name': name, 'title': meeting.title, 'data': meeting.agenda, 'time': meeting.startDate.strftime('%Y-%m-%d %H:%M'), 'duration': meeting.duration, 'meetingkey': meeting.meetingKey, 'password': meeting.password, } xsendEmail(email, projectsign, vars) except Exception: logexcption()
def get_openid(code): try: if code: url = 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code' % (WX_APPID, WX_APPSECRET, code) response = requests.get(url).content res = json.loads(response.decode()) openid = res.get('openid') if openid: return openid errcode = res.get('errcode') if errcode == 40163: raise InvestError(2050) logexcption(msg=str(res)) except InvestError: raise InvestError(2050, msg='code失效') except Exception: raise InvestError(2049, msg='获取openid失败') else: return None
def sendEmailToUser(): mongodatalist = readSendEmailDataFromMongo() for data in mongodatalist: try: userlist = data['users'] projdata = data['proj'] datasource = data['datasource'] emailgroupsendlist_qs = emailgroupsendlist.objects.filter( proj=projdata['id']) for user in userlist: try: if emailgroupsendlist_qs.filter(user=user['id']).exists(): pass else: sendProjEmailToUser(projdata, user, datasource) except Exception: logexcption() except Exception: logexcption()
def run(self): types = self.types receiver = self.receiver model = self.model sender = self.sender if isinstance(model, dataroom_User_file): if 'app' in types and sendAppmsg: try: content = 'DataRoom有文件更新,点击查看详情' receiver_alias = receiver.id bdage = 1 n_extras = {} pushnotification(content, receiver_alias, bdage, n_extras) except Exception: logexcption() if 'email' in types and sendEmail and checkEmailTrue( receiver.email): try: destination = receiver.email projectsign = 'umZlP3' vars = { 'projectC': getProjTitleWithSuperLink(model.dataroom.proj), 'projectE': getProjTitleWithSuperLink(model.dataroom.proj, 'en') } xsendEmail(destination, projectsign, vars) except Exception: logexcption() if 'sms' in types and sendSms: try: destination = receiver.mobile projectsign = 'huvrW4' vars = {'project': model.dataroom.proj.projtitleC} xsendSms(destination, projectsign, vars) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: try: content = '您的项目%s,DataRoom有文件更新,请登录后查看' % model.dataroom.proj.projtitleC title = 'DataRoom有文件更新,点击查看详情' messagetype = 7 saveMessage(content, messagetype, title, receiver, sender, modeltype='dataroom_User_file', sourceid=model.id) except Exception: logexcption()
def sendmessage_schedulemsg(model, receiver, types, sender=None): """ :param model: schedule type :param receiver: myuser type :param types: list :param sender: myuser type :return: None """ if checkReceiverToSendMsg(receiver) and receiver.datasource_id not in [ 3, 4 ]: if isinstance(model, schedule): lang = 'cn' if receiver.country: if receiver.country.areaCode not in [ '86', u'86', None, '', u'' ]: lang = 'en' msgdic = MESSAGE_DICT['schedulemsg'] title = msgdic['title_%s' % lang] content = msgdic['content_%s' % lang] messagetype = msgdic['messagetype'] if 'app' in types and sendAppmsg: try: receiver_alias = receiver.id bdage = 1 n_extras = {} pushnotification(content, receiver_alias, bdage, n_extras) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: try: saveMessage(content, messagetype, title, receiver, sender, modeltype='schedule', sourceid=model.id) except Exception: logexcption()
def run(self): types = self.types receiver = self.receiver model = self.model sender = self.sender if isinstance(model, project): lang = 'cn' projtitle = model.projtitleC if self.receiver.country: if self.receiver.country.areaCode not in [ '86', u'86', None, '', u'' ]: lang = 'en' projtitle = model.projtitleE msgdic = MESSAGE_DICT['projectpublish'] title = msgdic['title_%s' % lang] content = msgdic['content_%s' % lang] % projtitle messagetype = msgdic['messagetype'] if 'email' in types and sendEmail and checkEmailTrue( receiver.email): try: destination = receiver.email projectsign = 'IszFR1' vars = { 'projectC': getProjTitleWithSuperLink(model), 'projectE': getProjTitleWithSuperLink(model, 'en') } xsendEmail(destination, projectsign, vars) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: try: saveMessage(content, messagetype, title, receiver, sender, modeltype='project', sourceid=model.id) except Exception: logexcption()
def sendProjEmailToUser(proj, user, datasource): emailaddress = user['email'] data = { 'proj': proj['id'], 'projtitle': proj['Title'], 'user': user['id'], 'username': user['usernameC'], 'userEmail': emailaddress, 'isRead': False, 'readtime': None, 'isSend': False, 'sendtime': datetime.datetime.now(), 'errmsg': None, 'datasource': datasource, } if emailaddress: varsdict = { 'Title': proj['Title'], 'Location': proj['Location'], 'Industry': " ".join(proj['Industry']), 'Tags': " ".join(proj['Tags']), 'FAUSD': proj['FAUSD'], 'TransactionType': " ".join(proj['TransactionType']), 'B_introducteC': proj['B_introducteC'], } # response = xsendEmail(emailaddress, Email_project_sign, varsdict) # if response.get('status'): # data['isSend'] = True # data['sendtime'] = datetime.datetime.now() # else: # data['errmsg'] = response data['errmsg'] = 'test group send' else: data['errmsg'] = 'email 缺失' emailsend = Emailgroupsendlistserializer(data=data) if emailsend.is_valid(): emailsend.save() else: logexcption(msg=emailsend.error_messages)
def run(self): for webexuser in webEXUsers: name, email, role, meeting = webexuser.name, webexuser.email, webexuser.meetingRole, webexuser.meeting if sendEmail and checkEmailTrue(email): try: if not role: projectsign = '0PXbw' vars = { 'name': name, 'title': meeting.title, 'data': meeting.agenda, 'time': meeting.startDate.strftime('%Y-%m-%d %H:%M'), 'duration': meeting.duration } xsendEmail(email, projectsign, vars) except Exception: logexcption()
def pulishProjectCreateDataroom(proj,user): try: queryset = dataroom.objects.filter(is_deleted=False) projdataroom = queryset.filter(proj=proj, user_id=proj.supportUser_id, isPublic=False) publicdataroom = queryset.filter(proj=proj, isPublic=True) if projdataroom.exists(): pass else: dataroomdata = {} dataroomdata['datasource'] = user.datasource_id dataroomdata['proj'] = proj.id dataroomdata['user'] = proj.supportUser_id dataroomdata['isPublic'] = False dataroomdata['createuser'] = user.id supportordataroomserializer = DataroomCreateSerializer(data=dataroomdata) if supportordataroomserializer.is_valid(): supportdataroom = supportordataroomserializer.save() userlist1 = [supportdataroom.createuser, proj.makeUser, proj.takeUser, ] for user in userlist1: add_perm('dataroom.user_getdataroom', user, supportdataroom) add_perm('dataroom.user_getdataroom', supportdataroom.user, supportdataroom) add_perm('dataroom.user_changedataroom', supportdataroom.user, supportdataroom) if publicdataroom.exists(): pass else: dataroomdata = {} dataroomdata['proj'] = proj.id dataroomdata['user'] = proj.supportUser_id dataroomdata['isPublic'] = True dataroomdata['datasource'] = user.datasource_id dataroomdata['createuser'] = user.id publicdataroomserializer = DataroomCreateSerializer(data=dataroomdata) if publicdataroomserializer.is_valid(): publicdataroom = publicdataroomserializer.save() creatpublicdataroomdirectorywithtemplate(user, publicdataroomid=publicdataroom.id) except Exception: logexcption(msg='public创建失败') pass
def prepare_fileContent(self, obj): filecontent = None if obj.key: file_path = APILOG_PATH['orgAttachmentsPath'] + obj.key try: if os.path.exists(file_path): filename, type = os.path.splitext(file_path) if type == '.docx': doc = docx.Document(file_path) filecontent = '\n'.join([paragraph.text for paragraph in doc.paragraphs]) elif type == '.doc': filecontent = subprocess.check_output(["antiword", file_path]) elif type == '.pdf': filecontent = getPdfWordContent(file_path) elif type in ['.png', '.jpg', '.jpeg']: filecontent = BaiDuAipGetImageWord(file_path) elif type == '.txt': with open(file_path, "r") as f: text = f.read() type = chardet.detect(text) filecontent = text.decode(type["encoding"], 'ignore') except Exception: logexcption(msg='机构附件内容提取失败') return filecontent
def run(self): types = self.types receiver = self.receiver model = self.model sender = self.sender lang = 'cn' projtitle = '空' if model.proj: projtitle = model.proj.projtitleC if self.receiver.country: if self.receiver.country.areaCode not in [ '86', u'86', None, '', u'' ]: lang = 'en' if model.proj: projtitle = model.proj.projtitleE msgdic = MESSAGE_DICT['orgBDMessage'] title = msgdic['title_%s' % lang] content = msgdic['content_%s' % lang] % projtitle messagetype = msgdic['messagetype'] if 'app' in types and sendAppmsg: try: receiver_alias = receiver.id bdage = 1 n_extras = { 'info': { 'proj': model.proj_id if model.proj else None, 'projtitle': projtitle, 'org': model.org_id if model.org else None, 'orgname': model.org.orgnameC if model.org else None }, 'type': 'OrgBD' } pushnotification(content, receiver_alias, bdage, n_extras) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: try: saveMessage(content, messagetype, title, receiver, sender, modeltype='OrgBD', sourceid=model.id) except Exception: logexcption() if 'sms' in types and sendSms: try: destination = receiver.mobile projectsign = msgdic['sms_sign'] vars = {'proj': model.proj.projtitleC} xsendSms(destination, projectsign, vars) except Exception: logexcption()
def run(self): types = self.types receiver = self.receiver model = self.model sender = self.sender if isinstance(model, UserFriendship): lang = 'cn' if self.receiver.country: if self.receiver.country.areaCode not in [ '86', u'86', None, '', u'' ]: lang = 'en' msgdic = MESSAGE_DICT['usermakefriends'] title = msgdic['title_%s' % lang] content = msgdic['content_%s' % lang] messagetype = msgdic['messagetype'] if 'app' in types and sendAppmsg: try: receiver_alias = receiver.id bdage = 1 n_extras = {} pushnotification(content, receiver_alias, bdage, n_extras) except Exception: logexcption() if 'webmsg' in types and sendWebmsg: try: saveMessage(content, messagetype, title, receiver, sender, modeltype='UserFriendship', sourceid=model.id) except Exception: logexcption()
def convertAndUploadOffice(self, inputpath, outputpath): try: import subprocess subprocess.check_output(['python3', '/var/www/DocumentConverter.py', inputpath, outputpath], timeout=300) # 执行完毕程序才会往下进行 except ImportError: logexcption(msg='引入模块失败') except TimeoutExpired: logexcption(msg='文件转换超时') except Exception: logexcption(msg='文件转换失败')