zoukankan      html  css  js  c++  java
  • jeecg普通表和数据字典的关联

    昨天完成了一个需求,就是那个有bug的定时任务,它会把筛选好的数据存进一张新表里,然后我要把新表的数据用柱状图表示。

    本来是件很简单的事情,但是有几个棘手的地方

    1.产品的品种有好多个小品种,而几个小品种又有大品种。 比如辣条,长的、扁的、特别辣的、不是很辣的这些是小品种,这些小品种有一个共同的大品种叫辣条。统计的时候,要把小品中所有的数量相加,然后把同一个大品种的小品种的数量堆叠。

    1 select data_variety.variety_type as kind, sum(table.quantity) as sums
    2 from table
    3 inner join data_variety on table.product_id = data_variety.id
    4 group by kind

    2.其实上一步还是很简单的。就用上面的代码就可以实现了。但是问题是它的大品种,存的是数据字典,如下图所示,kind是1,2,3。要再从数据字典里找出来对应的数据加上去。

     这里有两种方法,

      一是,直接嵌套查询。

      二是,让前端请求两次,第一次获取kind,然后嵌套一个ajax,拿kind去后台请求数据字典。

      第一种方法虽然可以解决问题,但是如果再有同样的需求,我大概又得重复劳动。因此我决定写一个从数据字典中取数据的get方法。

    --------------------------------------------------------------------------------------------------

    数据字典表一共有两张。t_s_typegroup是存字典名称的,比如性别;t_s_type是存字典名称对应的字典内容,比如1代表男,2代表女。

    字典名称是varietyType就是种类名,   typecode就是数字,typename就是数字对应的值

    1 select t_s_type.typecode, t_s_type.typename 
    2 from t_s_type. 
    3 inner join t_s_typegroup where t_s_typegroup.id = t_s_type. typegroupid and typegroupcode='varietyType'

    这个写完回头看我发现是有问题的。 inner join 应该使用on,我用了where。但是很奇怪的是,结果是一样的。 这里以后有时间我会看看。

    如果代码只能用一次,那就很惨了。minidao有字段功能,因此只要把最后面的红色字符串,改成变量,就可以变成一个查询字典的方法。

    1     //根据字典名称,获取该字典。
    2     @Sql("select t_s_type.typecode, t_s_type.typename " +
    3             "from t_s_type " +
    4             "inner join t_s_typegroup " +
    5             "where t_s_typegroup.id = t_s_type. typegroupid and typegroupcode= :Type ")
    6     List<Map<String,Object>> getTypeGroup(@Param("Type")String Type);

      但是,怎么才能知道字典名称呢???

      我们知道一个品种名字,反过来搜索即可,于是我又写了一个方法

    1     //根据任意一个字段,获取该字段的字典名称
    2     @Sql("select t_s_type.TYPENAME,t_s_typegroup.TYPEGROUPNAME, t_s_typegroup.TYPEGROUPCODE " +
    3             "from t_s_typegroup " +
    4             "inner join t_s_type " +
    5             "on t_s_typegroup.id = t_s_type.typegroupid " +
    6             "where typename= :Typename ")
    7     List<Map<String,Object>> getTypeName(@Param("Typename")String Typename);

      这有一个局限性,如果重叠了,那就很尴尬了。 比如西红柿,既是水果又是蔬菜,会索引到两个大类。一时还想不出来怎么避免,先凑合用着。做项目不是写作业,估计也不会有这种事。

     --------------------------------------------------------------------------------------------------------------------------------------------------

    虽然我的想法很好,但是最后还是失败了。、

    方法没啥问题,运行的时候浏览器崩溃。换了俩浏览器都不行。可能哪里有漏洞? 放弃这个思路了。还是先把任务解决了再说

    毕竟世上无难事,只要肯放弃。

    中午回家的时候路上想,不如写个小程序,输入字典名,得到字典的code。

    因此,虽然还是写了俩ajax,但是后台写死了。就查这一个品种。有我磨磨唧唧改bug的时间,哪怕十个品种也查出来了。

    --------------------------------------------------------------------------------------

    实现功能的时候又踩了一个坑,爬出来得出一个结论:

    ajax一定要嵌套使用。请求两次,就把第二次请求,写在第一次请求的success。

    就这吧

  • 相关阅读:
    SaberRD之直流工作点分析
    SaberRD之瞬态分析
    Windows Form线程同步
    设计模式六大原则之一:单一职责原则
    利用异步通知I/O模型实现回声服务器端(windows)
    windows下线程同步【WaitForSingleObject、WaitForMultipleObjects、CRITICAL_SECTION(用户模式)、互斥量(内核模式)、信号量(内核模式)、事件对象(内核模式)】
    多线程并发回声服务器的实现(Linux版)
    基于Windows的服务器和客户端
    基于Linux的服务器和客户端
    OpenGL中怎么把世界坐标系变成屏幕坐标系
  • 原文地址:https://www.cnblogs.com/Anan2020/p/12986787.html
Copyright © 2011-2022 走看看