Commit cf97175786b2697eed7abab484af727139dffb4c

Authored by 李泰瑜
1 parent 1131273f

update

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,6 +10,7 @@ import org.jeecg.modules.system.entity.SysDictItem;
10 import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; 10 import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl;
11 import org.jeecg.modules.wms.config.location.entity.Location; 11 import org.jeecg.modules.wms.config.location.entity.Location;
12 import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; 12 import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl;
  13 +import org.jeecg.modules.wms.home.service.HomePageViewService;
13 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; 14 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.entity.InventoryHeader;
15 import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; 16 import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl;
@@ -55,21 +56,7 @@ public class HomePageViewController { @@ -55,21 +56,7 @@ public class HomePageViewController {
55 56
56 57
57 @Resource 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,75 +65,7 @@ public class HomePageViewController {
78 */ 65 */
79 @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT,RequestMethod.POST}) 66 @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT,RequestMethod.POST})
80 public Result<String> deliveringAmount() { 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,57 +75,7 @@ public class HomePageViewController {
156 */ 75 */
157 @RequestMapping(value = "/inventoryUtilization", method = {RequestMethod.PUT,RequestMethod.POST}) 76 @RequestMapping(value = "/inventoryUtilization", method = {RequestMethod.PUT,RequestMethod.POST})
158 public Result<String> inventoryUtilization() { 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,58 +85,7 @@ public class HomePageViewController {
216 */ 85 */
217 @RequestMapping(value = "/inventoryStatus", method = {RequestMethod.PUT,RequestMethod.POST}) 86 @RequestMapping(value = "/inventoryStatus", method = {RequestMethod.PUT,RequestMethod.POST})
218 public Result<String> inventoryStatus() { 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,57 +95,7 @@ public class HomePageViewController {
277 */ 95 */
278 @RequestMapping(value = "/inventoryOverview", method = {RequestMethod.PUT,RequestMethod.POST}) 96 @RequestMapping(value = "/inventoryOverview", method = {RequestMethod.PUT,RequestMethod.POST})
279 public Result<String> inventoryOverview() { 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,61 +106,7 @@ public class HomePageViewController {
338 */ 106 */
339 @RequestMapping(value = "/getCommonData", method = {RequestMethod.PUT,RequestMethod.POST}) 107 @RequestMapping(value = "/getCommonData", method = {RequestMethod.PUT,RequestMethod.POST})
340 public Result getCommonData() { 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 +}