当前位置:   article > 正文

基于springboot公司进销存管理系统源码和论文_springboot销售团队管理系统论文

springboot销售团队管理系统论文

使用旧方法对福泰轴承股份有限公司进销存系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在福泰轴承股份有限公司进销存系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的福泰轴承股份有限公司进销存系统对仓库人员管理、字典管理、公告管理、供应商信息管理、客户管理、商品管理、商品出入库管理、商品销售管理、销售人员管理、商品退货管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行福泰轴承股份有限公司进销存系统程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。福泰轴承股份有限公司进销存系统的开发让用户查看商品信息变得容易,让管理员高效管理商品信息。

关键词:福泰轴承股份有限公司进销存系统;商品信息;公告;自助资讯

基于springboot公司进销存管理系统源码和论文532

演示视频:

基于springboot公司进销存管理系统源码和论文

表4.1仓库人员表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

cangkurenyuan_name

String

仓库人员姓名

3

cangkurenyuan_phone

String

仓库人员手机号

4

cangkurenyuan_id_number

String

仓库人员身份证号

5

cangkurenyuan_photo

String

仓库人员照片

6

xiaoshourenyuan_zhuzhi

String

现住址

7

cangkurenyuan_email

String

电子邮箱

8

create_time

Date

创建时间

表4.2字典表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

dic_code

String

字段

3

dic_name

String

字段名

4

code_index

Integer

编码

5

index_name

String

编码名字

6

super_id

Integer

父字段id

7

beizhu

String

备注

8

create_time

Date

创建时间

表4.3公告表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

gonggao_name

String

公告名称

3

gonggao_types

Integer

公告类型

4

insert_time

Date

公告发布时间

5

gonggao_content

String

公告详情

6

create_time

Date

创建时间

表4.4供应商信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

gongyingshang_uuid_number

String

供应商唯一编号

3

gongyingshang_name

String

供应商名称

4

lianxiren_name

String

联系人姓名

5

lianxiren_phone

String

联系人手机号

6

lianxiren_address

String

地址

7

gongyingshang_types

Integer

供应商类型

8

gongyingshang_xinyongdengji_types

Integer

信用等级

9

gongyingshang_content

String

供应商详情

10

create_time

Date

创建时间

表4.5客户表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xiaoshourenyuan_id

Integer

销售人员

3

kehu_uuid_number

String

客户编号

4

kehu_name

String

客户姓名

5

kehu_phone

String

客户手机号

6

kehu_id_number

String

客户身份证号

7

kehu_photo

String

客户照片

8

kehu_zhuzhi

String

客户住址

9

laiyuan_types

Integer

客户来源

10

sex_types

Integer

性别

11

age

Integer

年龄

12

kehu_email

String

客户邮箱

13

kehu_content

String

客户备注

14

insert_time

Date

录入时间

15

create_time

Date

创建时间

表4.6商品表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

gongyingshang_id

Integer

供应商

3

shangpin_uuid_number

String

商品编号

4

shangpin_name

String

商品名称

5

shangpin_photo

String

商品照片

6

shangpin_danwei

String

单位

7

shangpin_types

Integer

商品类型

8

shangpin_kucun_number

Integer

商品库存

9

shangpin_new_money

BigDecimal

进价

10

shangpin_old_money

BigDecimal

售价

11

cangku_types

Integer

仓库

12

daoqi_time

Date

到期时间

13

shangpin_content

String

商品介绍

14

insert_time

Date

录入时间

15

create_time

Date

创建时间

表4.7商品出入库表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

shangpin_id

Integer

商品

3

cangkurenyuan_id

Integer

仓库人员

4

shangpincuruku_uuid_number

String

出入库编号

5

shangpincuruku_name

String

出入库标题

6

shangpincuruku_types

Integer

类型

7

caozuo_number

Integer

操作数量

8

jieqing_types

Integer

钱款结清

9

shangpincuruku_content

String

备注

10

insert_time

Date

录入时间

11

create_time

Date

创建时间

表4.8商品销售表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

shangpin_id

Integer

商品

3

kehu_id

Integer

客户

4

xiaoshourenyuan_id

Integer

销售人员

5

shangpinxiaoshou_uuid_number

String

销售编号

6

shangpinxiaoshou_name

String

销售标题

7

caozuo_number

Integer

销售数量

8

jieqing_types

Integer

钱款结清

9

huafei_money

BigDecimal

销售金额

10

xiaoshou_time

Date

销售时间

11

shangpinxiaoshou_content

String

备注

12

insert_time

Date

录入时间

13

create_time

Date

创建时间

表4.9销售人员表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xiaoshourenyuan_name

String

销售人员姓名

3

xiaoshourenyuan_phone

String

销售人员手机号

4

xiaoshourenyuan_id_number

String

销售人员身份证号

5

xiaoshourenyuan_photo

String

销售人员照片

6

xiaoshourenyuan_zhuzhi

String

现住址

7

xiaoshourenyuan_email

String

电子邮箱

8

create_time

Date

创建时间

表4.10商品退货表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

shangpinxiaoshou_id

Integer

商品销售

3

xiaoshoutuihuo_uuid_number

String

退货编号

4

caozuo_number

Integer

退货数量

5

xiaoshoutuihuo_yuanyou_content

String

退货缘由

6

tuihuan_jine

BigDecimal

退还金额

7

tuihuo_time

Date

退货时间

8

xiaoshoutuihuo_content

String

备注

9

insert_time

Date

录入时间

10

create_time

Date

创建时间

表4.11管理员表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

username

String

用户名

3

password

String

密码

4

role

String

角色

5

addtime

Date

新增时间


Abstract

Using the old method to systematically manage the tourist attraction information no longer makes people trust. Applying the current network information technology to the management of tourist attraction information can solve many problems in information management, such as processing data for a long time, data There are problems such as errors that cannot be corrected in time. The self-guided website developed this time centralizes the city information of attractions, tourist attractions information, comment information, and self-help information. After learning the network knowledge I had previously consulted and the knowledge I learned in the school classroom, I decided to develop the system to select the 小程序 mode, an efficient mode to complete system function development. This mode allows the operator to access the website based on the browser. The mainstream Java language is used in the object-oriented language to develop the self-guided website program. In the database selection, select the powerful Mysql database for data. Store operation. The development of self-guided websites makes it easy for users to view information on attractions, allowing administrators to efficiently manage information on attractions.

Key WordsSelf-guided tour website; tourist attractions; reviews; self-help information

1.1 研究背景

现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让时间变得更加地宝贵化,因为每天的每分钟,每秒钟这些时间都能让人们处理大批量的日常事务,这些场景,是之前的手工模式无法与之相抗衡的。对于商品信息的管理来说,传统的通过纸质文档记录信息的方式已经落后了,依靠手工管理商品信息,不仅花费较长的工作时间,在对记录各种信息的文档进行信息查询以及信息核对操作时,也不能及时保证信息的准确性,基于这样的办公低效率环境下,对于商品信息的处理就要提出新的解决方案。因为这个时代的信息一直都在高速发展,要是不抱着发展的观念看待事情,极有可能被这个市场快速遗忘,甚至被无情地淘汰掉。所以尽早开发一款福泰轴承股份有限公司进销存系统进行信息的快速处理,既跟上了时代的发展脚步,也能让自己的核心竞争力有所提升。

1.2目的和意义

互联网加的时代一方面是加快信息的发展,另一方面也是对传统行业进行筛选,能够继续发展的,肯定是那些能够充分运用互联网技术进行自身升级改革的行业。那些停步不前的行业只能就此结束,进而被大家所遗忘。这次设计出来的福泰轴承股份有限公司进销存系统,它不仅能够让管理人员在信息增加,信息的编辑等事务处理上,节省很多的时间,也会砍掉一部分的人工成本,节省不必要开支的资金。另外,此系统的操作界面是可视化的界面,管理人员无需付费培训就能尽快上手。福泰轴承股份有限公司进销存系统的开发意义如下:

1、管理人员再也不用在查询信息上花费大量宝贵的时间了,通过信息关键词字段就可以在几秒内获取需要的信息,在各种突发事件面前管理人员也不用慌张,可以从容淡定地处理各种相关信息。

2、该系统在每天的24小时期间都是不会停止服务的,只要有信息操作的需要,管理人员都能使用常用的360浏览器,或者百度浏览器,或者谷歌浏览器,2345浏览器等大众浏览器都能登录系统,然后操作对应的功能。

3、有了这款信息管理类操作软件,所有需要进行处理的数据不用在纸质版本的文档上进行记载,而是基于电脑进行信息录入。

4、商品方面的信息都是通过网站进行显示,其实质是这些信息都保存在网站对应的数据库里面。只要操作员不去恶意删除信息,那么这些信息将会永久保存。

1.3 论文结构安排

编写福泰轴承股份有限公司进销存系统相对应的论文,其实就是对开发完成的程序进行再次解读的过程。本论文从七个方面的内容讲解了开发的程序,具体内容如下:

第一个部分:就是论文的绪论,这个部分就是介绍在什么样的背景下开发的程序,以及这个程序开发出来具有什么意义等内容。

第二个部分:就是介绍开发这个程序使用了什么技术,使用什么数据库保存程序的数据信息,程序开发的语言是使用的什么语言等内容。

第三个部分:就是介绍这个程序开发在现实生活的可行性问题,也讲述了程序开发需要设置什么功能等内容。

第四个部分:就是已经知晓程序的大致功能,需要对程序的功能进行更为严格的细分,也需要出具相应的功能结构图,同时,也要设计程序对应的数据库,包括数据库里面的数据表的设计等内容。

第五个部分:就是在系统的编码阶段,需要使用编程语言完成程序的功能,完成程序的界面设计,最终以界面实现的效果图展示设计成果等内容。

第六个部分:就是程序已经完成了开发的前提之下,需要检测程序的各个模块是否衔接正常,程序各个功能能否在网络等一切外部条件正常的情况下运行,这期间要是出现任何错误都需要及时记录并在后期进行修补完善。

第七个部分:就是论文最后的总结部分,描述遇到的问题,采用的解决思路等内容。

  1. package com.controller;
  2. import java.io.*;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.*;
  8. import javax.servlet.http.HttpServletRequest;
  9. import com.alibaba.fastjson.JSON;
  10. import com.utils.StringUtil;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.json.JSONObject;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.util.ResourceUtils;
  18. import org.springframework.web.bind.annotation.PathVariable;
  19. import org.springframework.web.bind.annotation.RequestBody;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import org.springframework.web.bind.annotation.RequestParam;
  22. import org.springframework.web.bind.annotation.RestController;
  23. import com.annotation.IgnoreAuth;
  24. import com.baidu.aip.face.AipFace;
  25. import com.baidu.aip.face.MatchRequest;
  26. import com.baidu.aip.util.Base64Util;
  27. import com.baomidou.mybatisplus.mapper.EntityWrapper;
  28. import com.baomidou.mybatisplus.mapper.Wrapper;
  29. import com.entity.ConfigEntity;
  30. import com.service.CommonService;
  31. import com.service.ConfigService;
  32. import com.utils.BaiduUtil;
  33. import com.utils.FileUtil;
  34. import com.utils.R;
  35. /**
  36. * 通用接口
  37. */
  38. @RestController
  39. public class CommonController {
  40. private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
  41. @Autowired
  42. private CommonService commonService;
  43. /**
  44. * Java代码实现MySQL数据库导出
  45. *
  46. * @param mysqlUrl MySQL安装路径
  47. * @param hostIP MySQL数据库所在服务器地址IP
  48. * @param userName 进入数据库所需要的用户名
  49. * @param hostPort 数据库端口
  50. * @param password 进入数据库所需要的密码
  51. * @param savePath 数据库文件保存路径
  52. * @param fileName 数据库导出文件文件名
  53. * @param databaseName 要导出的数据库名
  54. * @return 返回true表示导出成功,否则返回false。
  55. */
  56. @IgnoreAuth
  57. @RequestMapping("/beifen")
  58. public R beifen(String mysqlUrl, String hostIP, String userName, String hostPort, String password, String savePath, String fileName, String databaseName) {
  59. File saveFile = new File(savePath);
  60. if (!saveFile.exists()) {// 如果目录不存在 
  61. saveFile.mkdirs();// 创建文件夹 
  62. }
  63. if (!savePath.endsWith(File.separator)) {
  64. savePath = savePath + File.separator;
  65. }
  66. PrintWriter printWriter = null;
  67. BufferedReader bufferedReader = null;
  68. try {
  69. Runtime runtime = Runtime.getRuntime();
  70. String cmd = mysqlUrl + "mysqldump -h" + hostIP + " -u" + userName + " -P" + hostPort + " -p" + password + " " + databaseName;
  71. runtime.exec(cmd);
  72. Process process = runtime.exec(cmd);
  73. InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
  74. bufferedReader = new BufferedReader(inputStreamReader);
  75. printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
  76. String line;
  77. while ((line = bufferedReader.readLine()) != null) {
  78. printWriter.println(line);
  79. }
  80. printWriter.flush();
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. return R.error("备份数据出错");
  84. } finally {
  85. try {
  86. if (bufferedReader != null) {
  87. bufferedReader.close();
  88. }
  89. if (printWriter != null) {
  90. printWriter.close();
  91. }
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. }
  95. }
  96. return R.ok();
  97. }
  98. /**
  99. * Java实现MySQL数据库导入
  100. *
  101. * @param mysqlUrl MySQL安装路径
  102. * @param hostIP MySQL数据库所在服务器地址IP
  103. * @param userName 进入数据库所需要的用户名
  104. * @param hostPort 数据库端口
  105. * @param password 进入数据库所需要的密码
  106. * @param savePath 数据库文件保存路径
  107. * @param fileName 数据库导出文件文件名
  108. * @param databaseName 要导出的数据库名
  109. */
  110. @IgnoreAuth
  111. @RequestMapping("/huanyuan")
  112. public R huanyuan(String mysqlUrl, String hostIP, String userName, String hostPort, String password, String savePath, String fileName, String databaseName) {
  113. try {
  114. Runtime rt = Runtime.getRuntime();
  115. Process child1 = rt.exec(mysqlUrl+"mysql.exe -h" + hostIP + " -u" + userName + " -P" + hostPort + " -p" + password + " " + databaseName);
  116. OutputStream out = child1.getOutputStream();//控制台的输入信息作为输出流
  117. String inStr;
  118. StringBuffer sb = new StringBuffer("");
  119. String outStr;
  120. BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(savePath+"/"+fileName), "utf-8"));
  121. while ((inStr = br.readLine()) != null) {
  122. sb.append(inStr + "\r\n");
  123. }
  124. outStr = sb.toString();
  125. OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
  126. writer.write(outStr);
  127. // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
  128. writer.flush();
  129. out.close();
  130. br.close();
  131. writer.close();
  132. } catch (Exception e) {
  133. e.printStackTrace();
  134. return R.error("数据导入出错");
  135. }
  136. return R.ok();
  137. }
  138. /**
  139. * 饼状图求和
  140. * @return
  141. */
  142. @RequestMapping("/pieSum")
  143. public R pieSum(@RequestParam Map<String,Object> params) {
  144. logger.debug("饼状图求和:,,Controller:{},,params:{}",this.getClass().getName(),params);
  145. List<Map<String, Object>> result = commonService.pieSum(params);
  146. return R.ok().put("data", result);
  147. }
  148. /**
  149. * 饼状图统计
  150. * @return
  151. */
  152. @RequestMapping("/pieCount")
  153. public R pieCount(@RequestParam Map<String,Object> params) {
  154. logger.debug("饼状图统计:,,Controller:{},,params:{}",this.getClass().getName(),params);
  155. List<Map<String, Object>> result = commonService.pieCount(params);
  156. return R.ok().put("data", result);
  157. }
  158. /**
  159. * 柱状图求和单列
  160. * @return
  161. */
  162. @RequestMapping("/barSumOne")
  163. public R barSumOne(@RequestParam Map<String,Object> params) {
  164. logger.debug("柱状图求和单列:,,Controller:{},,params:{}",this.getClass().getName(),params);
  165. List<Map<String, Object>> result = commonService.barSumOne(params);
  166. List<String> xAxis = new ArrayList<>();//报表x轴
  167. List<List<String>> yAxis = new ArrayList<>();//y轴
  168. List<String> legend = new ArrayList<>();//标题
  169. List<String> yAxis0 = new ArrayList<>();
  170. yAxis.add(yAxis0);
  171. legend.add("");
  172. for(Map<String, Object> map :result){
  173. String oneValue = String.valueOf(map.get("name"));
  174. String value = String.valueOf(map.get("value"));
  175. xAxis.add(oneValue);
  176. yAxis0.add(value);
  177. }
  178. Map<String, Object> resultMap = new HashMap<>();
  179. resultMap.put("xAxis",xAxis);
  180. resultMap.put("yAxis",yAxis);
  181. resultMap.put("legend",legend);
  182. return R.ok().put("data", resultMap);
  183. }
  184. /**
  185. * 柱状图统计单列
  186. * @return
  187. */
  188. @RequestMapping("/barCountOne")
  189. public R barCountOne(@RequestParam Map<String,Object> params) {
  190. logger.debug("柱状图统计单列:,,Controller:{},,params:{}",this.getClass().getName(),params);
  191. List<Map<String, Object>> result = commonService.barCountOne(params);
  192. List<String> xAxis = new ArrayList<>();//报表x轴
  193. List<List<String>> yAxis = new ArrayList<>();//y轴
  194. List<String> legend = new ArrayList<>();//标题
  195. List<String> yAxis0 = new ArrayList<>();
  196. yAxis.add(yAxis0);
  197. legend.add("");
  198. for(Map<String, Object> map :result){
  199. String oneValue = String.valueOf(map.get("name"));
  200. String value = String.valueOf(map.get("value"));
  201. xAxis.add(oneValue);
  202. yAxis0.add(value);
  203. }
  204. Map<String, Object> resultMap = new HashMap<>();
  205. resultMap.put("xAxis",xAxis);
  206. resultMap.put("yAxis",yAxis);
  207. resultMap.put("legend",legend);
  208. return R.ok().put("data", resultMap);
  209. }
  210. /**
  211. * 柱状图统计双列
  212. * @return
  213. */
  214. @RequestMapping("/barSumTwo")
  215. public R barSumTwo(@RequestParam Map<String,Object> params) {
  216. logger.debug("柱状图统计双列:,,Controller:{},,params:{}",this.getClass().getName(),params);
  217. List<Map<String, Object>> result = commonService.barSumTwo(params);
  218. List<String> xAxis = new ArrayList<>();//报表x轴
  219. List<List<String>> yAxis = new ArrayList<>();//y轴
  220. List<String> legend = new ArrayList<>();//标题
  221. Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
  222. for(Map<String, Object> map :result){
  223. String name1Value = String.valueOf(map.get("name1"));
  224. String name2Value = String.valueOf(map.get("name2"));
  225. String value = String.valueOf(map.get("value"));
  226. if(!legend.contains(name2Value)){
  227. legend.add(name2Value);//添加完成后 就是最全的第二列的类型
  228. }
  229. if(dataMap.containsKey(name1Value)){
  230. dataMap.get(name1Value).put(name2Value,value);
  231. }else{
  232. HashMap<String, String> name1Data = new HashMap<>();
  233. name1Data.put(name2Value,value);
  234. dataMap.put(name1Value,name1Data);
  235. }
  236. }
  237. for(int i =0; i<legend.size(); i++){
  238. yAxis.add(new ArrayList<String>());
  239. }
  240. Set<String> keys = dataMap.keySet();
  241. for(String key:keys){
  242. xAxis.add(key);
  243. HashMap<String, String> map = dataMap.get(key);
  244. for(int i =0; i<legend.size(); i++){
  245. List<String> data = yAxis.get(i);
  246. if(StringUtil.isNotEmpty(map.get(legend.get(i)))){
  247. data.add(map.get(legend.get(i)));
  248. }else{
  249. data.add("0");
  250. }
  251. }
  252. }
  253. System.out.println();
  254. Map<String, Object> resultMap = new HashMap<>();
  255. resultMap.put("xAxis",xAxis);
  256. resultMap.put("yAxis",yAxis);
  257. resultMap.put("legend",legend);
  258. return R.ok().put("data", resultMap);
  259. }
  260. /**
  261. * 柱状图统计双列
  262. * @return
  263. */
  264. @RequestMapping("/barCountTwo")
  265. public R barCountTwo(@RequestParam Map<String,Object> params) {
  266. logger.debug("柱状图统计双列:,,Controller:{},,params:{}",this.getClass().getName(),params);
  267. List<Map<String, Object>> result = commonService.barCountTwo(params);
  268. List<String> xAxis = new ArrayList<>();//报表x轴
  269. List<List<String>> yAxis = new ArrayList<>();//y轴
  270. List<String> legend = new ArrayList<>();//标题
  271. Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
  272. for(Map<String, Object> map :result){
  273. String name1Value = String.valueOf(map.get("name1"));
  274. String name2Value = String.valueOf(map.get("name2"));
  275. String value = String.valueOf(map.get("value"));
  276. if(!legend.contains(name2Value)){
  277. legend.add(name2Value);//添加完成后 就是最全的第二列的类型
  278. }
  279. if(dataMap.containsKey(name1Value)){
  280. dataMap.get(name1Value).put(name2Value,value);
  281. }else{
  282. HashMap<String, String> name1Data = new HashMap<>();
  283. name1Data.put(name2Value,value);
  284. dataMap.put(name1Value,name1Data);
  285. }
  286. }
  287. for(int i =0; i<legend.size(); i++){
  288. yAxis.add(new ArrayList<String>());
  289. }
  290. Set<String> keys = dataMap.keySet();
  291. for(String key:keys){
  292. xAxis.add(key);
  293. HashMap<String, String> map = dataMap.get(key);
  294. for(int i =0; i<legend.size(); i++){
  295. List<String> data = yAxis.get(i);
  296. if(StringUtil.isNotEmpty(map.get(legend.get(i)))){
  297. data.add(map.get(legend.get(i)));
  298. }else{
  299. data.add("0");
  300. }
  301. }
  302. }
  303. System.out.println();
  304. Map<String, Object> resultMap = new HashMap<>();
  305. resultMap.put("xAxis",xAxis);
  306. resultMap.put("yAxis",yAxis);
  307. resultMap.put("legend",legend);
  308. return R.ok().put("data", resultMap);
  309. }
  310. /**
  311. tableName 查询表
  312. condition1 条件1
  313. condition1Value 条件1
  314. average 计算平均评分
  315. 取值
  316. 有值 Number(res.data.value.toFixed(1))
  317. 无值 if(res.data){}
  318. * */
  319. @IgnoreAuth
  320. @RequestMapping("/queryScore")
  321. public R queryScore(@RequestParam Map<String, Object> params) {
  322. logger.debug("queryScore:,,Controller:{},,params:{}",this.getClass().getName(),params);
  323. Map<String, Object> queryScore = commonService.queryScore(params);
  324. return R.ok().put("data", queryScore);
  325. }
  326. /**
  327. * 查询字典表的分组统计总条数
  328. * tableName 表名
  329. * groupColumn 分组字段
  330. * @return
  331. */
  332. @RequestMapping("/newSelectGroupCount")
  333. public R newSelectGroupCount(@RequestParam Map<String,Object> params) {
  334. logger.debug("newSelectGroupCount:,,Controller:{},,params:{}",this.getClass().getName(),params);
  335. List<Map<String, Object>> result = commonService.newSelectGroupCount(params);
  336. return R.ok().put("data", result);
  337. }
  338. /**
  339. * 查询字典表的分组求和
  340. * tableName 表名
  341. * groupColumn 分组字段
  342. * sumCloum 统计字段
  343. * @return
  344. */
  345. @RequestMapping("/newSelectGroupSum")
  346. public R newSelectGroupSum(@RequestParam Map<String,Object> params) {
  347. logger.debug("newSelectGroupSum:,,Controller:{},,params:{}",this.getClass().getName(),params);
  348. List<Map<String, Object>> result = commonService.newSelectGroupSum(params);
  349. return R.ok().put("data", result);
  350. }
  351. /**
  352. * 柱状图求和 老的
  353. */
  354. @RequestMapping("/barSum")
  355. public R barSum(@RequestParam Map<String,Object> params) {
  356. logger.debug("barSum方法:,,Controller:{},,params:{}",this.getClass().getName(), com.alibaba.fastjson.JSONObject.toJSONString(params));
  357. Boolean isJoinTableFlag = false;//是否有级联表相关
  358. String one = "";//第一优先
  359. String two = "";//第二优先
  360. //处理thisTable和joinTable 处理内容是把json字符串转为Map并把带有,的切割为数组
  361. //当前表
  362. Map<String,Object> thisTable = JSON.parseObject(String.valueOf(params.get("thisTable")),Map.class);
  363. params.put("thisTable",thisTable);
  364. //级联表
  365. String joinTableString = String.valueOf(params.get("joinTable"));
  366. if(StringUtil.isNotEmpty(joinTableString)) {
  367. Map<String, Object> joinTable = JSON.parseObject(joinTableString, Map.class);
  368. params.put("joinTable", joinTable);
  369. isJoinTableFlag = true;
  370. }
  371. if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("date")))){//当前表日期
  372. thisTable.put("date",String.valueOf(thisTable.get("date")).split(","));
  373. one = "thisDate0";
  374. }
  375. if(isJoinTableFlag){//级联表日期
  376. Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
  377. if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("date")))){
  378. joinTable.put("date",String.valueOf(joinTable.get("date")).split(","));
  379. if(StringUtil.isEmpty(one)){
  380. one ="joinDate0";
  381. }else{
  382. if(StringUtil.isEmpty(two)){
  383. two ="joinDate0";
  384. }
  385. }
  386. }
  387. }
  388. if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("string")))){//当前表字符串
  389. thisTable.put("string",String.valueOf(thisTable.get("string")).split(","));
  390. if(StringUtil.isEmpty(one)){
  391. one ="thisString0";
  392. }else{
  393. if(StringUtil.isEmpty(two)){
  394. two ="thisString0";
  395. }
  396. }
  397. }
  398. if(isJoinTableFlag){//级联表字符串
  399. Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
  400. if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("string")))){
  401. joinTable.put("string",String.valueOf(joinTable.get("string")).split(","));
  402. if(StringUtil.isEmpty(one)){
  403. one ="joinString0";
  404. }else{
  405. if(StringUtil.isEmpty(two)){
  406. two ="joinString0";
  407. }
  408. }
  409. }
  410. }
  411. if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("types")))){//当前表类型
  412. thisTable.put("types",String.valueOf(thisTable.get("types")).split(","));
  413. if(StringUtil.isEmpty(one)){
  414. one ="thisTypes0";
  415. }else{
  416. if(StringUtil.isEmpty(two)){
  417. two ="thisTypes0";
  418. }
  419. }
  420. }
  421. if(isJoinTableFlag){//级联表类型
  422. Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
  423. if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("types")))){
  424. joinTable.put("types",String.valueOf(joinTable.get("types")).split(","));
  425. if(StringUtil.isEmpty(one)){
  426. one ="joinTypes0";
  427. }else{
  428. if(StringUtil.isEmpty(two)){
  429. two ="joinTypes0";
  430. }
  431. }
  432. }
  433. }
  434. List<Map<String, Object>> result = commonService.barSum(params);
  435. List<String> xAxis = new ArrayList<>();//报表x轴
  436. List<List<String>> yAxis = new ArrayList<>();//y轴
  437. List<String> legend = new ArrayList<>();//标题
  438. if(StringUtil.isEmpty(two)){//不包含第二列
  439. List<String> yAxis0 = new ArrayList<>();
  440. yAxis.add(yAxis0);
  441. legend.add("");
  442. for(Map<String, Object> map :result){
  443. String oneValue = String.valueOf(map.get(one));
  444. String value = String.valueOf(map.get("value"));
  445. xAxis.add(oneValue);
  446. yAxis0.add(value);
  447. }
  448. }else{//包含第二列
  449. Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
  450. if(StringUtil.isNotEmpty(two)){
  451. for(Map<String, Object> map :result){
  452. String oneValue = String.valueOf(map.get(one));
  453. String twoValue = String.valueOf(map.get(two));
  454. String value = String.valueOf(map.get("value"));
  455. if(!legend.contains(twoValue)){
  456. legend.add(twoValue);//添加完成后 就是最全的第二列的类型
  457. }
  458. if(dataMap.containsKey(oneValue)){
  459. dataMap.get(oneValue).put(twoValue,value);
  460. }else{
  461. HashMap<String, String> oneData = new HashMap<>();
  462. oneData.put(twoValue,value);
  463. dataMap.put(oneValue,oneData);
  464. }
  465. }
  466. }
  467. for(int i =0; i<legend.size(); i++){
  468. yAxis.add(new ArrayList<String>());
  469. }
  470. Set<String> keys = dataMap.keySet();
  471. for(String key:keys){
  472. xAxis.add(key);
  473. HashMap<String, String> map = dataMap.get(key);
  474. for(int i =0; i<legend.size(); i++){
  475. List<String> data = yAxis.get(i);
  476. if(StringUtil.isNotEmpty(map.get(legend.get(i)))){
  477. data.add(map.get(legend.get(i)));
  478. }else{
  479. data.add("0");
  480. }
  481. }
  482. }
  483. System.out.println();
  484. }
  485. Map<String, Object> resultMap = new HashMap<>();
  486. resultMap.put("xAxis",xAxis);
  487. resultMap.put("yAxis",yAxis);
  488. resultMap.put("legend",legend);
  489. return R.ok().put("data", resultMap);
  490. }
  491. /**
  492. * 柱状图统计 老的
  493. */
  494. @RequestMapping("/barCount")
  495. public R barCount(@RequestParam Map<String,Object> params) {
  496. logger.debug("barCount方法:,,Controller:{},,params:{}",this.getClass().getName(), com.alibaba.fastjson.JSONObject.toJSONString(params));
  497. Boolean isJoinTableFlag = false;//是否有级联表相关
  498. String one = "";//第一优先
  499. String two = "";//第二优先
  500. //处理thisTable和joinTable 处理内容是把json字符串转为Map并把带有,的切割为数组
  501. //当前表
  502. Map<String,Object> thisTable = JSON.parseObject(String.valueOf(params.get("thisTable")),Map.class);
  503. params.put("thisTable",thisTable);
  504. //级联表
  505. String joinTableString = String.valueOf(params.get("joinTable"));
  506. if(StringUtil.isNotEmpty(joinTableString)) {
  507. Map<String, Object> joinTable = JSON.parseObject(joinTableString, Map.class);
  508. params.put("joinTable", joinTable);
  509. isJoinTableFlag = true;
  510. }
  511. if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("date")))){//当前表日期
  512. thisTable.put("date",String.valueOf(thisTable.get("date")).split(","));
  513. one = "thisDate0";
  514. }
  515. if(isJoinTableFlag){//级联表日期
  516. Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
  517. if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("date")))){
  518. joinTable.put("date",String.valueOf(joinTable.get("date")).split(","));
  519. if(StringUtil.isEmpty(one)){
  520. one ="joinDate0";
  521. }else{
  522. if(StringUtil.isEmpty(two)){
  523. two ="joinDate0";
  524. }
  525. }
  526. }
  527. }
  528. if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("string")))){//当前表字符串
  529. thisTable.put("string",String.valueOf(thisTable.get("string")).split(","));
  530. if(StringUtil.isEmpty(one)){
  531. one ="thisString0";
  532. }else{
  533. if(StringUtil.isEmpty(two)){
  534. two ="thisString0";
  535. }
  536. }
  537. }
  538. if(isJoinTableFlag){//级联表字符串
  539. Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
  540. if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("string")))){
  541. joinTable.put("string",String.valueOf(joinTable.get("string")).split(","));
  542. if(StringUtil.isEmpty(one)){
  543. one ="joinString0";
  544. }else{
  545. if(StringUtil.isEmpty(two)){
  546. two ="joinString0";
  547. }
  548. }
  549. }
  550. }
  551. if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("types")))){//当前表类型
  552. thisTable.put("types",String.valueOf(thisTable.get("types")).split(","));
  553. if(StringUtil.isEmpty(one)){
  554. one ="thisTypes0";
  555. }else{
  556. if(StringUtil.isEmpty(two)){
  557. two ="thisTypes0";
  558. }
  559. }
  560. }
  561. if(isJoinTableFlag){//级联表类型
  562. Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
  563. if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("types")))){
  564. joinTable.put("types",String.valueOf(joinTable.get("types")).split(","));
  565. if(StringUtil.isEmpty(one)){
  566. one ="joinTypes0";
  567. }else{
  568. if(StringUtil.isEmpty(two)){
  569. two ="joinTypes0";
  570. }
  571. }
  572. }
  573. }
  574. List<Map<String, Object>> result = commonService.barCount(params);
  575. List<String> xAxis = new ArrayList<>();//报表x轴
  576. List<List<String>> yAxis = new ArrayList<>();//y轴
  577. List<String> legend = new ArrayList<>();//标题
  578. if(StringUtil.isEmpty(two)){//不包含第二列
  579. List<String> yAxis0 = new ArrayList<>();
  580. yAxis.add(yAxis0);
  581. legend.add("");
  582. for(Map<String, Object> map :result){
  583. String oneValue = String.valueOf(map.get(one));
  584. String value = String.valueOf(map.get("value"));
  585. xAxis.add(oneValue);
  586. yAxis0.add(value);
  587. }
  588. }else{//包含第二列
  589. Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
  590. if(StringUtil.isNotEmpty(two)){
  591. for(Map<String, Object> map :result){
  592. String oneValue = String.valueOf(map.get(one));
  593. String twoValue = String.valueOf(map.get(two));
  594. String value = String.valueOf(map.get("value"));
  595. if(!legend.contains(twoValue)){
  596. legend.add(twoValue);//添加完成后 就是最全的第二列的类型
  597. }
  598. if(dataMap.containsKey(oneValue)){
  599. dataMap.get(oneValue).put(twoValue,value);
  600. }else{
  601. HashMap<String, String> oneData = new HashMap<>();
  602. oneData.put(twoValue,value);
  603. dataMap.put(oneValue,oneData);
  604. }
  605. }
  606. }
  607. for(int i =0; i<legend.size(); i++){
  608. yAxis.add(new ArrayList<String>());
  609. }
  610. Set<String> keys = dataMap.keySet();
  611. for(String key:keys){
  612. xAxis.add(key);
  613. HashMap<String, String> map = dataMap.get(key);
  614. for(int i =0; i<legend.size(); i++){
  615. List<String> data = yAxis.get(i);
  616. if(StringUtil.isNotEmpty(map.get(legend.get(i)))){
  617. data.add(map.get(legend.get(i)));
  618. }else{
  619. data.add("0");
  620. }
  621. }
  622. }
  623. System.out.println();
  624. }
  625. Map<String, Object> resultMap = new HashMap<>();
  626. resultMap.put("xAxis",xAxis);
  627. resultMap.put("yAxis",yAxis);
  628. resultMap.put("legend",legend);
  629. return R.ok().put("data", resultMap);
  630. }
  631. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/316984
推荐阅读
相关标签
  

闽ICP备14008679号