def updateOneLineSite(self, openid, data): site_id = data.site_id name = (data.name if data.has_key("name") else None) setting_type = (data.setting_type if data.has_key("setting_type") else None) if name != None and setting_type != None: if setting_type != "manual": setting_type = None db.update("Sites", where="id=$site_id", name=name, setting_type=setting_type, vars=locals()) if name == None and setting_type != None: if setting_type != "manual": setting_type = None db.update("Sites", where="id=$site_id", setting_type=setting_type, vars=locals()) if name != None and setting_type == None: db.update("Sites", where="id=$site_id", name=name, vars=locals()) cfgPara = uTools.formatPostMsg({ "result": "success", "msg": "update site succeed!" }) return cfgPara
def updateLinePrice(self, openid, data): busline_id = data.busline_id price = data.price site_ids = data.site_id.split("-") from_site_id = int(site_ids[0]) to_site_id = int(site_ids[1]) _ret = db.query("""SELECT * FROM LinePrice WHERE BusLine_id={0} AND from_site_id={1} AND to_site_id ={2} """.format( busline_id, from_site_id, to_site_id)) if len(_ret) == 1: db.update("LinePrice", where="id=$_ret[0].id", price=price, vars=locals()) else: db.insert("LinePrice", price=price, BusLine_id=busline_id, from_site_id=from_site_id, to_site_id=to_site_id) cfgPara = uTools.formatPostMsg({ "result": "success", "msg": "lineprice update succeed!" }) return cfgPara
def updateLineSite(self, openid, data): busline_id = int(data.busline_id) name_change = data.name_change.split(";") end_change = data.end_change.split(";") #名称修改 for site_name in name_change: if site_name == "": continue site_id, name = site_name.split(":") site_id = int(site_id) db.update("Sites", where="id=$site_id", name=name, vars=locals()) #序号变更 for endchange in end_change: if endchange == "": continue seq, is_end = endchange.split(":") seq = int(seq) db.update("LineSites", where="busline_id=$busline_id AND seq=$seq", is_end=is_end, vars=locals()) sites = linedb.getSitesByLineid(busline_id) cfgPara = uTools.formatPostMsg({ "result": "success", "msg": "busline config succeed!", "sites": sites }) return cfgPara
def delLine(self, openid, data): busline_id = data.busline_id _ret = db.query( "SELECT * FROM BusLine WHERE id = {0}".format(busline_id)) busline = _ret[0] #确认该线路下没有班车队 ret = db.query( """SELECT COUNT(*) AS sum FROM GroupHasDevice WHERE devicegroup_id={0}""" .format(busline.busgroupid)) if ret[0].sum > 0: #还有车队,不能删除 cfgPara = {"result": "fail", "msg": "busgroup is not empty!"} else: lineSites = db.query( "SELECT * FROM LineSites WHERE busline_id={0}".format( busline.id)) for lineSite in lineSites: db.query("DELETE FROM Sites WHERE id={0}".format( lineSite.site_id)) #删除该线路的站点信息 db.query("DELETE FROM LineSites WHERE busline_id={0}".format( busline.id)) #删除该线路信息 db.query("DELETE FROM BusLine WHERE id={0}".format(busline.id)) cfgPara = {"result": "success", "msg": "busline delete succeed!"} cfgPara = uTools.formatPostMsg(cfgPara) return cfgPara
def setLineName(self, openid, data): busline_id = int(data.busline_id) company_id = int(data.company_id) if busline_id == -1: #新线路 busgroupid = db.insert("DeviceGroup", belong_to="company", type="管理分组", created_at=datetime.datetime.now(), Customer_openid=openid, description="gxsaiwei", name='dengchewang') busline_id = db.insert("BusLine", from_name=data.src, to_name=data.dst, busgroupid=busgroupid, created_at=datetime.datetime.now(), company_id=company_id) else: db.update("BusLine", where="id=$data.busline_id", vars=locals(), from_name=data.src, to_name=data.dst, created_at=datetime.datetime.now(), company_id=company_id) buslines = linedb.getBusLineByOpenid4pc(openid, company_id) cfgPara = uTools.formatPostMsg({ "result": "success", "buslines": buslines }) return cfgPara
def getLineBuses(self, openid, data): _ret = db.query("SELECT * FROM BusLine WHERE id={0}".format( data.busline_id)) busline = _ret[0] #判定是否为赛维员工 manager = linedb.getManageEmployee(openid) items = devdb.getDeviceByGroupid(openid, busline.busgroupid) line_name = busline.from_name + " " + busline.to_name if web.ctx.method == 'GET': jdkSign = objWeixin.get_jdk_sign(self.url) cfgPara = { "openid": openid, "items": items, "busline_id": data.busline_id, "busgroupid": busline.busgroupid, "company_id": data.company_id, "line_name": line_name } fixPara = icfg.getFixPara(openid, manager=manager, busline_id=data.busline_id, busgroupid=busline.busgroupid, company_id=busline.company_id) _cfgPara = json.dumps(cfgPara, ensure_ascii=False) ret = self.render.line_buses(_cfgPara, jdkSign, fixPara) else: cfgPara = {"items": items, "result": "succuss"} ret = uTools.formatPostMsg(cfgPara) return ret
def getManagerCenter(self,openid,data): country =None province =None city =None district =None if data.has_key("country") and data.country!="": country = data.country if data.has_key("province") and data.province!="": province = data.province if data.has_key("city") and data.city!="": city = data.city if data.has_key("district") and data.district!="": district = data.district cfgPara = linedb.getCompanyRegion(country,province,city,district) if web.ctx.method=='GET': user = icfg.objWeixin.get_user_info2(openid,format="string") fixPara={} cfgPara["openid"]=openid cfgPara["user"] =user _cfgPara = json.dumps(cfgPara,ensure_ascii=False) ret = self.render.manager_center(_cfgPara,fixPara) else: ret =uTools.formatPostMsg(cfgPara) return ret
def getHistoryStatMsg(self, openid, data): imei = data.imei startTime = data.startTime endTime = data.endTime statRet = historyTrackMgr.getHistoryStat(imei, startTime, endTime) _dev = db.query("SELECT * FROM Device WHERE imei='{0}'".format(imei)) dev = _dev[0] cfgPara = { 'imei': imei, 'name': dev.name, 'pts': statRet, 'url': "/m/bustrack?act=HISTORY-STAT&strict=y&openid={0}&startTime={1}&endTime={1}&imei=" .format(openid, data.startTime, data.endTime), } if web.ctx.env['REQUEST_METHOD'] == 'GET': ret = self.render.historystat( json.dumps(cfgPara, ensure_ascii=False)) else: ret = uTools.formatPostMsg(cfgPara) return ret
def geocoder(self,data): location = data.location req = urllib2.Request(self.cmdUrl("geocoder/v1","&location="+location+"&get_poi=1")) html = urllib2.urlopen(req) result = json.loads(html.read().decode("utf-8")) ret =uTools.formatPostMsg(result["result"]) return ret
def getRegionMonitorResult(self, openid, data): if data.has_key("from_time"): from_time = datetime.datetime.strptime(data.from_time, "%Y-%m-%d %H:%M:%S") to_time = datetime.datetime.strptime(data.to_time, "%Y-%m-%d %H:%M:%S") else: now = datetime.datetime.now() from_time = datetime.datetime.strptime( now.strftime("%Y-%m-%d 00:00:00"), "%Y-%m-%d %H:%M:%S") to_time = (from_time + datetime.timedelta(days=1)) imei = data.imei cfgPara = seatdb.getMonitorRegionResultByImei(imei, from_time, to_time) cfgPara["total"] = len(cfgPara["rows"]) cfgPara["from_time"] = from_time.strftime("%Y-%m-%d %H:%M:%S") cfgPara["to_time"] = to_time.strftime("%Y-%m-%d %H:%M:%S") dev = devdb.getDeviceByImei(imei, format="string") if web.ctx.method == 'GET': cfgPara["openid"] = openid cfgPara["dev"] = dev fixPara = {"openid": openid} _cfgPara = json.dumps(cfgPara, ensure_ascii=False) ret = self.render.regionmonitor(_cfgPara, fixPara) else: ret = uTools.formatPostMsg(cfgPara) return ret
def validCompany(self, openid, data): type = data.type value = data.value idCard = data.idCard #身份证检测 if type == "idCard": valid = devdb.validcompany(idCard=value, checkType=type) #手机号检测 if type == "phone": valid = devdb.validcompany(idCard=idCard, phone=value, checkType=type) #QQ检测 if type == "qq": valid = devdb.validcompany(idCard=idCard, qq=value, checkType=type) #weixin检测 if type == "weixin": valid = devdb.validcompany(idCard=idCard, weixin=value, checkType=type) #支付宝检测 if type == "alipay": valid = devdb.validcompany(idCard=idCard, alipay=value, checkType=type) cfgPara = {"result": valid} ret = uTools.formatPostMsg(cfgPara) return ret
def notifyRegionResult2Customer(self, openid, data): print(data) region_result_id = data.region_result_id param = data.param msg = data.msg openids = data.openids.split(";") #先完成更新 changeSeat = {} if param.strip() != "": for item in param.split("_"): sensor_no, check_result = [ val.strip() for val in param.split(":") ] changeSeat[sensor_no] = check_result seatdb.updateRegionResultDetail(region_result_id, changeSeat) #启动发送 cmpHomeLink = icfg.objWeixin.getAuth2Url( "{0}/m/manager?act=home".format(web.ctx.homedomain)) systemMsg = icfg.objWeixin.iconfig.systemMsg systemMsg["url"] = cmpHomeLink systemMsg["data"]["keyword2"]["value"] = datetime.datetime.now( ).strftime("%Y-%m-%d %H:%M:%S") systemMsg["data"]["first"]["value"] = "座位统计报告" systemMsg["data"]["keyword1"]["value"] = "赛微消息" systemMsg["data"]["remark"]["value"] = "\r\n " + msg for iopenid in openids: systemMsg["touser"] = iopenid icfg.objWeixin.send_template_msg(systemMsg) return uTools.formatPostMsg({"result": "success"})
def getLineBus(self,openid,data): #jdkSign = icfg.objWeixin.get_jdk_sign(self.env["url"]) cfgPara ={'openid' :openid,"appid":icfg.objWeixin.appid,"homedomain":self.env["homedomain"]} #stat = linedb.statCompany(self.env,openid) cfgPara['buses']=devdb.getDeviceByGroupid4pc(data.busgroupid) ret = uTools.formatPostMsg(cfgPara) return ret
def regeditCompany(self, openid, data): cfgPara = {'openid': openid} if web.ctx.method == 'GET': cfgPara["actionEN"] = "regedit" cfgPara["actionCH"] = "注册" cfgPara["homedomain"] = self.env["homedomain"] cfgPara["appid"] = icfg.objWeixin.appid jdkSign = icfg.objWeixin.get_jdk_sign(self.env["url"]) fixPara = icfg.getFixPara(openid) ret = self.render.regedit_company(cfgPara, jdkSign, fixPara) else: id = linedb.regeditCompany( name=data.name, qq=data.qq, weixin=data.weixin, #alipay =data.alipay, #idCard =data.idCard, phone=data.phone, district=data.district, province=data.province, city=data.city, addr=data.address, company=data.company, regedit_openid=data.regedit_openid, valid="待确认", ) cfgPara["result"] = ("success" if id >= 0 else "fail") cfgPara["company_id"] = id ret = uTools.formatPostMsg(cfgPara) return ret
def getAboutMsg(self,data): openid = objWeixin.getOpenid(data) imei = data.imei _ret = db.query('SELECT * FROM Device WHERE imei="{0}"'.format(imei)) cfgPara = { "result":"failed" } if len(_ret)>0: dev = _ret[0] #查询该imei所属的管理分组 _group = db.query("""SELECT *,DeviceGroup.id AS grpId FROM DeviceGroup,GroupHasDevice WHERE GroupHasDevice.imei ='{0}' AND GroupHasDevice.devicegroup_id =DeviceGroup.id AND DeviceGroup.type = "管理分组" """.format(imei)) if len(_group)>0: grp = _group[0] grpName = grp.name grpId = grp.grpId _ret = db.query("SELECT * FROM BusLine WHERE busgroupid={0}".format(grpId)) busline = _ret[0] busline_id = busline.id company_id = busline.company_id else: grpName = "未知" grpId = -1 company_id = 0 busline_id = -1 cfgPara = { "result" :"success", "name" :dev.name, "openid" :openid, "busline_id" :busline_id, "grpName" :grpName, "grpId" :grpId, "devType" :("天网1代" if dev.devType=="" else dev.devType), "manufacturer" :dev.manufacturer, "imei" :dev.imei, "phone" :dev.phone, "arm_type" :dev.arm_type, "seat_type" :dev.seat_type, "create_at" :dev.regedit_at.strftime("%Y-%m-%d"), "warehouse_id" :dev.warehouse_id, "company_id" :company_id, } if web.ctx.method=='GET': sharePara=tradeObj.genPreSharePara("transfer",openid,imei) #设定缺省车型 sharePara["sel"]={"midbus":"","bed":"","test":""} sharePara["sel"][dev.seat_type]='selected = "selected"' sharePara["company_id"]= company_id jdkSign = objWeixin.get_jdk_sign(self.env['url']) _cfgPara=json.dumps(cfgPara,ensure_ascii=False) ret = self.render.single_device_mgr(_cfgPara,jdkSign,sharePara) else: ret = uTools.formatPostMsg(cfgPara) return ret
def cfgBusSeat(self,openid,data): imei = data.imei db.update("Device",where="imei=$imei",vars=locals(),seat_type=data.seat_type, seat_template=data.seat_template) ret =uTools.formatPostMsg({"result":"success"}) return ret
def getLineSite(self, openid, data): imei = data.imei busline = linedb.getBuslineByImei(imei) sites = linedb.getSitesByLineid(busline["id"], setting_type="manual") rows = sites["manual"] ret = uTools.formatPostMsg({"total": len(rows), "rows": rows}) return ret
def delMonitorRegion(self, openid, data): monitor_region = seatdb.getMonitorRegionById(data.monitor_region_id) seatdb.delMonitorRegion(data.monitor_region_id) rows = seatdb.getLineMonitorRegionByLineid( monitor_region["busline_id"]) cfgPara = {"total": len(rows), "rows": rows} ret = uTools.formatPostMsg(cfgPara) return ret
def exeBoxCmd(self,openid,data): if data.has_key("cmd")==False: ret={} else: args=dict(act='EXE-BOX-CMD',imei=data.imei,cmd=data.cmd) print(icfg.adapter["busbox"]) ret = requests.post(icfg.adapter["busbox"], params = args).json() cfgPara =uTools.formatPostMsg(ret) return cfgPara
def getRegionResultDetailById(self, openid, data): region_result_id = data.region_result_id rows = seatdb.getRegionResultDetailById(region_result_id) cfgPara = { "region_result_id": region_result_id, "total": len(rows), "rows": rows } return uTools.formatPostMsg(cfgPara)
def getSeatType(self, openid, data): result = [{ "seatid": "有人", "seatName": "有人" }, { "seatid": "空座", "seatName": "空座" }] ret = uTools.formatPostMsg(result) return ret
def getMineTrackMsg(self, openid, data): #jdkSign = objWeixin.get_jdk_sign(self.url) company_id = data.company_id jdkSign = {} dev = devdb.getDevice(data.imei) if dev != "": #查询设备位置信息 arm = historyTrackMgr.getMineTrack(dev['imei']) _ret = db.query( "SELECT * FROM BusLine WHERE busgroupid={0}".format( dev["groupid"])) busline = _ret[0] sites = linedb.getSitesByLineid(busline.id, "manual") cfgPara = { "pt": arm, 'openid': openid, 'dev': dev, 'busline_id': busline.id, 'sites': sites["manual"], 'url': "gxsaiwei/m/bustrack?act=MINE_TRACK&openid={0}&imei=".format( openid), 'imei': dev['imei'], "company_id": company_id, } else: cfgPara = { "pt": "", 'openid': openid, 'dev': "", 'url': "#", 'imei': "", 'sites': [], 'busline_id': -1, "company_id": company_id, } if web.ctx.method == 'GET': jdkSign = objWeixin.get_jdk_sign(self.url) sharePara = tradeObj.genPreSharePara("share_view", openid, cfgPara['imei']) _cfgPara = json.dumps(cfgPara, ensure_ascii=False) ret = self.render.mytrackqq_v2(_cfgPara, jdkSign, sharePara) #ret = self.render.mytrackqq_v1(cfgPara,_cfgPara) else: ret = uTools.formatPostMsg(cfgPara) return ret
def getGroupByImeiMsg(self, openid, data): imei = data.imei grps = devdb.getDeviceGroup(openid) #将原来的url中的imei替换成新的,以实现场景的平滑切换 #for grp in grps: # for dev in grp['devs']: # #result,n = re.subn(r'imei=\d+','imei={0}'.format(dev['imei']),fromUrl) # dev['url']="/m/bustrack?act=MINE_TRACK&imei={0}".format(dev['imei']) #ret = self.render.devicegroup4share(fromUrl,json.dumps(grps,ensure_ascii=False)) return uTools.formatPostMsg(grps)
def companyConfirm(self, openid, company_id): icfg.db.update("Company", where="id=$company_id", confirmed_at=web.SQLLiteral('NOW()'), owner_openid=openid, vars=locals(), valid="有效") cfgPara = {'openid': openid} cfgPara["result"] = "success" ret = uTools.formatPostMsg(cfgPara) return ret
def getHistoryTrackMsg(self,act,openid,data,mapType="QQ"): imei = data.imei fromTime =data.startTime toTime =data.endTime pts = historyTrackMgr.getHistoryTrack4b(imei,fromTime,toTime,mapType) dev = devdb.getDevice(imei) sites = linedb.getHistorySitesByImei(imei,fromTime,toTime) #统计位置中心 centerQQLat=0 centerQQLng=0 centerBaiduLat=0 centerBaiduLng=0 for pt in pts: centerQQLat += pt["qqLat"]/len(pts) centerQQLng += pt["qqLng"]/len(pts) centerBaiduLat += pt["baiduLat"]/len(pts) centerBaiduLng += pt["baiduLng"]/len(pts) _toTime = datetime.datetime.strptime(toTime,"%Y-%m-%d %H:%M:%S") _fromTime = datetime.datetime.strptime(fromTime,"%Y-%m-%d %H:%M:%S") monitors = seatdb.getLineMonitorRegionByImei(imei) history_sites = historyTrackMgr.getHistorySite(imei,fromTime,toTime) no = 1 for site in history_sites: site["no"]=no no+=1 site["duration_time"] = uTools.secondsFormat2(site["duration_seconds"]) cfgPara = { 'dev':dev, 'pts':pts, 'sites':sites, 'hisSites':history_sites, 'monitor_regions':monitors, 'openid' :openid, 'centerQQLat':centerQQLat, 'centerQQLng':centerQQLng, 'centerBaiduLat':centerBaiduLat, 'centerBaiduLng':centerBaiduLng, 'startTime':_fromTime.strftime("%Y-%m-%dT%H:%M"), 'endTime': _toTime.strftime("%Y-%m-%dT%H:%M"), } fixPara={} if web.ctx.method=='GET': cfgPara = json.dumps(cfgPara,ensure_ascii=False) if act=="GET-HISTORYTRACK-ONLY": ret = self.render.history_track_only(cfgPara,fixPara) else: ret = self.render.history_track(cfgPara,fixPara) else: ret =uTools.formatPostMsg(cfgPara) return ret
def getOnlineState(self,openid,data): #查询纳入 buses = devdb.getCompanyBusSate() if web.ctx.method=='GET': jdkSign = objWeixin.get_jdk_sign(self.env["url"]) fixPara = icfg.getFixPara(openid) cfgPara = {"buses":buses,"openid":openid} _cfgPara =json.dumps(cfgPara,ensure_ascii=False) ret = self.render.online_state(_cfgPara,jdkSign,fixPara) else: ret =uTools.formatPostMsg({"buses":buses}) return ret
def getBusPostion(self,openid,data): if data.bus_type=="imei": buses = devdb.getDeviceByImei4pc([data.value]) elif data.bus_type=="groupid": buses = devdb.getDeviceByGroupid4pc(data.value) elif data.bus_type=="company_id": buses = linedb.getBusesByCompany4pc(data.value) else: buses = linedb.getBusesByOpenid4pc(openid) cfgPara={"buses":buses} cfgPara=uTools.formatPostMsg(cfgPara) return cfgPara
def getMsgReceiver(self, openid, data): imei = data.imei company = linedb.getCompanyByImei(imei) employee = linedb.getEmployeeByid4pc(company["id"], with_manager=True) rows = [] for _type in employee: group = ("赛微" if _type == "saiwei" else "客户") for row in employee[_type]: row["group"] = group rows.append(row) cfgPara = {"total": len(row), "rows": rows} return uTools.formatPostMsg(cfgPara)
def updateSecurityItem(self, openid, data): imei = data.imei result = db.update("Device", where="imei=$imei", vars=locals(), fireMinutes=data.fireMinutes, fireDistance=data.fireDistance, moveSpeaker=data.moveSpeaker, poweroffSpeaker=data.poweroffSpeaker, lost_alm_after_minutes=data.lost_alm_after_minutes) cfgPara = {"openid": openid, "result": "success"} ret = uTools.formatPostMsg(cfgPara) return ret
def addMonitorRegion(self, openid, data): busline = linedb.getBuslineByImei(data.imei) busline_id = busline["id"] from_historytrack_id = long(data.from_historytrack_id) to_historytrack_id = long(data.to_historytrack_id) seatdb.addMonitorRegion(busline_id, from_historytrack_id, to_historytrack_id) rows = seatdb.getLineMonitorRegionByLineid(busline_id) cfgPara = {"total": len(rows), "rows": rows} ret = uTools.formatPostMsg(cfgPara) return ret