Commit 416dc07317a72da5e29946fdbef7b5bea22bd519
1 parent
11db90fe
首页移植完成
Showing
6 changed files
with
705 additions
and
30 deletions
jeecg-boot-master/ant-design-vue-jeecg/src/api/api.js
... | ... | @@ -44,6 +44,8 @@ const queryParentName = (params)=>getAction("/sys/sysDepart/queryParentName",p |
44 | 44 | const searchByKeywords = (params)=>getAction("/sys/sysDepart/searchBy",params); |
45 | 45 | const deleteByDepartId = (params)=>deleteAction("/sys/sysDepart/delete",params); |
46 | 46 | |
47 | + | |
48 | + | |
47 | 49 | //二级部门管理 |
48 | 50 | const queryDepartPermission = (params)=>getAction("/sys/permission/queryDepartPermission",params); |
49 | 51 | const saveDepartPermission = (params)=>postAction("/sys/permission/saveDepartPermission",params); |
... | ... | @@ -171,7 +173,12 @@ export const combination = (params)=>postAction('/shipment/shipmentCombination/c |
171 | 173 | export const backErpReceipt = (params)=>postAction('/receipt/receiptHeader/backErpReceipt', params); |
172 | 174 | //回传出库单 |
173 | 175 | export const backErpShipment = (params)=>postAction('/shipment/shipmentHeader/backErpShipment', params); |
174 | - | |
176 | +//首页取值 | |
177 | +export const deliveringAmount = (params)=>postAction("/sys/home/deliveringAmount",params); | |
178 | +export const inventoryUtilization = (params)=>postAction("/sys/home/inventoryUtilization",params); | |
179 | +export const inventoryStatus = (params)=>postAction("/sys/home/inventoryStatus",params); | |
180 | +export const inventoryOverview = (params)=>postAction("/sys/home/inventoryOverview",params); | |
181 | +export const getCommonData = (params)=>postAction("/sys/home/getCommonData",params); | |
175 | 182 | // 中转HTTP请求 |
176 | 183 | export const transitRESTful = { |
177 | 184 | get: (url, parameter) => getAction(getTransitURL(url), parameter), |
... | ... |
jeecg-boot-master/ant-design-vue-jeecg/src/views/dashboard/Analysis.vue
1 | 1 | <template> |
2 | 2 | <div> |
3 | - <index-chart v-if="indexStyle==1"></index-chart> | |
4 | - <index-bdc v-if="indexStyle==2"></index-bdc> | |
5 | - <index-task v-if="indexStyle==3"></index-task> | |
6 | - <div style="width: 100%;text-align: right;margin-top: 20px"> | |
7 | - 请选择首页样式: | |
8 | - <a-radio-group v-model="indexStyle"> | |
9 | - <a-radio :value="1">统计图表</a-radio> | |
10 | - <a-radio :value="2">统计图表2</a-radio> | |
11 | - <a-radio :value="3">任务表格</a-radio> | |
12 | - </a-radio-group> | |
13 | - </div> | |
3 | + <a-row :gutter="24"> | |
4 | + | |
5 | + <div class="col-sm-2" style="padding:5px;"> | |
6 | + <a class="menuItem" href="/wms/inventory/inventoryTransaction"> | |
7 | + | |
8 | + <div class="total_box ys01"> | |
9 | + <h1>{{s1}}</h1> | |
10 | + <p>今日库存交易量</p> | |
11 | + </div> | |
12 | + </a> | |
13 | + </div> | |
14 | + <div class="col-sm-2" style="padding:5px;"> | |
15 | + <a class="menuItem" href="/wms/receipt/receiptHeader/900/0"> | |
16 | + <div class="total_box ys02"> | |
17 | + <h1>{{s2}}</h1> | |
18 | + <p>今日入库量</p> | |
19 | + </div> | |
20 | + </a> | |
21 | + </div> | |
22 | + <div class="col-sm-2" style="padding:5px;"> | |
23 | + <a class="menuItem" href="/wms/shipment/shipmentHeader"> | |
24 | + <div class="total_box ys03"> | |
25 | + <h1>{{s3}}</h1> | |
26 | + <p>今日出库量</p> | |
27 | + </div> | |
28 | + </a> | |
29 | + </div> | |
30 | + <div class="col-sm-2" style="padding:5px;"> | |
31 | + <a class="menuItem" href="/wms/inventory/inventoryHeader"> | |
32 | + <div class="total_box ys04"> | |
33 | + <h1>{{s4}}</h1> | |
34 | + <p>库存总量</p> | |
35 | + </div> | |
36 | + </a> | |
37 | + </div> | |
38 | + <div class="col-sm-2" style="padding:5px;"> | |
39 | + <a class="menuItem" href="/wms/inventory/inventoryMaterialSummary"> | |
40 | + <div class="total_box ys05"> | |
41 | + <h1>{{s5}}</h1> | |
42 | + <p>库内物料品数</p> | |
43 | + </div> | |
44 | + </a> | |
45 | + </div> | |
46 | + <div class="col-sm-2" style="padding:5px;"> | |
47 | + <a class="menuItem" href="/wms/task/taskHeader?InternalTaskType=100"> | |
48 | + <div class="total_box ys06"> | |
49 | + <h1>{{s6}}</h1> | |
50 | + <p>待执行任务数</p> | |
51 | + </div> | |
52 | + </a> | |
53 | + </div> | |
54 | + | |
55 | + </a-row> | |
56 | + | |
57 | + | |
58 | + <a-row :gutter="24"> | |
59 | + <a-col :span="12"> | |
60 | + <a-card :loading="loading" :bordered="false" title="历史每日收发货量" :style="{ marginTop: '24px' }"> | |
61 | + <a-row> | |
62 | + <a-col :span="19"> | |
63 | + <div id="chart1" class="flot-chart1"> | |
64 | + 这里放图表 | |
65 | + </div> | |
66 | + </a-col> | |
67 | + </a-row> | |
68 | + <line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid> | |
69 | + </a-card> | |
70 | + </a-col> | |
71 | + <a-col :span="12"> | |
72 | + <a-card :loading="loading" :bordered="false" title="库位利用率" :style="{ marginTop: '24px' }"> | |
73 | + <a-row> | |
74 | + <a-col :span="19"> | |
75 | + <div id="chart2" class="flot-chart1"> | |
76 | + 这里放图表 | |
77 | + </div> | |
78 | + </a-col> | |
79 | + </a-row> | |
80 | + <line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid> | |
81 | + </a-card> | |
82 | + </a-col> | |
83 | + </a-row> | |
84 | + | |
85 | + | |
86 | + <a-row :gutter="24"> | |
87 | + <a-col :span="12"> | |
88 | + <a-card :loading="loading" :bordered="false" title="在线库存状态" :style="{ marginTop: '24px' }"> | |
89 | + <a-row> | |
90 | + <a-col :span="19"> | |
91 | + <div id="chart3" class="flot-chart1"> | |
92 | + 这里放图表 | |
93 | + </div> | |
94 | + </a-col> | |
95 | + </a-row> | |
96 | + <line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid> | |
97 | + </a-card> | |
98 | + </a-col> | |
99 | + <a-col :span="12"> | |
100 | + <a-card :loading="loading" :bordered="false" title="库存概况" :style="{ marginTop: '24px' }"> | |
101 | + <a-row> | |
102 | + <a-col :span="19"> | |
103 | + <div id="chart4" class="flot-chart1"> | |
104 | + 这里放图表 | |
105 | + </div> | |
106 | + </a-col> | |
107 | + </a-row> | |
108 | + <line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid> | |
109 | + </a-card> | |
110 | + </a-col> | |
111 | + </a-row> | |
112 | + | |
113 | + | |
14 | 114 | </div> |
15 | 115 | </template> |
16 | 116 | |
17 | -<script> | |
18 | - import IndexChart from './IndexChart' | |
19 | - import IndexTask from "./IndexTask" | |
20 | - import IndexBdc from './IndexBdc' | |
21 | - | |
117 | +<script language = "javascript" type = "text/javascript"> | |
118 | + import {inventoryOverview,deliveringAmount,inventoryUtilization,inventoryStatus,getCommonData} from '@/api/api' | |
22 | 119 | export default { |
23 | - name: "Analysis", | |
24 | - components: { | |
25 | - IndexChart, | |
26 | - IndexTask, | |
27 | - IndexBdc | |
28 | - }, | |
29 | - data() { | |
30 | - return { | |
31 | - indexStyle:1 | |
120 | + name: 'Echartdemo', | |
121 | + data(){ | |
122 | + return{ | |
123 | + msg: 'EChart demo', | |
124 | + s1:"0", | |
125 | + s2:"0", | |
126 | + s3:"0", | |
127 | + s4:"0", | |
128 | + s5:"0", | |
129 | + s6:"0" | |
32 | 130 | } |
33 | 131 | }, |
34 | - created() { | |
35 | - | |
132 | + mounted(){ | |
133 | + this.drawLine(); | |
36 | 134 | }, |
37 | 135 | methods: { |
136 | + drawLine(){ | |
137 | + let chart1 = this.$echarts.init(document.getElementById('chart1')) | |
138 | + let chart2 = this.$echarts.init(document.getElementById('chart2')) | |
139 | + let chart3 = this.$echarts.init(document.getElementById('chart3')) | |
140 | + let chart4 = this.$echarts.init(document.getElementById('chart4')) | |
141 | + | |
142 | + | |
143 | + debugger; | |
144 | + deliveringAmount().then((res) => { | |
145 | + if (res.success) { | |
146 | + chart1.setOption(JSON.parse(res.message)); | |
147 | + } | |
148 | + }) | |
149 | + inventoryUtilization().then((res) => { | |
150 | + if (res.success) { | |
151 | + chart2.setOption(JSON.parse(res.message)); | |
152 | + } | |
153 | + }) | |
154 | + inventoryStatus().then((res) => { | |
155 | + if (res.success) { | |
156 | + chart3.setOption(JSON.parse(res.message)); | |
157 | + } | |
158 | + }) | |
159 | + inventoryOverview().then((res) => { | |
160 | + if (res.success) { | |
161 | + chart4.setOption(JSON.parse(res.message)); | |
162 | + } | |
163 | + }) | |
164 | + getCommonData().then((res) => { | |
165 | + if (res.success) { | |
166 | + this.s1=res.result.bllCount | |
167 | + this.s2=res.result.receiptTotal | |
168 | + this.s3=res.result.shipmentTotal | |
169 | + this.s4=res.result.inventoryTotal | |
170 | + this.s5=res.result.materialCount | |
171 | + this.s6=res.result.taskUncompletedTotal | |
172 | + } | |
173 | + }) | |
174 | + | |
175 | + } | |
176 | + } | |
177 | + } | |
178 | +</script> | |
38 | 179 | |
180 | +<style scoped> | |
181 | + @media (min-width: 768px) { | |
182 | + .col-sm-2 { | |
183 | + float: left | |
39 | 184 | } |
185 | + .col-sm-2 { | |
186 | + width: 16.66666667% | |
187 | + } | |
188 | + | |
189 | + } | |
190 | + .panel-heading h1, .panel-heading h2 { | |
191 | + margin-bottom: 5px | |
192 | + } | |
193 | + | |
194 | + .ibox-content h1, .ibox-content h2, .ibox-content h3, .ibox-content h4, .ibox-content h5, .ibox-title h1, .ibox-title h2, .ibox-title h3, .ibox-title h4, .ibox-title h5 { | |
195 | + margin-top: 5px | |
196 | + } | |
197 | + | |
198 | + h1 { | |
199 | + font-size: 30px; | |
200 | + color:#fff; | |
201 | + } | |
202 | + | |
203 | + .total_box{ | |
204 | + text-align:center; | |
205 | + color:#fff; | |
206 | + padding:8px 0 10px 0; | |
207 | + } | |
208 | + .total_box:hover{ | |
209 | + opacity:0.8; | |
210 | + } | |
211 | + .ys01{ | |
212 | + background:#1ab394; | |
213 | + } | |
214 | + .ys02{ | |
215 | + background:#23c6c8; | |
216 | + } | |
217 | + .ys03{ | |
218 | + background:#1c84c6; | |
219 | + } | |
220 | + .ys04{ | |
221 | + background:#8d95c5; | |
222 | + } | |
223 | + .ys05{ | |
224 | + background:#e59aa6; | |
225 | + } | |
226 | + .ys06{ | |
227 | + background:#f8ac59; | |
228 | + } | |
229 | + .flot-chart1{ | |
230 | + height:290px; | |
40 | 231 | } |
41 | -</script> | |
42 | 232 | \ No newline at end of file |
233 | +</style> | |
43 | 234 | \ No newline at end of file |
... | ... |
jeecg-boot-master/ant-design-vue-jeecg/src/views/dashboard/Analysisbak.vue
0 → 100644
1 | +<template> | |
2 | +<!-- 原首页文件备份--> | |
3 | + <div> | |
4 | + <index-chart v-if="indexStyle==1"></index-chart> | |
5 | + <index-bdc v-if="indexStyle==2"></index-bdc> | |
6 | + <index-task v-if="indexStyle==3"></index-task> | |
7 | + <div style="width: 100%;text-align: right;margin-top: 20px"> | |
8 | + 请选择首页样式: | |
9 | + <a-radio-group v-model="indexStyle"> | |
10 | + <a-radio :value="1">统计图表</a-radio> | |
11 | + <a-radio :value="2">统计图表2</a-radio> | |
12 | + <a-radio :value="3">任务表格</a-radio> | |
13 | + </a-radio-group> | |
14 | + </div> | |
15 | + </div> | |
16 | +</template> | |
17 | + | |
18 | +<script> | |
19 | + import IndexChart from './IndexChart' | |
20 | + import IndexTask from "./IndexTask" | |
21 | + import IndexBdc from './IndexBdc' | |
22 | + | |
23 | + export default { | |
24 | + name: "Analysis", | |
25 | + components: { | |
26 | + IndexChart, | |
27 | + IndexTask, | |
28 | + IndexBdc | |
29 | + }, | |
30 | + data() { | |
31 | + return { | |
32 | + indexStyle:1 | |
33 | + } | |
34 | + }, | |
35 | + created() { | |
36 | + | |
37 | + }, | |
38 | + methods: { | |
39 | + | |
40 | + } | |
41 | + } | |
42 | +</script> | |
0 | 43 | \ No newline at end of file |
... | ... |
jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/pom.xml
... | ... | @@ -34,6 +34,11 @@ |
34 | 34 | <groupId>org.jeecgframework.boot</groupId> |
35 | 35 | <artifactId>jeecg-system-local-api</artifactId> |
36 | 36 | </dependency> |
37 | + <dependency> | |
38 | + <groupId>com.github.abel533</groupId> | |
39 | + <artifactId>ECharts</artifactId> | |
40 | + <version>3.0.0.5</version> | |
41 | + </dependency> | |
37 | 42 | <!-- jeewx api --> |
38 | 43 | <dependency> |
39 | 44 | <groupId>org.jeecgframework</groupId> |
... | ... | @@ -79,4 +84,4 @@ |
79 | 84 | </plugin> |
80 | 85 | </plugins> |
81 | 86 | </build> |
82 | -</project> | |
83 | 87 | \ No newline at end of file |
88 | +</project> | |
... | ... |
jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java
0 → 100644
1 | +package org.jeecg.modules.wms.home.controller; | |
2 | + | |
3 | +import cn.hutool.core.util.ArrayUtil; | |
4 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
5 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |
6 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |
7 | +import lombok.extern.slf4j.Slf4j; | |
8 | +import org.jeecg.common.api.vo.Result; | |
9 | +import org.jeecg.modules.system.entity.SysDictItem; | |
10 | +import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; | |
11 | +import org.jeecg.modules.wms.config.location.entity.Location; | |
12 | +import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; | |
13 | +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; | |
14 | +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; | |
15 | +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; | |
16 | +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryHeaderServiceImpl; | |
17 | +import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; | |
18 | +import org.jeecg.modules.wms.receipt.receiptHeader.service.impl.ReceiptHeaderServiceImpl; | |
19 | +import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; | |
20 | +import com.github.abel533.echarts.Option; | |
21 | +import com.github.abel533.echarts.axis.Axis; | |
22 | +import com.github.abel533.echarts.axis.CategoryAxis; | |
23 | +import com.github.abel533.echarts.axis.ValueAxis; | |
24 | +import com.github.abel533.echarts.code.*; | |
25 | +import com.github.abel533.echarts.json.GsonUtil; | |
26 | +import com.github.abel533.echarts.series.Line; | |
27 | +import com.github.abel533.echarts.series.Pie; | |
28 | +import com.github.abel533.echarts.style.itemstyle.Normal; | |
29 | +import org.jeecg.modules.wms.shipment.shipmentHeader.service.impl.ShipmentHeaderServiceImpl; | |
30 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; | |
31 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; | |
32 | +import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl; | |
33 | +import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl; | |
34 | +import org.jeecg.utils.StringUtils; | |
35 | +import org.jeecg.modules.wms.home.support.ChartData; | |
36 | +import org.jeecg.utils.constant.QuantityConstant; | |
37 | +import org.jeecg.utils.support.Convert; | |
38 | +import org.springframework.web.bind.annotation.*; | |
39 | + | |
40 | +import javax.annotation.Resource; | |
41 | +import java.math.BigDecimal; | |
42 | +import java.text.SimpleDateFormat; | |
43 | +import java.util.*; | |
44 | +import java.util.stream.Collectors; | |
45 | + | |
46 | +/** | |
47 | + * @Description: 首页视图 | |
48 | + * @Author lty | |
49 | + * @Date 2023/1/9 | |
50 | + */ | |
51 | +@RestController | |
52 | +@RequestMapping("/sys/home") | |
53 | +@Slf4j | |
54 | +public class HomePageViewController { | |
55 | + | |
56 | + | |
57 | + @Resource | |
58 | + ShipmentHeaderServiceImpl shipmentHeaderServiceImpl; | |
59 | + @Resource | |
60 | + ReceiptHeaderServiceImpl receiptHeaderServiceImpl; | |
61 | + @Resource | |
62 | + SysDictItemServiceImpl sysDictItemServiceImpl; | |
63 | + @Resource | |
64 | + LocationServiceImpl locationServiceImpl; | |
65 | + @Resource | |
66 | + InventoryDetailServiceImpl inventoryDetailServiceImpl; | |
67 | + @Resource | |
68 | + InventoryHeaderServiceImpl inventoryHeaderServiceImpl; | |
69 | + @Resource | |
70 | + TaskDetailServiceImpl taskDetailServiceImpl; | |
71 | + @Resource | |
72 | + TaskHeaderServiceImpl taskHeaderService; | |
73 | + | |
74 | + | |
75 | + /** | |
76 | + * 库存概况 | |
77 | + * @return | |
78 | + */ | |
79 | + @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT,RequestMethod.POST}) | |
80 | + public Result<String> deliveringAmount() { | |
81 | + //查询出库单的7天出库量 | |
82 | + LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
83 | + shipmentHeaderLambdaQueryWrapper | |
84 | + .select(ShipmentHeader::getCreateTime,ShipmentHeader::getTotalQty); | |
85 | + List<ShipmentHeader> shipmentHeaders = shipmentHeaderServiceImpl.list(shipmentHeaderLambdaQueryWrapper); | |
86 | + LinkedHashMap<String, String> list = new LinkedHashMap<>(); | |
87 | + | |
88 | + for (int i=6;i>=0;i--) | |
89 | + { | |
90 | + List<ShipmentHeader> shipmentHeadersCop = shipmentHeaders; | |
91 | + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() -(1000 * 60 * 60 * 24)*i).toString(); | |
92 | + List<ShipmentHeader> collect = shipmentHeadersCop.stream().filter(shipmentHeader -> new SimpleDateFormat("yyyy-MM-dd").format(shipmentHeader.getCreateTime()).toString().contains(today)).collect(Collectors.toList()); | |
93 | + list.put(today, String.valueOf(collect.size())); | |
94 | + } | |
95 | + | |
96 | + | |
97 | + //查询入库单的7天入库量 | |
98 | + LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
99 | + receiptHeaderLambdaQueryWrapper | |
100 | + .select(ReceiptHeader::getCreateTime,ReceiptHeader::getTotalqty); | |
101 | + List<ReceiptHeader> receiptHeaders = receiptHeaderServiceImpl.list(receiptHeaderLambdaQueryWrapper); | |
102 | + LinkedHashMap<String, String> list2 = new LinkedHashMap<>(); | |
103 | + for (int i=6;i>=0;i--) | |
104 | + { | |
105 | + List<ReceiptHeader> receiptHeadersCop = receiptHeaders; | |
106 | + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() -(1000 * 60 * 60 * 24)*i).toString(); | |
107 | + List<ReceiptHeader> collect = receiptHeadersCop.stream().filter(ReceiptHeader -> new SimpleDateFormat("yyyy-MM-dd").format(ReceiptHeader.getCreateTime()).toString().contains(today)).collect(Collectors.toList()); | |
108 | + list2.put(today, String.valueOf(collect.size())); | |
109 | + } | |
110 | + | |
111 | + Option option = new Option(); | |
112 | + option.tooltip().trigger(Trigger.axis).axisPointer().type(PointerType.cross); | |
113 | + option.grid().setLeft("3%"); | |
114 | + option.grid().setRight("4%"); | |
115 | + option.grid().setBottom("3%"); | |
116 | + List<Object> content = new ArrayList<>(); | |
117 | + content.add("#c23531"); | |
118 | + content.add("#2f4554"); | |
119 | + option.setColor(content); | |
120 | + option.grid().containLabel(true); | |
121 | + option.legend().data().add("收货量"); | |
122 | + option.legend().data().add("发货量"); | |
123 | + Map<Object, Object> map = new HashMap<>(); | |
124 | + Axis axis = new CategoryAxis() ; | |
125 | + axis.boundaryGap(false); | |
126 | + Line line = new Line(); | |
127 | + line.setName("发货量"); | |
128 | + for (String key : list.keySet()) { | |
129 | + Object o1 = key; | |
130 | + Object o2 = list.get(key); | |
131 | + axis.data().add(o1); | |
132 | + line.data().add(o2); | |
133 | + } | |
134 | + | |
135 | + Line line2 = new Line(); | |
136 | + line2.setName("收货量"); | |
137 | + for (String key : list2.keySet()) { | |
138 | + Object o1 = key; | |
139 | + Object o2 = list2.get(key); | |
140 | + line2.data().add(o2); | |
141 | + } | |
142 | + | |
143 | + | |
144 | + option.setxAxis(Arrays.asList(axis)); | |
145 | + ValueAxis yAxis = new ValueAxis(); | |
146 | + option.setyAxis(Arrays.asList(yAxis)); | |
147 | + option.series(line,line2); | |
148 | + String format = GsonUtil.format(option); | |
149 | + return Result.ok(GsonUtil.format(option)); | |
150 | + } | |
151 | + | |
152 | + | |
153 | + /** | |
154 | + * 库位利用率 | |
155 | + * @return | |
156 | + */ | |
157 | + @RequestMapping(value = "/inventoryUtilization", method = {RequestMethod.PUT,RequestMethod.POST}) | |
158 | + public Result<String> inventoryUtilization() { | |
159 | + | |
160 | + //查询所有容器 select限制字段速度更快 | |
161 | + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
162 | + locationLambdaQueryWrapper.select(Location::getContainerCode); | |
163 | + List<Location> locations = locationServiceImpl.list(locationLambdaQueryWrapper); | |
164 | + | |
165 | + //先存储总数 | |
166 | + int inStock=locations.size(); | |
167 | + | |
168 | + //删除为空的数量 | |
169 | + locations.removeIf(location -> StringUtils.isEmpty(location.getContainerCode())); | |
170 | + | |
171 | + //有货数量 总数-无货数量 | |
172 | + inStock=inStock-locations.size(); | |
173 | + | |
174 | + Option option = new Option(); | |
175 | +// option.title("库存状态分布").title().x("center"); | |
176 | + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); | |
177 | + option.legend().setOrient(Orient.vertical); | |
178 | + option.legend().setRight(10); | |
179 | + option.legend().setTop(20); | |
180 | + option.legend().setBottom(20); | |
181 | + option.legend().setData(new ArrayList<String>()); | |
182 | + List<Object> content = new ArrayList<>(); | |
183 | + content.add("#c23531"); | |
184 | + content.add("#2f4554"); | |
185 | + option.setColor(content); | |
186 | + Pie pie = new Pie(); | |
187 | + pie.setName("货位状态"); | |
188 | + pie.setType(SeriesType.pie); | |
189 | + pie.setRadius("55%"); | |
190 | + pie.setCenter(new String[]{"40%","50%"}); | |
191 | + Normal normal = new Normal(); | |
192 | + normal.setFormatter("{b} \n {c} ({d}%)"); | |
193 | + normal.setBarBorderColor("#eee"); | |
194 | + normal.setBorderWidth(1); | |
195 | + normal.setBorderRadius(4); | |
196 | + pie.label().normal(normal); | |
197 | + pie.itemStyle().emphasis().setShadowBlur(10); | |
198 | + pie.itemStyle().emphasis().setShadowOffsetX(0); | |
199 | + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); | |
200 | + | |
201 | + option.legend().data().add("有货"); | |
202 | + pie.data().add(new ChartData("有货", Convert.toDouble(inStock))); | |
203 | + | |
204 | + option.legend().data().add("无货"); | |
205 | + pie.data().add(new ChartData("无货", Convert.toDouble(locations.size()))); | |
206 | + | |
207 | + option.series(pie); | |
208 | + String format = GsonUtil.format(option); | |
209 | + return Result.ok(GsonUtil.format(option)); | |
210 | + } | |
211 | + | |
212 | + | |
213 | + /** | |
214 | + * 在线库存状态 | |
215 | + * @return | |
216 | + */ | |
217 | + @RequestMapping(value = "/inventoryStatus", method = {RequestMethod.PUT,RequestMethod.POST}) | |
218 | + public Result<String> inventoryStatus() { | |
219 | + Option option = new Option(); | |
220 | + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); | |
221 | + option.legend().setOrient(Orient.vertical); | |
222 | + option.legend().setRight(10); | |
223 | + option.legend().setTop(20); | |
224 | + option.legend().setBottom(10); | |
225 | + option.legend().setData(new ArrayList<String>()); | |
226 | + List<Object> content = new ArrayList<>(); | |
227 | + content.add("#c23531"); | |
228 | + content.add("#2f4554"); | |
229 | + option.setColor(content); | |
230 | + | |
231 | + Pie pie = new Pie(); | |
232 | + pie.setName("库存状态"); | |
233 | + pie.setType(SeriesType.pie); | |
234 | + pie.setRadius("70%"); | |
235 | + pie.setCenter(new String[]{"40%","50%"}); | |
236 | + Normal normal = new Normal(); | |
237 | + normal.setFormatter("{b} \n {c} ({d}%)"); | |
238 | + normal.setBarBorderColor("#eee"); | |
239 | + normal.setBorderWidth(1); | |
240 | + normal.setBorderRadius(4); | |
241 | + pie.label().normal(normal); | |
242 | + pie.itemStyle().emphasis().setShadowBlur(10); | |
243 | + pie.itemStyle().emphasis().setShadowOffsetX(0); | |
244 | + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); | |
245 | + | |
246 | + | |
247 | + QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); | |
248 | + queryWrapper.select("inventory_status ,SUM(qty) qty") | |
249 | + .eq("warehouse_code", "CS0001").groupBy("inventory_status"); | |
250 | + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); | |
251 | + | |
252 | + | |
253 | + LambdaQueryWrapper<SysDictItem> sysDictItemLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
254 | + sysDictItemLambdaQueryWrapper.select(SysDictItem::getItemText,SysDictItem::getItemValue); | |
255 | + List<SysDictItem> sysDictItems = sysDictItemServiceImpl.list(sysDictItemLambdaQueryWrapper); | |
256 | + List<String> collect = sysDictItems.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); | |
257 | + Object[] objects = collect.toArray(); | |
258 | + | |
259 | + | |
260 | + for(InventoryDetail inventoryDetail : inventoryDetails){ | |
261 | + int i = ArrayUtil.indexOf(objects, inventoryDetail.getInventoryStatus()); | |
262 | + ChartData chartData = new ChartData(); | |
263 | + option.legend().getData().add(sysDictItems.get(i).getItemText()); | |
264 | + chartData.setName(sysDictItems.get(i).getItemText()); | |
265 | + chartData.setValue(Convert.toDouble(inventoryDetail.getQty())); | |
266 | + pie.data().add(chartData); | |
267 | + } | |
268 | + option.series().add(pie); | |
269 | + String format = GsonUtil.format(option); | |
270 | + return Result.ok(GsonUtil.format(option)); | |
271 | + } | |
272 | + | |
273 | + | |
274 | + /** | |
275 | + * 库存概况 | |
276 | + * @return | |
277 | + */ | |
278 | + @RequestMapping(value = "/inventoryOverview", method = {RequestMethod.PUT,RequestMethod.POST}) | |
279 | + public Result<String> inventoryOverview() { | |
280 | + | |
281 | + QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); | |
282 | + queryWrapper.select("material_name, sum(qty) AS qty") | |
283 | + .eq("warehouse_code", "CS0001").groupBy("material_name"); | |
284 | + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); | |
285 | + Option option = new Option(); | |
286 | + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); | |
287 | + option.legend().setOrient(Orient.vertical); | |
288 | + option.legend().setRight(10); | |
289 | + option.legend().setTop(10); | |
290 | + option.legend().setBottom(10); | |
291 | + option.legend().setData(new ArrayList<String>()); | |
292 | + option.legend().setType(LegendType.scroll); | |
293 | + List<Object> content = new ArrayList<>(); | |
294 | + content.add("#c23531"); | |
295 | + content.add("#2f4554"); | |
296 | + option.setColor(content); | |
297 | + Pie pie = new Pie(); | |
298 | + pie.setName("库存"); | |
299 | + pie.setType(SeriesType.pie); | |
300 | + pie.setRadius("55%"); | |
301 | + pie.setCenter(new String[]{"40%","50%"}); | |
302 | + pie.itemStyle().emphasis().setShadowBlur(10); | |
303 | + pie.itemStyle().emphasis().setShadowOffsetX(0); | |
304 | + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); | |
305 | + Normal normal = new Normal(); | |
306 | + normal.setFormatter("{b} \n {c} ({d}%)"); | |
307 | + normal.setBarBorderColor("#eee"); | |
308 | + normal.setBorderWidth(1); | |
309 | + normal.setBorderRadius(4); | |
310 | + pie.label().normal(normal); | |
311 | + | |
312 | + int i = 0; | |
313 | + Map<String, Boolean> map = new HashMap<>(); | |
314 | + for(InventoryDetail inventory: inventoryDetails){ | |
315 | + Object o1 = inventory.getMaterialName(); | |
316 | + Object o2 = inventory.getQty(); | |
317 | + option.legend().data().add(o1); | |
318 | + pie.data().add(new ChartData(o1.toString(), Convert.toDouble(o2))); | |
319 | + if(i<6){ | |
320 | + map.put(o1.toString(),true); | |
321 | + }else{ | |
322 | + map.put(o1.toString(),false); | |
323 | + } | |
324 | + i++; | |
325 | + } | |
326 | + option.series(pie); | |
327 | + option.legend().setSelected(map); | |
328 | + String format = GsonUtil.format(option); | |
329 | + return Result.ok(GsonUtil.format(option)); | |
330 | + | |
331 | + } | |
332 | + | |
333 | + | |
334 | + | |
335 | + /** | |
336 | + * 整体数量概况 | |
337 | + * @return | |
338 | + */ | |
339 | + @RequestMapping(value = "/getCommonData", method = {RequestMethod.PUT,RequestMethod.POST}) | |
340 | + public Result getCommonData() { | |
341 | + | |
342 | + //昨天日期 | |
343 | + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - 1000 * 60 * 60 * 24).toString(); | |
344 | + Map<String, Object> map = new HashMap<>(); | |
345 | + | |
346 | + //今天入库量 | |
347 | + LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
348 | + taskDetailLambdaQueryWrapper.select(TaskDetail::getTaskType,TaskDetail::getQty).gt(TaskDetail::getCreateTime,today); | |
349 | + List<TaskDetail> taskDetails = taskDetailServiceImpl.list(taskDetailLambdaQueryWrapper); | |
350 | + BigDecimal receiptQty = BigDecimal.ZERO; | |
351 | + BigDecimal shipmentQty = BigDecimal.ZERO; | |
352 | + | |
353 | + for(TaskDetail taskDetail : taskDetails) | |
354 | + { | |
355 | + if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT)) | |
356 | + { | |
357 | + receiptQty=receiptQty.add(taskDetail.getQty()); | |
358 | + }else if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT)) | |
359 | + { | |
360 | + shipmentQty=shipmentQty.add(taskDetail.getQty()); | |
361 | + } | |
362 | + | |
363 | + } | |
364 | + map.put("receiptTotal",receiptQty); | |
365 | + map.put("shipmentTotal",shipmentQty); | |
366 | + //今日交易量 | |
367 | + map.put("bllCount",receiptQty.add(shipmentQty)); | |
368 | + | |
369 | + | |
370 | + //库存总数 | |
371 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
372 | + inventoryHeaderLambdaQueryWrapper.select(InventoryHeader::getTotalQty); | |
373 | + List<InventoryHeader> inventoryHeaders = inventoryHeaderServiceImpl.list(inventoryHeaderLambdaQueryWrapper); | |
374 | + BigDecimal inventoryQty = BigDecimal.ZERO; | |
375 | + for(InventoryHeader inventoryHeader : inventoryHeaders) | |
376 | + { | |
377 | + inventoryQty=inventoryQty.add(inventoryHeader.getTotalQty()); | |
378 | + } | |
379 | + map.put("inventoryTotal",inventoryQty); | |
380 | + | |
381 | + | |
382 | + //库内品数 | |
383 | + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
384 | + inventoryDetailLambdaQueryWrapper.select(InventoryDetail::getId).groupBy(InventoryDetail::getInventoryStatus); | |
385 | + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(inventoryDetailLambdaQueryWrapper); | |
386 | + map.put("materialCount",inventoryDetails.size()); | |
387 | + | |
388 | + //待执行任务数 | |
389 | + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
390 | + taskHeaderLambdaQueryWrapper.ge(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_RELEASE) | |
391 | + .lt(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_COMPLETED); | |
392 | + List<TaskHeader> taskHeaders = taskHeaderService.list(taskHeaderLambdaQueryWrapper); | |
393 | + map.put("taskUncompletedTotal",taskHeaders.size()); | |
394 | + | |
395 | + return Result.ok(map); | |
396 | + } | |
397 | + | |
398 | +} | |
... | ... |
jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/support/ChartData.java
0 → 100644
1 | +package org.jeecg.modules.wms.home.support; | |
2 | + | |
3 | +public class ChartData { | |
4 | + | |
5 | + public ChartData(String name, Double value){ | |
6 | + this.name = name; | |
7 | + this.value = value; | |
8 | + } | |
9 | + | |
10 | + public ChartData() { | |
11 | + | |
12 | + } | |
13 | + | |
14 | + private String name; | |
15 | + private Double value; | |
16 | + | |
17 | + public String getName() { | |
18 | + return name; | |
19 | + } | |
20 | + | |
21 | + public void setName(String name) { | |
22 | + this.name = name; | |
23 | + } | |
24 | + | |
25 | + public Double getValue() { | |
26 | + return value; | |
27 | + } | |
28 | + | |
29 | + public void setValue(Double value) { | |
30 | + this.value = value; | |
31 | + } | |
32 | +} | |
... | ... |