Commit cf97175786b2697eed7abab484af727139dffb4c
1 parent
1131273f
update
Showing
3 changed files
with
411 additions
and
293 deletions
jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java
... | ... | @@ -10,6 +10,7 @@ import org.jeecg.modules.system.entity.SysDictItem; |
10 | 10 | import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; |
11 | 11 | import org.jeecg.modules.wms.config.location.entity.Location; |
12 | 12 | import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; |
13 | +import org.jeecg.modules.wms.home.service.HomePageViewService; | |
13 | 14 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
14 | 15 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; |
15 | 16 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; |
... | ... | @@ -55,21 +56,7 @@ public class HomePageViewController { |
55 | 56 | |
56 | 57 | |
57 | 58 | @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; | |
59 | + HomePageViewService homePageViewService; | |
73 | 60 | |
74 | 61 | |
75 | 62 | /** |
... | ... | @@ -78,75 +65,7 @@ public class HomePageViewController { |
78 | 65 | */ |
79 | 66 | @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT,RequestMethod.POST}) |
80 | 67 | 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)); | |
68 | + return homePageViewService.deliveringAmount(); | |
150 | 69 | } |
151 | 70 | |
152 | 71 | |
... | ... | @@ -156,57 +75,7 @@ public class HomePageViewController { |
156 | 75 | */ |
157 | 76 | @RequestMapping(value = "/inventoryUtilization", method = {RequestMethod.PUT,RequestMethod.POST}) |
158 | 77 | 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)); | |
78 | + return homePageViewService.inventoryUtilization(); | |
210 | 79 | } |
211 | 80 | |
212 | 81 | |
... | ... | @@ -216,58 +85,7 @@ public class HomePageViewController { |
216 | 85 | */ |
217 | 86 | @RequestMapping(value = "/inventoryStatus", method = {RequestMethod.PUT,RequestMethod.POST}) |
218 | 87 | 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)); | |
88 | + return homePageViewService.inventoryStatus(); | |
271 | 89 | } |
272 | 90 | |
273 | 91 | |
... | ... | @@ -277,57 +95,7 @@ public class HomePageViewController { |
277 | 95 | */ |
278 | 96 | @RequestMapping(value = "/inventoryOverview", method = {RequestMethod.PUT,RequestMethod.POST}) |
279 | 97 | 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 | - | |
98 | + return homePageViewService.inventoryOverview(); | |
331 | 99 | } |
332 | 100 | |
333 | 101 | |
... | ... | @@ -338,61 +106,7 @@ public class HomePageViewController { |
338 | 106 | */ |
339 | 107 | @RequestMapping(value = "/getCommonData", method = {RequestMethod.PUT,RequestMethod.POST}) |
340 | 108 | 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); | |
109 | + return homePageViewService.getCommonData(); | |
396 | 110 | } |
397 | 111 | |
398 | 112 | } |
... | ... |
jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java
0 → 100644
1 | +package org.jeecg.modules.wms.home.service; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.extension.service.IService; | |
4 | +import org.jeecg.common.api.vo.Result; | |
5 | +import org.jeecg.modules.wms.config.location.entity.Location; | |
6 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; | |
7 | + | |
8 | +import java.io.Serializable; | |
9 | +import java.util.Collection; | |
10 | + | |
11 | +/** | |
12 | + * @Description: 任务表 | |
13 | + * @Author: jeecg-boot | |
14 | + * @Date: 2022-11-10 | |
15 | + * @Version: V1.0 | |
16 | + */ | |
17 | +public interface HomePageViewService { | |
18 | + | |
19 | + | |
20 | + Result<String> deliveringAmount(); | |
21 | + | |
22 | + Result<String> inventoryUtilization(); | |
23 | + | |
24 | + Result<String> inventoryStatus(); | |
25 | + | |
26 | + Result<String> inventoryOverview(); | |
27 | + | |
28 | + Result getCommonData(); | |
29 | + | |
30 | +} | |
... | ... |
jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java
0 → 100644
1 | +package org.jeecg.modules.wms.home.service.impl; | |
2 | + | |
3 | + | |
4 | +import cn.hutool.core.util.ArrayUtil; | |
5 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
6 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |
7 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |
8 | +import com.github.abel533.echarts.Option; | |
9 | +import com.github.abel533.echarts.axis.Axis; | |
10 | +import com.github.abel533.echarts.axis.CategoryAxis; | |
11 | +import com.github.abel533.echarts.axis.ValueAxis; | |
12 | +import com.github.abel533.echarts.code.*; | |
13 | +import com.github.abel533.echarts.json.GsonUtil; | |
14 | +import com.github.abel533.echarts.series.Line; | |
15 | +import com.github.abel533.echarts.series.Pie; | |
16 | +import com.github.abel533.echarts.style.itemstyle.Normal; | |
17 | +import org.jeecg.common.api.vo.Result; | |
18 | +import org.jeecg.modules.system.entity.SysDictItem; | |
19 | +import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; | |
20 | +import org.jeecg.modules.wms.config.location.entity.Location; | |
21 | +import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; | |
22 | +import org.jeecg.modules.wms.home.service.HomePageViewService; | |
23 | + | |
24 | +import org.jeecg.modules.wms.home.support.ChartData; | |
25 | +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; | |
26 | +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; | |
27 | +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; | |
28 | +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryHeaderServiceImpl; | |
29 | +import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; | |
30 | +import org.jeecg.modules.wms.receipt.receiptHeader.service.impl.ReceiptHeaderServiceImpl; | |
31 | +import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; | |
32 | +import org.jeecg.modules.wms.shipment.shipmentHeader.service.impl.ShipmentHeaderServiceImpl; | |
33 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; | |
34 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; | |
35 | +import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl; | |
36 | +import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl; | |
37 | +import org.jeecg.utils.StringUtils; | |
38 | +import org.jeecg.utils.constant.QuantityConstant; | |
39 | +import org.jeecg.utils.support.Convert; | |
40 | +import org.springframework.stereotype.Service; | |
41 | + | |
42 | +import javax.annotation.Resource; | |
43 | +import java.math.BigDecimal; | |
44 | +import java.text.SimpleDateFormat; | |
45 | +import java.util.*; | |
46 | +import java.util.stream.Collectors; | |
47 | + | |
48 | + | |
49 | +/** | |
50 | + * @Description: 任务表 | |
51 | + * @Author: jeecg-boot | |
52 | + * @Date: 2022-11-10 | |
53 | + * @Version: V1.0 | |
54 | + */ | |
55 | +@Service | |
56 | +public class HomePageViewServiceImpl implements HomePageViewService { | |
57 | + | |
58 | + | |
59 | + @Resource | |
60 | + ShipmentHeaderServiceImpl shipmentHeaderServiceImpl; | |
61 | + @Resource | |
62 | + ReceiptHeaderServiceImpl receiptHeaderServiceImpl; | |
63 | + @Resource | |
64 | + SysDictItemServiceImpl sysDictItemServiceImpl; | |
65 | + @Resource | |
66 | + LocationServiceImpl locationServiceImpl; | |
67 | + @Resource | |
68 | + InventoryDetailServiceImpl inventoryDetailServiceImpl; | |
69 | + @Resource | |
70 | + InventoryHeaderServiceImpl inventoryHeaderServiceImpl; | |
71 | + @Resource | |
72 | + TaskDetailServiceImpl taskDetailServiceImpl; | |
73 | + @Resource | |
74 | + TaskHeaderServiceImpl taskHeaderService; | |
75 | + @Resource | |
76 | + HomePageViewService homePageViewService; | |
77 | + | |
78 | + | |
79 | + @Override | |
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 | + @Override | |
153 | + public Result<String> inventoryUtilization() { | |
154 | + //查询所有容器 select限制字段速度更快 | |
155 | + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
156 | + locationLambdaQueryWrapper.select(Location::getContainerCode); | |
157 | + List<Location> locations = locationServiceImpl.list(locationLambdaQueryWrapper); | |
158 | + | |
159 | + //先存储总数 | |
160 | + int inStock=locations.size(); | |
161 | + | |
162 | + //删除为空的数量 | |
163 | + locations.removeIf(location -> StringUtils.isEmpty(location.getContainerCode())); | |
164 | + | |
165 | + //有货数量 总数-无货数量 | |
166 | + inStock=inStock-locations.size(); | |
167 | + | |
168 | + Option option = new Option(); | |
169 | +// option.title("库存状态分布").title().x("center"); | |
170 | + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); | |
171 | + option.legend().setOrient(Orient.vertical); | |
172 | + option.legend().setRight(10); | |
173 | + option.legend().setTop(20); | |
174 | + option.legend().setBottom(20); | |
175 | + option.legend().setData(new ArrayList<String>()); | |
176 | + List<Object> content = new ArrayList<>(); | |
177 | + content.add("#c23531"); | |
178 | + content.add("#2f4554"); | |
179 | + option.setColor(content); | |
180 | + Pie pie = new Pie(); | |
181 | + pie.setName("货位状态"); | |
182 | + pie.setType(SeriesType.pie); | |
183 | + pie.setRadius("55%"); | |
184 | + pie.setCenter(new String[]{"40%","50%"}); | |
185 | + Normal normal = new Normal(); | |
186 | + normal.setFormatter("{b} \n {c} ({d}%)"); | |
187 | + normal.setBarBorderColor("#eee"); | |
188 | + normal.setBorderWidth(1); | |
189 | + normal.setBorderRadius(4); | |
190 | + pie.label().normal(normal); | |
191 | + pie.itemStyle().emphasis().setShadowBlur(10); | |
192 | + pie.itemStyle().emphasis().setShadowOffsetX(0); | |
193 | + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); | |
194 | + | |
195 | + option.legend().data().add("有货"); | |
196 | + pie.data().add(new ChartData("有货", Convert.toDouble(inStock))); | |
197 | + | |
198 | + option.legend().data().add("无货"); | |
199 | + pie.data().add(new ChartData("无货", Convert.toDouble(locations.size()))); | |
200 | + | |
201 | + option.series(pie); | |
202 | + String format = GsonUtil.format(option); | |
203 | + return Result.ok(GsonUtil.format(option)); | |
204 | + } | |
205 | + | |
206 | + @Override | |
207 | + public Result<String> inventoryStatus() { | |
208 | + Option option = new Option(); | |
209 | + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); | |
210 | + option.legend().setOrient(Orient.vertical); | |
211 | + option.legend().setRight(10); | |
212 | + option.legend().setTop(20); | |
213 | + option.legend().setBottom(10); | |
214 | + option.legend().setData(new ArrayList<String>()); | |
215 | + List<Object> content = new ArrayList<>(); | |
216 | + content.add("#c23531"); | |
217 | + content.add("#2f4554"); | |
218 | + option.setColor(content); | |
219 | + | |
220 | + Pie pie = new Pie(); | |
221 | + pie.setName("库存状态"); | |
222 | + pie.setType(SeriesType.pie); | |
223 | + pie.setRadius("70%"); | |
224 | + pie.setCenter(new String[]{"40%","50%"}); | |
225 | + Normal normal = new Normal(); | |
226 | + normal.setFormatter("{b} \n {c} ({d}%)"); | |
227 | + normal.setBarBorderColor("#eee"); | |
228 | + normal.setBorderWidth(1); | |
229 | + normal.setBorderRadius(4); | |
230 | + pie.label().normal(normal); | |
231 | + pie.itemStyle().emphasis().setShadowBlur(10); | |
232 | + pie.itemStyle().emphasis().setShadowOffsetX(0); | |
233 | + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); | |
234 | + | |
235 | + | |
236 | + QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); | |
237 | + queryWrapper.select("inventory_status ,SUM(qty) qty") | |
238 | + .eq("warehouse_code", "CS0001").groupBy("inventory_status"); | |
239 | + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); | |
240 | + | |
241 | + | |
242 | + LambdaQueryWrapper<SysDictItem> sysDictItemLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
243 | + sysDictItemLambdaQueryWrapper.select(SysDictItem::getItemText,SysDictItem::getItemValue); | |
244 | + List<SysDictItem> sysDictItems = sysDictItemServiceImpl.list(sysDictItemLambdaQueryWrapper); | |
245 | + List<String> collect = sysDictItems.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); | |
246 | + Object[] objects = collect.toArray(); | |
247 | + | |
248 | + | |
249 | + for(InventoryDetail inventoryDetail : inventoryDetails){ | |
250 | + int i = ArrayUtil.indexOf(objects, inventoryDetail.getInventoryStatus()); | |
251 | + ChartData chartData = new ChartData(); | |
252 | + option.legend().getData().add(sysDictItems.get(i).getItemText()); | |
253 | + chartData.setName(sysDictItems.get(i).getItemText()); | |
254 | + chartData.setValue(Convert.toDouble(inventoryDetail.getQty())); | |
255 | + pie.data().add(chartData); | |
256 | + } | |
257 | + option.series().add(pie); | |
258 | + String format = GsonUtil.format(option); | |
259 | + return Result.ok(GsonUtil.format(option)); | |
260 | + } | |
261 | + | |
262 | + @Override | |
263 | + public Result<String> inventoryOverview() { | |
264 | + QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); | |
265 | + queryWrapper.select("material_name, sum(qty) AS qty") | |
266 | + .eq("warehouse_code", "CS0001").groupBy("material_name"); | |
267 | + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); | |
268 | + Option option = new Option(); | |
269 | + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); | |
270 | + option.legend().setOrient(Orient.vertical); | |
271 | + option.legend().setRight(10); | |
272 | + option.legend().setTop(10); | |
273 | + option.legend().setBottom(10); | |
274 | + option.legend().setData(new ArrayList<String>()); | |
275 | + option.legend().setType(LegendType.scroll); | |
276 | + List<Object> content = new ArrayList<>(); | |
277 | + content.add("#c23531"); | |
278 | + content.add("#2f4554"); | |
279 | + option.setColor(content); | |
280 | + Pie pie = new Pie(); | |
281 | + pie.setName("库存"); | |
282 | + pie.setType(SeriesType.pie); | |
283 | + pie.setRadius("55%"); | |
284 | + pie.setCenter(new String[]{"40%","50%"}); | |
285 | + pie.itemStyle().emphasis().setShadowBlur(10); | |
286 | + pie.itemStyle().emphasis().setShadowOffsetX(0); | |
287 | + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); | |
288 | + Normal normal = new Normal(); | |
289 | + normal.setFormatter("{b} \n {c} ({d}%)"); | |
290 | + normal.setBarBorderColor("#eee"); | |
291 | + normal.setBorderWidth(1); | |
292 | + normal.setBorderRadius(4); | |
293 | + pie.label().normal(normal); | |
294 | + | |
295 | + int i = 0; | |
296 | + Map<String, Boolean> map = new HashMap<>(); | |
297 | + for(InventoryDetail inventory: inventoryDetails){ | |
298 | + Object o1 = inventory.getMaterialName(); | |
299 | + Object o2 = inventory.getQty(); | |
300 | + option.legend().data().add(o1); | |
301 | + pie.data().add(new ChartData(o1.toString(), Convert.toDouble(o2))); | |
302 | + if(i<6){ | |
303 | + map.put(o1.toString(),true); | |
304 | + }else{ | |
305 | + map.put(o1.toString(),false); | |
306 | + } | |
307 | + i++; | |
308 | + } | |
309 | + option.series(pie); | |
310 | + option.legend().setSelected(map); | |
311 | + String format = GsonUtil.format(option); | |
312 | + return Result.ok(GsonUtil.format(option)); | |
313 | + } | |
314 | + | |
315 | + @Override | |
316 | + public Result getCommonData() { | |
317 | + //昨天日期 | |
318 | + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - 1000 * 60 * 60 * 24).toString(); | |
319 | + Map<String, Object> map = new HashMap<>(); | |
320 | + | |
321 | + //今天入库量 | |
322 | + LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
323 | + taskDetailLambdaQueryWrapper.select(TaskDetail::getTaskType,TaskDetail::getQty).gt(TaskDetail::getCreateTime,today); | |
324 | + List<TaskDetail> taskDetails = taskDetailServiceImpl.list(taskDetailLambdaQueryWrapper); | |
325 | + BigDecimal receiptQty = BigDecimal.ZERO; | |
326 | + BigDecimal shipmentQty = BigDecimal.ZERO; | |
327 | + | |
328 | + for(TaskDetail taskDetail : taskDetails) | |
329 | + { | |
330 | + if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT)) | |
331 | + { | |
332 | + receiptQty=receiptQty.add(taskDetail.getQty()); | |
333 | + }else if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT)) | |
334 | + { | |
335 | + shipmentQty=shipmentQty.add(taskDetail.getQty()); | |
336 | + } | |
337 | + | |
338 | + } | |
339 | + map.put("receiptTotal",receiptQty); | |
340 | + map.put("shipmentTotal",shipmentQty); | |
341 | + //今日交易量 | |
342 | + map.put("bllCount",receiptQty.add(shipmentQty)); | |
343 | + | |
344 | + | |
345 | + //库存总数 | |
346 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
347 | + inventoryHeaderLambdaQueryWrapper.select(InventoryHeader::getTotalQty); | |
348 | + List<InventoryHeader> inventoryHeaders = inventoryHeaderServiceImpl.list(inventoryHeaderLambdaQueryWrapper); | |
349 | + BigDecimal inventoryQty = BigDecimal.ZERO; | |
350 | + for(InventoryHeader inventoryHeader : inventoryHeaders) | |
351 | + { | |
352 | + inventoryQty=inventoryQty.add(inventoryHeader.getTotalQty()); | |
353 | + } | |
354 | + map.put("inventoryTotal",inventoryQty); | |
355 | + | |
356 | + | |
357 | + //库内品数 | |
358 | + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
359 | + inventoryDetailLambdaQueryWrapper.select(InventoryDetail::getId).groupBy(InventoryDetail::getInventoryStatus); | |
360 | + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(inventoryDetailLambdaQueryWrapper); | |
361 | + map.put("materialCount",inventoryDetails.size()); | |
362 | + | |
363 | + //待执行任务数 | |
364 | + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
365 | + taskHeaderLambdaQueryWrapper.ge(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_RELEASE) | |
366 | + .lt(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_COMPLETED); | |
367 | + List<TaskHeader> taskHeaders = taskHeaderService.list(taskHeaderLambdaQueryWrapper); | |
368 | + map.put("taskUncompletedTotal",taskHeaders.size()); | |
369 | + | |
370 | + return Result.ok(map); | |
371 | + } | |
372 | + | |
373 | + | |
374 | +} | |
... | ... |