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 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 +}
... ...