def dealTemp(): print "****************dealTemp**********" cur = datetime.datetime.now() processdate = cur - datetime.timedelta(days=31) processdate = processdate.strftime('%Y%m%d%H%M%S') condition = {'time':{'$lt':processdate}} data_model("live.area.temp.history").remove(condition)
def POST(self): form = web.input() print form if form["tablename"] == '' or form["tablename"] is None: return render("addchildtable.html",msg="表名不能为空!") data_model("childtable").insert(form) return render("addchildtable.html", msg="添加成功")
def getWorktime(devid, time): findindex = data_model('dev_index').find_one(conditions={'_id': devid}) if findindex is None: index = 0 starttime = '20150801' else: index = findindex['index'] starttime = findindex.get('update', '20150801') tablename = 'worktime_' + time finditem = data_model(tablename).find_one(conditions={'_id': devid}) if finditem is None: worktime = 0 runtime = 0 power = 0 else: worktime = finditem['worktime'] runtime = finditem['runtime'] if worktime > runtime: worktime, runtime = runtime, worktime power = finditem.get('power', 0) if power == 0: finditem = data_model('devPowerHistory').find( conditions={ 'deviceId': devid, 'time': re.compile(time) }) for item in finditem: power += float(item.get('devPower', 0)) nowyear = int(time[:4]) nowmonth = int(time[4:6]) preyear = nowyear premonth = nowmonth - 1 if premonth == 0: premonth = 12 preyear -= 1 preyear = str(preyear) if premonth < 10: premonth = '0' + str(premonth) else: premonth = str(premonth) pretime = preyear + premonth tablename_pre = 'worktime_' + pretime finditem = data_model(tablename_pre).find_one(conditions={'_id': devid}) if finditem is None: worktime_pre = 0 power_pre = 0 else: worktime_pre = finditem['worktime'] power_pre = finditem.get('power', 0) if power_pre == 0: finditem = data_model('devPowerHistory').find( conditions={ 'deviceId': devid, 'time': re.compile(pretime) }) for item in finditem: power_pre += item.get('devPower', 0) return worktime, runtime, index, worktime_pre, starttime, power, power_pre
def getPower(devid, time): power = 0 power_pre = 0 nowyear = int(time[:4]) nowmonth = int(time[4:6]) preyear = nowyear premonth = nowmonth - 1 if premonth == 0: premonth = 12 preyear -= 1 preyear = str(preyear) if premonth < 10: premonth = '0' + str(premonth) else: premonth = str(premonth) pretime = preyear + premonth findpower = data_model('devPowerHistory').find(conditions={ 'deviceId': devid, 'time': re.compile(time) }) findpowerpre = data_model('devPowerHistory').find( conditions={ 'deviceid': devid, 'time': re.compile(pretime) }) for i in findpower: power += float(i['devPower']) power = float('%0.4f' % power) for j in findpowerpre: power_pre += float(j['devPower']) power_pre = float('%0.4f' % power_pre) return power, power_pre
def getfixPowerinfo(devid, starttime, endtime): #获取时间段内的电量明细列表 now = datetime.datetime.now().strftime('%Y%m%d') start = starttime[:8] end = endtime[:8] finddata = [] conditions = {'devid': devid, 'time': {'$gt': starttime, '$lt': endtime}} sort = [('time', 1)] if start == end: if start == now: tablename = "devpower_detail_" + start else: tablename = 'devpower_log_' + start finddata = data_model(tablename).find(conditions=conditions, sort=sort) else: daylist = getdaylist(starttime, endtime) for day in daylist: if day == now: tablename = "devpower_detail_" + day else: tablename = 'devpower_log_' + day finditem = data_model(tablename).find(conditions=conditions, sort=sort) finddata.extend(finditem) return finddata
def dealPowerrank(d3): tablename = "devpower_detail_" + d3 devIDlist = data_model('devID').find() for l in devIDlist: conditions = dict() conditions['devid'] = l['_id'] finddata = data_model(tablename).find(conditions=conditions,sort=[('time',1)]) if len(finddata) == 0: pass else: offset = 0 maxW = finddata[-1]['W'] w1 = 0 w2 = 0 for i in finddata: w2 = i['W'] if w2 < w1: offset += w1 w1 = w2 maxW += offset insertitem = dict() insertitem['devid'] = l['_id'] insertitem['W'] = float('%0.4f'%maxW) insertitem['time'] = d3 #data_model('devpower_temp').insert(insertitem) data_model('devpower_temp').update_set(condition={'devid':l['_id'],'time':d3},values=insertitem,upsert=True)
def POST(self): data = web.input() province = data['data[province]'] city = data['data[city]'] area = data['data[area]'] index = float(data['data[index]']) action = data['action'] insertitem = { 'province': province, 'city': city, 'area': area, 'index': index } if action == 'edit' or action == 'create': data_model('city_area').update_set(condition={ 'province': province, 'city': city, 'area': area }, values=insertitem, upsert=True) elif action == 'remove': data.model('city_area').remove(condition={ 'province': province, 'city': city, 'area': area }) insertitem = {'province': '', 'city': '', 'area': '', 'index': 1} data = json.dumps(insertitem) return data
def getPower(devid, time): power = 0 power_pre = 0 nowyear = int(time[:4]) nowmonth = int(time[4:6]) preyear = nowyear premonth = nowmonth - 1 if premonth == 0: premonth = 12 preyear -= 1 preyear = str(preyear) if premonth < 10: premonth = '0' + str(premonth) else: premonth = str(premonth) pretime = preyear + premonth findpower1 = data_model('devpower_month').find_one(conditions={ 'devid': devid, 'time': time }) findpower2 = data_model('devpower_month').find_one(conditions={ 'devid': devid, 'time': pretime }) if findpower1 is None: power = 0 else: power = findpower1['W'] if findpower2 is None: power_pre = 0 else: power_pre = findpower2['W'] return power, power_pre
def getWeather(devid, time): weatherinfo = dict() city, area = '', '' findarea = data_model('dev_position').find_one(conditions={'_id': devid}) if findarea is None: pass else: city, area = findarea['city'], findarea['area'] if city == '' and area == '': weatherinfo = {} else: city = city[:-1] if city == '北京' or city == '天津' or city == '上海' or city == '重庆': area = area[:-1] weathertable = 'weather_' + time findweather = data_model(weathertable).find_one(conditions={ 'city': city, 'area': area }) if findweather is None: weatherinfo = {} else: del findweather['_id'] weatherinfo = findweather return weatherinfo, city, area
def dealHour(): print "****************dealHour**********" cur = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) processtime = cur[:10] tablename = "power_dataprocess" devIDlist = data_model('devID').find() for l in devIDlist: print l['_id'] conditions = dict() conditions['devid'] = l['_id'] conditions['time'] = re.compile(processtime) finddata = data_model(tablename).find(conditions=conditions) if len(finddata) == 0: pass else: finddata = sorted(finddata, key=operator.itemgetter('W'), reverse=True) maxdata = finddata[0] insertitem = {'devid':l['_id'],'time':processtime,'W':maxdata['W']} finditem = data_model('devpower_hour').find(conditions={'devid':l['_id'],'time':processtime}) if len(finditem) == 0: data_model('devpower_hour').insert(insertitem) else: data_model('devpower_hour').update_set(condition={'devid':l['_id']},values={'W':maxdata['W']}) common._LOG_DATAPROCESS.info(insertitem) data_model(tablename).drop()
def GET(self): result = dict() i = web.input() common._LOG.info(str(i)) devid = '' nowtime = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) datetime = nowtime[:8] if 'devid' in i.keys(): devid = i.get('devid') if 'time' in i.keys(): datetime = i.get('time') conditions = dict() conditions['time'] = datetime if devid != '': conditions['devid'] = devid finditem = data_model('devpower_info').find_one( conditions=conditions) if finditem == None: #当日无耗电 count = data_model('devpower_info').count( conditions={'time': datetime}) result['count_gt'] = count result['count_lt'] = 0 result['W'] = 0 result = json.dumps(result) return result gtdata = data_model('devpower_info').find(conditions={ 'W': { '$gt': finditem['W'] }, 'time': datetime }) count_gt = len(gtdata) ltdata = data_model('devpower_info').find(conditions={ 'W': { '$lt': finditem['W'] }, 'time': datetime }) count_lt = len(ltdata) result['count_gt'] = count_gt result['count_lt'] = count_lt result['W'] = finditem['W'] result = json.dumps(result) return result else: finddata = data_model('devpower_info').find(conditions=conditions) finddata = sorted(finddata, key=operator.itemgetter('W'), reverse=True) for item in finddata: del item['_id'] finddata = json.dumps(finddata) return finddata
def getCityindex(city, area): finditem = data_model('city_area').find_one(conditions={ 'city': city, 'area': area }) if finditem is None: #index = 1.0 finditem = data_model('city_area').find_one(conditions={'city': city}) if finditem is None: index = 1.0 else: index = finditem['index'] else: index = finditem['index'] return index
def POST(self, *args): data = web.input() start = int(data["start"]) length = int(data["length"]) draw = int(data['draw']) ordernum = int(data['order[0][column]']) orderstyle = data['order[0][dir]'] province = data['province'] resultdata = [] finddata = data_model('city_area').find( conditions={'province': province}, sort=[('city', -1)]) for item in finddata: temp = [] if item['province'] == '北京' or item['province'] == '天津' or item[ 'province'] == '上海' or item['province'] == '重庆': temp.append('') else: temp.append(item['province']) temp.append(item['city']) temp.append(item['area']) temp.append(item['index']) resultdata.append(temp) count = len(finddata) data = { "draw": draw, "recordsTotal": count, "recordsFiltered": count, "aaData": resultdata } data = json.dumps(data) return data
def dataprocess(): cur= datetime.datetime.now() year = cur.year month = cur.month day = cur.day hour = cur.hour min = cur.minute #如果是这个月的第一天0时则先不进行处理 if day == 1 and hour == 0: pass #每小时从小时库里面进行一次运算,并将值更新 elif min == 15: year = str(year) if month < 10: month = '0' + str(month) else: month = str(month) processDate = year + month devIDlist = data_model('devID').find() for l in devIDlist: devid = 'devPower.' + l["_id"] conditions = dict() conditions['key'] = devid conditions['time'] = re.compile(processDate) lastMonthValue = data_model('devPowerHour').find(conditions=conditions) value = 0 for i in lastMonthValue: value = value + float(i['P']) insertitem = {"key":devid,"time":processDate,"P":str(value)} print value if data_model('devPowerMonth').find_one(conditions={'key':devid,'time':processDate}) is None: data_model('devPowerMonth').insert(insertitem) else: data_model('devPowerMonth').update_set(condition={'key':devid},values={'P':str(value)})
def getlogPowerinfo(devid, starttime, endtime): #获取时间段内的电量明细列表 start = starttime[:8] end = endtime[:8] finddata = [] conditions = {'devid': devid, 'time': {'$gt': starttime, '$lt': endtime}} sort = [('time', 1)] if start == end: tablename = "devpower_log_" + start finddata = data_model(tablename).find(conditions=conditions, sort=sort) else: daylist = getdaylist(starttime, endtime) for day in daylist: tablename = "devpower_log_" + day finditem = data_model(tablename).find(conditions=conditions, sort=sort) finddata.extend(finditem) return finddata
def main(): data = data_model('temperature').find( conditions={'time': { '$gt': '201512' }}) for item in data: high = int(item['high']) lower = int(item['lower']) print lower, high if high < lower: _id = item['_id'] data_model('temperature').update_set( condition={'_id': ObjectId(_id)}, values={ 'high': lower, 'lower': high }, upsert=True) print 'ok'
def getWorktime(devid, time): tablename = 'worktime_' + time finditem = data_model(tablename).find_one(conditions={'_id': devid}) if finditem is None: worktime = 0 runtime = 0 else: worktime = finditem['worktime'] runtime = finditem['runtime'] return worktime, runtime
def dealModel(): tablename = "powershowgrid_temp" data = data_model(tablename).find() for item in data: devid = item['devid'] city = item['city'] area = item['area'] for i in item['result']: temp = dict() temp['devid'] = devid temp['city'] = city temp['area'] = area if i['cmd'] == 'devTodo': temp['temp'] = i['temp'] temp['inst'] = i['inst'][:4] temp['time'] = i['time'] data_model('modeldata').insert(temp) data_model(tablename).drop()
def getCmd_power(starttime, endtime, devid, start, length, draw): conditions = dict() if devid != '': conditions['devid'] = devid if starttime != '': conditions['starttime'] = {'$gte': starttime} if endtime != '': conditions['endtime'] = {'$lte': endtime} sort = [('starttime', 1)] data = data_model('powershowgrid').find(conditions=conditions, sort=sort) result = dict() resultlist = [] count = 0 starti = 0 for item in data: count += len(item['result']) for item in data: for i in item['result']: if starti != start: starti += 1 continue temp = [] temp.append(item['devid']) temp.append(i['temp']) temp.append(i['W']) temp.append(i['P']) temp.append(common.strTimeToFormat(i['time'])) if i['cmd'] == '3001': temp.append('持续状态') elif i['cmd'] == 'devTodo': if i['inst'].startswith('0'): temp.append('关闭') elif i['inst'].startswith('1'): if i['time'] == item['starttime']: temp.append("打开(" + i['inst'] + ")") else: temp.append("调整温度模式(" + i['inst'] + ")") else: if i['actionid'] == '2': temp.append("打开") if i['actionid'] == '0': temp.append("关闭") resultlist.append(temp) if len(resultlist) == length: break if len(resultlist) == length: break result = { "draw": draw, "recordsTotal": count, "recordsFiltered": count, "aaData": resultlist } return result
def getCmd(starttime, endtime, devid, start, length, draw): sender = False if devid.startswith('sender_'): devid = devid[7:] sender = True sort = [] sort.append(('acceptTime', pymongo.ASCENDING)) conditions = {} conditions['acceptTime'] = {'$gte': starttime, '$lte': endtime} if sender: pre = devid[:3] stuff = devid[3:] rexexp = '^' + pre + '.*' + stuff + '$' rexexp = re.compile(rexexp) conditions['content.sender'] = rexexp else: conditions['content.devID'] = devid conditions['content.CMD'] = {'$exists': True} conditions['mark'] = {'$ne': 'dev'} result = dict() count = data_model('loger').count(conditions=conditions) findlist = data_model('loger').find(conditions=conditions, sort=sort, limit=length, skip=start) resultlist = [] for item in findlist: print item temp = [] temp.append(devid) temp.append(item["content"]["CMD"]) temp.append(common.strTimeToFormat(item['acceptTime'])) resultlist.append(temp) result = { "draw": draw, "recordsTotal": count, "recordsFiltered": count, "aaData": resultlist } return result
def createReport(d3): finddata = data_model('devpower_temp').find(conditions={'time':d3},sort=[('W',-1)]) count = len(finddata) if count == 0: return else: ranking = 1 for item in finddata: power = item['W'] devid = item['devid'] username = '' sender = '' finditem = data_model('user_dev').find_one(conditions={'_id':devid}) if finditem is None: findsender = data_model('dev_position').find_one(conditions={'_id':devid}) if findsender is None: pass else: if 'sender' in findsender.keys(): sender = findsender['sender'] else: username = finditem['username'] sender = finditem['sender'] if ranking == count: rate = 0 else: rate = float('%0.3f'%(float(count - ranking)/count)) * 100 content = "您的设备%s昨日耗电%0.4f度,在活动用户中排名第%d,您的用电量高于%d%%的人"%(devid[:15],power,ranking,rate) insertitem = dict() insertitem['devid'] = devid insertitem['time'] = d3 insertitem['sender'] = sender insertitem['username'] = username insertitem['power'] = float('%0.4f'%power) insertitem['count'] = count insertitem['ranking'] = ranking insertitem['rate'] = rate insertitem['content'] = content #data_model('power_ranking').insert(insertitem) data_model('power_ranking').update_set(condition={'devid':devid,'time':d3},values=insertitem,upsert=True) ranking += 1
def dealPower_gdt(devID, gdt_tablename, insertdata): W = insertdata.get('W') findid = data_model('whitelist_guodiantong').find_one( conditions={'_id': devID}) if findid is None: pass else: findone = data_model(gdt_tablename).find(conditions={'devid': devID}, sort=[('time', -1)]) if len(findone) == 0: insertdata['base'] = 0 else: pre_W = findone[0].get('W', 0) base = findone[0].get('base', 0) if W >= pre_W: insertdata['base'] = base else: base += pre_W insertdata['base'] = base data_model(gdt_tablename).insert(insertdata)
def POST(self): data = web.input() devid = data['devid'] time = data['time'] item = data_model('check').find_one(conditions={'devid':devid,'time':time}) if item is None: return {} else: del item['_id'] item = json.dumps(item) return item
def dealModel(): # print "**********dealModel***********" tablename = "temperature_temp" now = time.strftime('%Y%m') tablename1 = 'weather_' + now finddata = data_model(tablename).find() data_model(tablename).drop() for item in finddata: province = item['province'] city = item['city'] area = item['area'] statedetailed = item['stateDetailed'] finditem = data_model(tablename1).find_one(conditions={'city':city,'area':area,'province':province}) if finditem is None: data_model(tablename1).insert({'city':city,'area':area,'province':province,statedetailed:1}) else: if statedetailed not in finditem.keys(): data_model(tablename1).update_set(condition={'city':city,'area':area,'province':province}, values={statedetailed:1}) else: data_model(tablename1).update_inc({'city':city,'area':area,'province':province},values={statedetailed:1})
def POST(self): data = web.input() tablename = data['tablename'] key = data['key'] key = 'this.' + key map = Code("function(){emit(" + key + ", {count:1});}") reduce = Code( "function(key,values){var total = 0;for (var i = 0; i < values.length; i++){total += values[i].count;}return {count:total};}" ) data_model(tablename).map_reduce(map, reduce, "out") findlist = data_model("out").find() data = [] for item in findlist: temp = dict() temp['key'] = item['_id'] temp['value'] = item['value']['count'] data.append(temp) result = dict() result = {'result': data} result = json.dumps(result) return result
def getPosition(devid): cityname = '' area = '' findposition = data_model('dev_position').find_one(conditions={'_id':devid}) if findposition is None: pass else: area = findposition['area'] cityname = findposition['city'] if area == '' or cityname == '': pass return cityname,area
def POST(self): data = web.input() tablename = '' value = '' if 'data[wind]' in data.keys(): tablename = 'windstate' value = data['data[wind]'] elif 'data[weather]' in data.keys(): tablename = 'stateDetailed' value = data['data[weather]'] index = float(data['data[index]']) action = data['action'] insertitem = {'_id': value, 'index': index} if action == 'edit' or action == 'create': data_model(tablename).update_set(condition={'_id': value}, values=insertitem, upsert=True) elif action == 'remove': data.model(tablename).remove(condition={'_id': value}) insertitem = {} data = json.dumps(insertitem) return data
def GET(self): data = web.input() tablename = '' if data and data['tablename']: tablename = data['tablename'] set = data_model(tablename).find_one() if set is None: return result = [] for item in set.keys(): result.append(item) data = {"keys": result} data = json.dumps(data) return data
def POST(self, *args): data = web.input() draw = int(data['draw']) style = data['style'] resultdata = [] finddata = [] if style == '1': finddata = data_model('windstate').find() elif style == '2': finddata = data_model('stateDetailed').find() for item in finddata: temp = [] temp.append(item['_id']) temp.append(item['index']) resultdata.append(temp) count = len(finddata) data = { "draw": draw, "recordsTotal": count, "recordsFiltered": count, "aaData": resultdata } data = json.dumps(data) return data
def getPowerinfo(devid, starttime, endtime): start = starttime[:8] finddata = [] end = endtime[:8] if start == end: tablename = "devpower_detail_" + start conditions = { 'devid': devid, 'time': { '$gt': starttime, '$lt': endtime } } sort = [('time', 1)] finddata = data_model(tablename).find(conditions=conditions, sort=sort) return finddata