基于Hadoop实现景象分析大屏可视化项目【源码+LW+PPT+解析】 ...

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及偕行交流合作
  主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开辟、物联网设计与开辟设计、简历模板、学习资料、面试题库、技术互助、就业指导等
  业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和明确代码逻辑思绪等
  收藏点赞不迷路  关注作者有利益
  文末获取源码 
  



项目编号:BS-BD-023

一,情况介绍

语言情况:Python3.8+Hadoop
数据库:Mysql: mysql5.7
WEB框架:Django
开辟工具:IDEA或PyCharm
二,项目简介

信息化社会内需要与之针对性的信息获取途径,但是途径的扩展根本上为人们所积极的方向,由于站在的角度存在偏差,人们经常能够得到差别范例信息,这也是技术最为难以攻克的课题。针对景象分析大屏可视化等题目,对景象举行研究分析,然后开辟设计出景象分析大屏可视化系统以办理题目。
景象分析大屏可视化系统主要功能模块包括背景首页,系统用户(管理员),模块管理(日照时数,平均相对湿度,年降水量,平均气温,贵阳景象分析,气温对比),采取面临对象的开辟模式举行软件的开辟和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为背景数据的主要存储单位,采用Hadoop框架、python技术、Ajax技术举行业务系统的编码及其开辟,实现了本系统的全部功能。本次报告,起首分析了研究的背景、作用、意义,为研究工作的公道性打下了基础。针对景象分析大屏可视化系统的各项需求以及技术题目举行分析,证明了系统的须要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了根本的介绍,最后来实现景象分析大屏可视化系统和部署运利用用它。


三,系统展示






四,核心代码展示

  1. import json
  2. import csv
  3. import ast
  4. import os
  5. from flask import jsonify
  6. from core.mysql import MysqlPool
  7. from service import service_select
  8. mysqlPool = MysqlPool()
  9. # 帮助方法,合并对象
  10. def obj_update(*config):
  11.     config_temp = {}
  12.     for o in config:
  13.         config_temp.update(o)
  14.     return config_temp
  15. # 权限集合
  16. dict_auth = {}
  17. # 控制器父类
  18. class Controller:
  19.     def __init__(self, config):
  20.         """
  21.         构造函数
  22.         @param {Dictionary} config 配置参数
  23.         """
  24.         # 配置参数
  25.         self.config = config or {}
  26.         # 添加服务
  27.         self.service = service_select(self.config["services"])
  28.         cg = {
  29.             # 选择的模板那路径模板
  30.             "tpl":
  31.                 "./index/",
  32.             # 选择的服务
  33.             "services":
  34.                 "user",
  35.             # 注册get请求路由
  36.             "get": ["list", "view", "table"],
  37.             # 注册post请求路由
  38.             "post": [],
  39.             # 注册get api路由
  40.             "get_api": [
  41.                 "del",
  42.                 "get_list",
  43.                 "get_obj",
  44.                 "count",
  45.                 "count_group",
  46.                 "sum",
  47.                 "sum_group",
  48.                 "avg",
  49.                 "avg_group",
  50.                 "list_group",
  51.                 "bar_group",
  52.                 "get_hits_list",
  53.                 "get_business_order_list"
  54.             ],
  55.             # 注册post api路由
  56.             "post_api": ["add", "del", "set", "import_db", "export_db", "upload"],
  57.             "interact": [],
  58.             "unique": []
  59.         }
  60.         if config:
  61.             if "interact" in config:
  62.                 config["interact"].extend(cg["interact"])
  63.             else:
  64.                 config["interact"] = cg["interact"]
  65.             if "get" in config:
  66.                 config["get"].extend(cg["get"])
  67.             else:
  68.                 config["get"] = cg["get"]
  69.             if "post" in config:
  70.                 config["post"].extend(cg["post"])
  71.             else:
  72.                 config["post"] = cg["post"]
  73.             if "get_api" in config:
  74.                 config["get_api"].extend(cg["get_api"])
  75.             else:
  76.                 config["get_api"] = cg["get_api"]
  77.             if "post_api" in config:
  78.                 config["post_api"].extend(cg["post_api"])
  79.             else:
  80.                 config["post_api"] = cg["post_api"]
  81.             if "unique" in config:
  82.                 config["unique"].extend(cg["unique"])
  83.             else:
  84.                 config["unique"] = cg["unique"]
  85.     # 公共模型,用于在render()为传递模板数据补充
  86.     def model(self, ctx, model):
  87.         m = {}
  88.         m.update(model)
  89.         #
  90.         # model_temp.user = ctx.session.user
  91.         # 获取导航
  92.         service = service_select("nav")
  93.         m["nav_top"] = service.Get_list({"location": "top"})
  94.         m["nav_side"] = service.Get_list({"location": "side"})
  95.         m["nav_foot"] = service.Get_list({"location": "foot"})
  96.         # 获取轮播图
  97.         service = service_select("slides")
  98.         m["list_slides"] = service.Get_list({})
  99.         # 获取公告
  100.         service = service_select("notice")
  101.         m["list_notice"] = service.Get_list({},
  102.                                             {"orderby": "`update_time` desc"})
  103.         # 交互模型接口
  104.         if ("interact" in self.config) and self.config["interact"]:
  105.             m = self.model_interact(ctx, m)
  106.         m["query"] = ctx.query
  107.         m["body"] = ctx.body
  108.         m["auth"] = ctx.auth
  109.         return m
  110.     # 交互对象
  111.     def interact_obj(self, ctx, o):
  112.         interact = self.config["interact"]
  113.         if interact:
  114.             source_table = service_select(
  115.                 self.config["services"]).config["table"]
  116.             source_field = source_table + "_id"
  117.             # 评论
  118.             if "comment" in interact:
  119.                 service = service_select("comment")
  120.                 source_id = o[source_field]
  121.                 o["comment_list"] = service.Get_list(
  122.                     {
  123.                         "source_table": source_table,
  124.                         "source_field": source_field,
  125.                         "source_id": source_id
  126.                     }, {
  127.                         "page": 1,
  128.                         "size": 10,
  129.                     })
  130.                 o["comment_len"] = service.Count({
  131.                     "source_table": source_table,
  132.                     "source_field": source_field,
  133.                     "source_id": source_id,
  134.                 })
  135.             # 评分
  136.             if "score" in interact:
  137.                 service = service_select("score")
  138.                 source_id = o[source_field]
  139.                 o["score_list"] = service.Get_list(
  140.                     {
  141.                         "source_table": source_table,
  142.                         "source_field": source_field,
  143.                         "source_id": source_id
  144.                     }, {
  145.                         "page": 1,
  146.                         "size": 10,
  147.                     })
  148.                 o["score_len"] = service.Avg(
  149.                     {
  150.                         "source_table": source_table,
  151.                         "source_field": source_field,
  152.                         "source_id": source_id,
  153.                     },
  154.                     {"field": "score_num"},
  155.                 )
  156.             # 收藏
  157.             if "collect" in interact:
  158.                 service = service_select("collect")
  159.                 source_id = o[source_field]
  160.                 o["collect_list"] = service.Get_list(
  161.                     {
  162.                         "source_table": source_table,
  163.                         "source_field": source_field,
  164.                         "source_id": source_id
  165.                     }, {
  166.                         "page": 1,
  167.                         "size": 10,
  168.                     })
  169.                 o["collect_len"] = service.Count({
  170.                     "source_table": source_table,
  171.                     "source_field": source_field,
  172.                     "source_id": source_id,
  173.                 })
  174.             # 点赞
  175.             if "praise" in interact:
  176.                 service = service_select("praise")
  177.                 source_id = o[source_field]
  178.                 o["praise_list"] = service.Get_list(
  179.                     {
  180.                         "source_table": source_table,
  181.                         "source_field": source_field,
  182.                         "source_id": source_id,
  183.                     }, {
  184.                         "page": 1,
  185.                         "size": 10,
  186.                     })
  187.                 o["praise_len"] = service.Count({
  188.                     "source_table": source_table,
  189.                     "source_field": source_field,
  190.                     "source_id": source_id,
  191.                 })
  192.             return o
  193.     # 交互列表
  194.     def interact_list(self, ctx, list_1):
  195.         interact = self.config["interact"]
  196.         if interact:
  197.             source_table = service_select(
  198.                 self.config["services"]).config["table"]
  199.             source_field = source_table + "_id"
  200.             # 评论数
  201.             if "comment" in interact:
  202.                 service = service_select("comment")
  203.                 for o in list_1:
  204.                     source_id = o[source_field]
  205.                     o["comment_len"] = service.Count({
  206.                         "source_table": source_table,
  207.                         "source_field": source_field,
  208.                         "source_id": source_id,
  209.                     })
  210.             # 平均分
  211.             if "score" in interact:
  212.                 service = service_select("score")
  213.                 for o in list_1:
  214.                     source_id = o[source_field]
  215.                     o["score_len"] = service.Avg(
  216.                         {
  217.                             "source_table": source_table,
  218.                             "source_field": source_field,
  219.                             "source_id": source_id,
  220.                         },
  221.                         {"field": "score_num"},
  222.                     )
  223.             # 收藏人数
  224.             if "collect" in interact:
  225.                 service = service_select("collect")
  226.                 for o in list_1:
  227.                     source_id = o[source_field]
  228.                     o["collect_len"] = service.Count({
  229.                         "source_table": source_table,
  230.                         "source_field": source_field,
  231.                         "source_id": source_id,
  232.                     })
  233.             # 点赞人数
  234.             if "praise" in interact:
  235.                 service = service_select("praise")
  236.                 for o in list_1:
  237.                     source_id = o[source_field]
  238.                     o["praise_len"] = service.Count({
  239.                         "source_table": source_table,
  240.                         "source_field": source_field,
  241.                         "source_id": source_id,
  242.                     })
  243.     # 交互模型
  244.     def model_interact(self, ctx, m):
  245.         if ("list" in m) and m["list"]:
  246.             self.interact_list(ctx, m["list"])
  247.         elif ("obj" in m) and m["obj"]:
  248.             self.interact_obj(ctx, m["obj"])
  249.         return m
  250.     """
  251.     公共参数校验
  252.     """
  253.     def Check_param(self, ctx):
  254.         return True
  255.     # 首页
  256.     def Index(self, ctx):
  257.         """首页
  258.         @param {Object} ctx http请求上下文
  259.         @return {Object} 返回html页面
  260.         """
  261.         query = dict(ctx.query)
  262.         config_plus = {}
  263.         if "field" in query:
  264.             field = query.pop("field")
  265.             config_plus["field"] = field
  266.         if "page" in query:
  267.             page = query.pop("page")
  268.             config_plus["page"] = page
  269.         if "size" in query:
  270.             size = query.pop("size")
  271.             config_plus["size"] = size
  272.         result_list = self.service.Get_list(
  273.             query, obj_update(self.config, config_plus))
  274.         result_dict = {"list": result_list}
  275.         model = self.model(ctx, result_dict)
  276.         return ctx.render(self.config["tpl"] + "index" + ".html", model)
  277.     def Api(self, ctx):
  278.         return {"demo": "hello world!"}
  279.     #  列表页面
  280.     def List(self, ctx):
  281.         """
  282.         列表页面
  283.         @param {Object} ctx http请求上下文
  284.         @return {Object} 返回html页面
  285.         """
  286.         query = dict(ctx.query)
  287.         config_plus = {}
  288.         if "field" in query:
  289.             field = query.pop("field")
  290.             config_plus["field"] = field
  291.         if "page" in query:
  292.             page = query.pop("page")
  293.             config_plus["page"] = page
  294.         if "size" in query:
  295.             size = query.pop("size")
  296.             config_plus["size"] = size
  297.         result_list = self.service.Get_list(
  298.             query, obj_update(self.config, config_plus))
  299.         result_dict = {"list": result_list}
  300.         model = self.model(ctx, result_dict)
  301.         return ctx.render(self.config["tpl"] + "list" + ".html", model)
  302.     # 表格页面
  303.     def Table(self, ctx):
  304.         """
  305.         表格页面
  306.         @param {Object} ctx http请求上下文
  307.         @return {Object} 返回html页面
  308.         """
  309.         query = dict(ctx.query)
  310.         config_plus = {}
  311.         if "field" in query:
  312.             field = query.pop("field")
  313.             config_plus["field"] = field
  314.         if "page" in query:
  315.             page = query.pop("page")
  316.             config_plus["page"] = page
  317.         if "size" in query:
  318.             size = query.pop("size")
  319.             config_plus["size"] = size
  320.         result_list = self.service.Get_list(
  321.             query, obj_update(self.config, config_plus))
  322.         result_dict = {"list": result_list}
  323.         model = self.model(ctx, result_dict)
  324.         return ctx.render(self.config["tpl"] + "table" + ".html", model)
  325.     # 详情页面
  326.     def View(self, ctx):
  327.         """
  328.         详情页面
  329.         @param {Object} ctx http请求上下文
  330.         @return {Object} 返回html页面
  331.         """
  332.         query = dict(ctx.query)
  333.         config_plus = {}
  334.         if "field" in query:
  335.             field = query.pop("field")
  336.             config_plus["field"] = field
  337.         obj_result = self.service.Get_obj(query,
  338.                                           obj_update(self.config, config_plus))
  339.         obj_dict = {"obj": obj_result}
  340.         model = self.model(ctx, obj_dict)
  341.         return ctx.render(self.config["tpl"] + "view" + ".html", model)
  342.     # 编辑页面
  343.     def Edit(self, ctx):
  344.         """
  345.         编辑页面
  346.         @param {Object} ctx http请求上下文
  347.         @return {Object} 返回html页面
  348.         """
  349.         query = dict(ctx.query)
  350.         config_plus = {}
  351.         if "field" in query:
  352.             field = query.pop("field")
  353.             config_plus["field"] = field
  354.         obj_result = self.service.Get_obj(query,
  355.                                           obj_update(self.config, config_plus))
  356.         obj_dict = {"obj": obj_result}
  357.         model = self.model(ctx, obj_dict)
  358.         return ctx.render(self.config["tpl"] + "edit" + ".html", model)
  359.     # 增
  360.     def Add(self, ctx):
  361.         """
  362.         增
  363.         @param {Object} ctx http请求上下文
  364.         @return {Object} 返回json-rpc格式结果
  365.         """
  366.         body = ctx.body
  367.         unique = self.config.get("unique")
  368.         obj = None
  369.         if unique:
  370.             qy = {}
  371.             for i in range(len(unique)):
  372.                 key = unique[i]
  373.                 qy[key] = body.get(key)
  374.             obj = self.service.Get_obj(qy)
  375.         if not obj:
  376.             # 添加数据前
  377.             error = self.Add_before(ctx)
  378.             if error["code"]:
  379.                 return {"error": error}
  380.             error = self.Events("add_before", ctx, None)
  381.             if error["code"]:
  382.                 return {"error": error}
  383.             # 添加数据
  384.             result = self.service.Add(body, self.config)
  385.             # 添加数据发生错误
  386.             if self.service.error:
  387.                 return {"error": self.service.error}
  388.             # 添加数据成功后
  389.             res = self.Add_after(ctx, result)
  390.             if res:
  391.                 result = res
  392.             res = self.Events("add_after", ctx, result)
  393.             if res:
  394.                 result = res
  395.             return {"result": result}
  396.         else:
  397.             return {"error": {"code": 10000, "message": "已存在"}}
  398.     # 删
  399.     def Del(self, ctx):
  400.         """
  401.         删
  402.         @param {Object} ctx http请求上下文
  403.         @return {Object} 返回json-rpc格式结果
  404.         """
  405.         if len(ctx.query) == 0:
  406.             errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
  407.             return errorMsg
  408.         result = self.service.Del(ctx.query, self.config)
  409.         if self.service.error:
  410.             return {"error": self.service.error}
  411.         return {"result": result}
  412.     # 改
  413.     def Set(self, ctx):
  414.         """
  415.         改
  416.         @param {Object} ctx http请求上下文
  417.         @return {Object} 返回json-rpc格式结果
  418.         """
  419.         # 修改数据前
  420.         error = self.Set_before(ctx)
  421.         if error["code"]:
  422.             return {"error": error}
  423.         error = self.Events("set_before", ctx, None)
  424.         if error["code"]:
  425.             return {"error": error}
  426.         query = ctx.query
  427.         if 'page' in query.keys():
  428.             del ctx.query['page']
  429.         if 'size' in query.keys():
  430.             del ctx.query['size']
  431.         if 'orderby' in query.keys():
  432.             del ctx.query['orderby']
  433.         # 修改数据
  434.         result = self.service.Set(ctx.query, ctx.body, self.config)
  435.         # 修改数据发生错误
  436.         if self.service.error:
  437.             return {"error": self.service.error}
  438.         # 修改数据成功后
  439.         res = self.Set_after(ctx, result)
  440.         if res:
  441.             result = res
  442.         res = self.Events("set_after", ctx, result)
  443.         if res:
  444.             result = res
  445.         return {"result": result}
  446.     # 查多条
  447.     def Get_list(self, ctx):
  448.         """
  449.         查多条
  450.         @param {Object} ctx http请求上下文
  451.         @return {Object} 返回json-rpc格式结果
  452.         """
  453.         query = dict(ctx.query)
  454.         config_plus = {}
  455.         if "field" in query:
  456.             field = query.pop("field")
  457.             config_plus["field"] = field
  458.         if "page" in query:
  459.             config_plus["page"] = query.pop("page")
  460.         if "size" in query:
  461.             config_plus["size"] = query.pop("size")
  462.         if "orderby" in query:
  463.             config_plus["orderby"] = query.pop("orderby")
  464.         if "like" in query:
  465.             config_plus["like"] = query.pop("like")
  466.         if "groupby" in query:
  467.             config_plus["groupby"] = query.pop("groupby")
  468.         count = self.service.Count(query)
  469.         lst = []
  470.         if self.service.error:
  471.             return {"error": self.service.error}
  472.         elif count:
  473.             lst = self.service.Get_list(query,
  474.                                         obj_update(self.config, config_plus))
  475.             if self.service.error:
  476.                 return {"error": self.service.error}
  477.             self.interact_list(ctx, lst)
  478.         return {"result": {"list": lst, "count": count}}
  479.     # 查一条
  480.     def Get_obj(self, ctx):
  481.         """
  482.         查一条
  483.         @param {Object} ctx http请求上下文
  484.         @return {Object} 返回json-rpc格式结果
  485.         """
  486.         query = dict(ctx.query)
  487.         config_plus = {}
  488.         if "field" in query:
  489.             field = query.pop("field")
  490.             config_plus["field"] = field
  491.         obj = self.service.Get_obj(query, obj_update(self.config, config_plus))
  492.         if self.service.error:
  493.             return {"error": self.service.error}
  494.         if obj:
  495.             self.interact_obj(ctx, obj)
  496.         return {"result": {"obj": obj}}
  497.     # 饼图统计
  498.     def List_group(self, ctx):
  499.         """
  500.         饼图统计
  501.         @param {Object} ctx http请求上下文
  502.         @return {Object} 返回json-rpc格式结果
  503.         """
  504.         query = dict(ctx.query)
  505.         config_plus = {}
  506.         if "groupby" in query:
  507.             groupby_t = query.pop("groupby")
  508.             config_plus["groupby"] = groupby_t
  509.         else:
  510.             err = {"error": 30000, "message": "groupby的值不能为空!"}
  511.             return err
  512.         lt = self.service.Count_group(query, obj_update(self.config, config_plus))
  513.         for o in lt:
  514.             o[1] = o[groupby_t]
  515.             o[0] = o["count"]
  516.         if self.service.error:
  517.             return {"error": self.service.error}
  518.         return {"result": {"list": lt}}
  519.     # 柱状图统计
  520.     def Bar_group(self, ctx):
  521.         """
  522.         柱状图统计
  523.         @param {Object} ctx http请求上下文
  524.         @return {Object} 返回json-rpc格式结果
  525.         """
  526.         query = dict(ctx.query)
  527.         config_plus = {}
  528.         if "field" in query:
  529.             field = query.pop("field")
  530.             config_plus["field"] = field
  531.         else:
  532.             err = {"error": 30000, "message": "field的值不能为空!"}
  533.             return err
  534.         if "groupby" in query:
  535.             groupby_t = query.pop("groupby")
  536.             config_plus["groupby"] = groupby_t
  537.         else:
  538.             err = {"error": 30000, "message": "groupby的值不能为空!"}
  539.             return err
  540.         lt = self.service.Bar_group(query, obj_update(self.config, config_plus))
  541.         for k, v in enumerate(lt):
  542.             new = list(v.values())
  543.             lt[k] = new
  544.         if self.service.error:
  545.             return {"error": self.service.error}
  546.         return {"result": {"list": lt}}
  547.     # 总数
  548.     def Count(self, ctx):
  549.         """
  550.         总数
  551.         @param {Object} ctx http请求上下文
  552.         @return {Object} 返回json-rpc格式结果
  553.         """
  554.         result = self.service.Count(ctx.query, self.config)
  555.         if self.service.error:
  556.             return {"error": self.service.error}
  557.         return {"result": result}
  558.     # 分组总计条数
  559.     def Count_group(self, ctx):
  560.         """
  561.         分组总计条数
  562.         @param {Object} ctx http请求上下文
  563.         @return {Object} 返回json-rpc格式结果
  564.         """
  565.         query = dict(ctx.query)
  566.         config_plus = {}
  567.         if "groupby" in query:
  568.             groupby_t = query.pop("groupby")
  569.             config_plus["groupby"] = groupby_t
  570.         else:
  571.             err = {"error": 30000, "message": "groupby的值不能为空!"}
  572.             return err
  573.         lt = self.service.Count_group(query,
  574.                                       obj_update(self.config, config_plus))
  575.         if self.service.error:
  576.             return {"error": self.service.error}
  577.         return {"result": {"list": lt}}
  578.     # 合计
  579.     def Sum(self, ctx):
  580.         """
  581.         合计
  582.         @param {Object} ctx http请求上下文
  583.         @return {Object} 返回json-rpc格式结果
  584.         """
  585.         query = dict(ctx.query)
  586.         config_plus = {}
  587.         if "field" in query:
  588.             field = query.pop("field")
  589.             config_plus["field"] = field
  590.         else:
  591.             err = {"error": 30000, "message": "field的值不能为空!"}
  592.             return err
  593.         result = self.service.Sum(query, obj_update(self.config, config_plus))
  594.         if self.service.error:
  595.             return {"error": self.service.error}
  596.         return {"result": result}
  597.     # 分组求和
  598.     def Sum_group(self, ctx):
  599.         """
  600.         分组求和
  601.         @param {Object} ctx http请求上下文
  602.         @return {Object} 返回json-rpc格式结果
  603.         """
  604.         query = dict(ctx.query)
  605.         config_plus = {}
  606.         if "field" in query:
  607.             field = query.pop("field")
  608.             config_plus["field"] = field
  609.         else:
  610.             err = {"error": 30000, "message": "field的值不能为空!"}
  611.             return err
  612.         if "groupby" in query:
  613.             groupby_t = query.pop("groupby")
  614.             config_plus["groupby"] = groupby_t
  615.         else:
  616.             err = {"error": 30000, "message": "groupby的值不能为空!"}
  617.             return err
  618.         lt = self.service.Sum_group(query,
  619.                                     obj_update(self.config, config_plus))
  620.         if self.service.error:
  621.             return {"error": self.service.error}
  622.         return {"result": {"list": lt}}
  623.     # 求平均数
  624.     def Avg(self, ctx):
  625.         """
  626.         求平均数
  627.         @param {Object} ctx http请求上下文
  628.         @return {Object} 返回json-rpc格式结果
  629.         """
  630.         query = dict(ctx.query)
  631.         config_plus = {}
  632.         if "field" in query:
  633.             field = query.pop("field")
  634.             config_plus["field"] = field
  635.         else:
  636.             err = {"error": 30000, "message": "field的值不能为空!"}
  637.             return err
  638.         result = self.service.Avg(query, obj_update(self.config, config_plus))
  639.         if self.service.error:
  640.             return {"error": self.service.error}
  641.         return {"result": result}
  642.     # 分组平均数
  643.     def Avg_group(self, ctx):
  644.         """
  645.         分组平均数
  646.         @param {Object} ctx http请求上下文
  647.         @return {Object} 返回json-rpc格式结果
  648.         """
  649.         query = dict(ctx.query)
  650.         config_plus = {}
  651.         if "field" in query:
  652.             field = query.pop("field")
  653.             config_plus["field"] = field
  654.         else:
  655.             err = {"error": 30000, "message": "field的值不能为空!"}
  656.             return err
  657.         if "groupby" in query:
  658.             groupby_t = query.pop("groupby")
  659.             config_plus["groupby"] = groupby_t
  660.         else:
  661.             err = {"error": 30000, "message": "groupby的值不能为空!"}
  662.             return err
  663.         lt = self.service.Avg_group(query,
  664.                                     obj_update(self.config, config_plus))
  665.         if self.service.error:
  666.             return {"error": self.service.error}
  667.         return {"result": {"list": lt}}
  668.     # 导入数据
  669.     def Import_db(self, ctx):
  670.         """
  671.         导入数据
  672.         @param {Object} ctx http请求上下文
  673.         @return {Object} 返回json-rpc格式结果
  674.         """
  675.         body = {"error": {"code": 10000, "message": "未定义表名!"}}
  676.         return body
  677.     # 导出数据
  678.     def Export_db(self, ctx):
  679.         """
  680.         导出数据
  681.         @param {Object} ctx http请求上下文
  682.         @return {Object} 返回json-rpc格式结果
  683.         """
  684.         message = {
  685.             "id": 1,
  686.             "jsonrpc": "2.0",
  687.         }
  688.         query = ctx.query
  689.         # 获取表名
  690.         table = self.config["services"]
  691.         path = ""
  692.         if "path" in query:
  693.             path = query.pop("path")
  694.         if "name" in query:
  695.             name = query.pop("name")
  696.         # 通过服务获得数据
  697.         service = service_select(table)
  698.         lst = service.Export_db(query)
  699.         # 1.创建文件对象
  700.         f = open(str(path) + str(name) + ".csv",
  701.                  "w",
  702.                  newline="",
  703.                  encoding="utf-8")
  704.         # 2.基于文件对象构建 csv写入对象
  705.         csv_writer = csv.writer(f)
  706.         for row in lst:
  707.             csv_writer.writerow(row)
  708.         return message
  709.     # 上传
  710.     def Upload(self, ctx):
  711.         """
  712.         上传
  713.         @param {Object} ctx http请求上下文
  714.         @return {Object} 返回json-rpc格式结果
  715.         """
  716.         file_obj = ctx.request.files.get("file", None)
  717.         if file_obj is None:
  718.             error = {"code": 10000, "message": "上传的文件(file)不能为空"}
  719.             return error
  720.         try:
  721.             file_obj = ctx.request.files.get("file", None)
  722.             u = "static/upload/" + file_obj.filename
  723.             file_obj.save(os.path.join(u))
  724.             # fe = os.getcwd() + u
  725.             # with open(fe, "wb") as f:
  726.             #     for line in file_obj.chunks():
  727.             #         f.write(line)
  728.             # f.close()
  729.         except Exception as e:
  730.             print("上传失败:", e.args)
  731.             return {'error':e.args}
  732.         else:
  733.             return {"result": {"url": "/"+u}}
  734.     # 鉴权
  735.     def Auth(self, ctx):
  736.         if len(dict_auth.keys()) == 0:
  737.             service = service_select("auth")
  738.             lst = service.Get_list({}, {"page": 0})
  739.             for o in lst:
  740.                 if "option" in o:
  741.                     o["option"] = ast.literal_eval(o["option"])
  742.                 else:
  743.                     o["option"] = {}
  744.                 path = o["path"]
  745.                 if not dict_auth[path]:
  746.                     dict_auth[path] = {}
  747.                 dict_auth[path][o["user_group"]] = o
  748.         return dict_auth
  749.     # 添加前
  750.     def Add_before(self, ctx):
  751.         # print("添加", ctx)
  752.         return {"code": 0}
  753.     # 添加后
  754.     def Add_after(self, ctx, result):
  755.         # print("结果", ctx)
  756.         return result
  757.     # 修改前
  758.     def Set_before(self, ctx):
  759.         # print("修改前", ctx)
  760.         return {"code": 0}
  761.     # 分类推荐
  762.     def Get_hits_list(self, ctx):
  763.         return {"code": 0}
  764.     # 商家查询
  765.     def Get_business_order_list(self, ctx):
  766.         return {"code": 0}
  767.     # 修改前
  768.     def Set_after(self, ctx, result):
  769.         return result
  770.     # 事件
  771.     def Events(self, event_name, param, paramB):
  772.         if event_name == "add_before":
  773.             return {"code": 0}
  774.         elif event_name == "del_before":
  775.             return {"code": 0}
  776.         elif event_name == "set_before":
  777.             return {"code": 0}
  778.         elif event_name == "get_obj_before":
  779.             return {"code": 0}
  780.         elif event_name == "get_list_before":
  781.             return {"code": 0}
  782.         elif event_name == "add_after":
  783.             return paramB
  784.         elif event_name == "del_after":
  785.             return paramB
  786.         elif event_name == "set_after":
  787.             return paramB
  788.         elif event_name == "get_obj_after":
  789.             return paramB
  790.         elif event_name == "get_list_after":
  791.             return paramB
  792.         else:
  793.             return paramB
复制代码


五,相关作品展示

基于Java开辟、Python开辟、PHP开辟、C#开辟等相关语言开辟的实战项目
基于Nodejs、Vue等前端技术开辟的前端实战项目
基于微信小程序和安卓APP应用开辟的相关作品
基于51单片机等嵌入式物联网开辟应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统





 


 







免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表