diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java index dec9f70..973c0f6 100644 --- a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java +++ b/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; import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; import org.jeecg.modules.wms.config.location.entity.Location; import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; +import org.jeecg.modules.wms.home.service.HomePageViewService; import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; @@ -55,21 +56,7 @@ public class HomePageViewController { @Resource - ShipmentHeaderServiceImpl shipmentHeaderServiceImpl; - @Resource - ReceiptHeaderServiceImpl receiptHeaderServiceImpl; - @Resource - SysDictItemServiceImpl sysDictItemServiceImpl; - @Resource - LocationServiceImpl locationServiceImpl; - @Resource - InventoryDetailServiceImpl inventoryDetailServiceImpl; - @Resource - InventoryHeaderServiceImpl inventoryHeaderServiceImpl; - @Resource - TaskDetailServiceImpl taskDetailServiceImpl; - @Resource - TaskHeaderServiceImpl taskHeaderService; + HomePageViewService homePageViewService; /** @@ -78,75 +65,7 @@ public class HomePageViewController { */ @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> deliveringAmount() { - //查询出库单的7天出库量 - LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); - shipmentHeaderLambdaQueryWrapper - .select(ShipmentHeader::getCreateTime,ShipmentHeader::getTotalQty); - List<ShipmentHeader> shipmentHeaders = shipmentHeaderServiceImpl.list(shipmentHeaderLambdaQueryWrapper); - LinkedHashMap<String, String> list = new LinkedHashMap<>(); - - for (int i=6;i>=0;i--) - { - List<ShipmentHeader> shipmentHeadersCop = shipmentHeaders; - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() -(1000 * 60 * 60 * 24)*i).toString(); - List<ShipmentHeader> collect = shipmentHeadersCop.stream().filter(shipmentHeader -> new SimpleDateFormat("yyyy-MM-dd").format(shipmentHeader.getCreateTime()).toString().contains(today)).collect(Collectors.toList()); - list.put(today, String.valueOf(collect.size())); - } - - - //查询入库单的7天入库量 - LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); - receiptHeaderLambdaQueryWrapper - .select(ReceiptHeader::getCreateTime,ReceiptHeader::getTotalqty); - List<ReceiptHeader> receiptHeaders = receiptHeaderServiceImpl.list(receiptHeaderLambdaQueryWrapper); - LinkedHashMap<String, String> list2 = new LinkedHashMap<>(); - for (int i=6;i>=0;i--) - { - List<ReceiptHeader> receiptHeadersCop = receiptHeaders; - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() -(1000 * 60 * 60 * 24)*i).toString(); - List<ReceiptHeader> collect = receiptHeadersCop.stream().filter(ReceiptHeader -> new SimpleDateFormat("yyyy-MM-dd").format(ReceiptHeader.getCreateTime()).toString().contains(today)).collect(Collectors.toList()); - list2.put(today, String.valueOf(collect.size())); - } - - Option option = new Option(); - option.tooltip().trigger(Trigger.axis).axisPointer().type(PointerType.cross); - option.grid().setLeft("3%"); - option.grid().setRight("4%"); - option.grid().setBottom("3%"); - List<Object> content = new ArrayList<>(); - content.add("#c23531"); - content.add("#2f4554"); - option.setColor(content); - option.grid().containLabel(true); - option.legend().data().add("收货量"); - option.legend().data().add("发货量"); - Map<Object, Object> map = new HashMap<>(); - Axis axis = new CategoryAxis() ; - axis.boundaryGap(false); - Line line = new Line(); - line.setName("发货量"); - for (String key : list.keySet()) { - Object o1 = key; - Object o2 = list.get(key); - axis.data().add(o1); - line.data().add(o2); - } - - Line line2 = new Line(); - line2.setName("收货量"); - for (String key : list2.keySet()) { - Object o1 = key; - Object o2 = list2.get(key); - line2.data().add(o2); - } - - - option.setxAxis(Arrays.asList(axis)); - ValueAxis yAxis = new ValueAxis(); - option.setyAxis(Arrays.asList(yAxis)); - option.series(line,line2); - String format = GsonUtil.format(option); - return Result.ok(GsonUtil.format(option)); + return homePageViewService.deliveringAmount(); } @@ -156,57 +75,7 @@ public class HomePageViewController { */ @RequestMapping(value = "/inventoryUtilization", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> inventoryUtilization() { - - //查询所有容器 select限制字段速度更快 - LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); - locationLambdaQueryWrapper.select(Location::getContainerCode); - List<Location> locations = locationServiceImpl.list(locationLambdaQueryWrapper); - - //先存储总数 - int inStock=locations.size(); - - //删除为空的数量 - locations.removeIf(location -> StringUtils.isEmpty(location.getContainerCode())); - - //有货数量 总数-无货数量 - inStock=inStock-locations.size(); - - Option option = new Option(); -// option.title("库存状态分布").title().x("center"); - option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); - option.legend().setOrient(Orient.vertical); - option.legend().setRight(10); - option.legend().setTop(20); - option.legend().setBottom(20); - option.legend().setData(new ArrayList<String>()); - List<Object> content = new ArrayList<>(); - content.add("#c23531"); - content.add("#2f4554"); - option.setColor(content); - Pie pie = new Pie(); - pie.setName("货位状态"); - pie.setType(SeriesType.pie); - pie.setRadius("55%"); - pie.setCenter(new String[]{"40%","50%"}); - Normal normal = new Normal(); - normal.setFormatter("{b} \n {c} ({d}%)"); - normal.setBarBorderColor("#eee"); - normal.setBorderWidth(1); - normal.setBorderRadius(4); - pie.label().normal(normal); - pie.itemStyle().emphasis().setShadowBlur(10); - pie.itemStyle().emphasis().setShadowOffsetX(0); - pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); - - option.legend().data().add("有货"); - pie.data().add(new ChartData("有货", Convert.toDouble(inStock))); - - option.legend().data().add("无货"); - pie.data().add(new ChartData("无货", Convert.toDouble(locations.size()))); - - option.series(pie); - String format = GsonUtil.format(option); - return Result.ok(GsonUtil.format(option)); + return homePageViewService.inventoryUtilization(); } @@ -216,58 +85,7 @@ public class HomePageViewController { */ @RequestMapping(value = "/inventoryStatus", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> inventoryStatus() { - Option option = new Option(); - option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); - option.legend().setOrient(Orient.vertical); - option.legend().setRight(10); - option.legend().setTop(20); - option.legend().setBottom(10); - option.legend().setData(new ArrayList<String>()); - List<Object> content = new ArrayList<>(); - content.add("#c23531"); - content.add("#2f4554"); - option.setColor(content); - - Pie pie = new Pie(); - pie.setName("库存状态"); - pie.setType(SeriesType.pie); - pie.setRadius("70%"); - pie.setCenter(new String[]{"40%","50%"}); - Normal normal = new Normal(); - normal.setFormatter("{b} \n {c} ({d}%)"); - normal.setBarBorderColor("#eee"); - normal.setBorderWidth(1); - normal.setBorderRadius(4); - pie.label().normal(normal); - pie.itemStyle().emphasis().setShadowBlur(10); - pie.itemStyle().emphasis().setShadowOffsetX(0); - pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); - - - QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("inventory_status ,SUM(qty) qty") - .eq("warehouse_code", "CS0001").groupBy("inventory_status"); - List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); - - - LambdaQueryWrapper<SysDictItem> sysDictItemLambdaQueryWrapper = Wrappers.lambdaQuery(); - sysDictItemLambdaQueryWrapper.select(SysDictItem::getItemText,SysDictItem::getItemValue); - List<SysDictItem> sysDictItems = sysDictItemServiceImpl.list(sysDictItemLambdaQueryWrapper); - List<String> collect = sysDictItems.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); - Object[] objects = collect.toArray(); - - - for(InventoryDetail inventoryDetail : inventoryDetails){ - int i = ArrayUtil.indexOf(objects, inventoryDetail.getInventoryStatus()); - ChartData chartData = new ChartData(); - option.legend().getData().add(sysDictItems.get(i).getItemText()); - chartData.setName(sysDictItems.get(i).getItemText()); - chartData.setValue(Convert.toDouble(inventoryDetail.getQty())); - pie.data().add(chartData); - } - option.series().add(pie); - String format = GsonUtil.format(option); - return Result.ok(GsonUtil.format(option)); + return homePageViewService.inventoryStatus(); } @@ -277,57 +95,7 @@ public class HomePageViewController { */ @RequestMapping(value = "/inventoryOverview", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> inventoryOverview() { - - QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("material_name, sum(qty) AS qty") - .eq("warehouse_code", "CS0001").groupBy("material_name"); - List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); - Option option = new Option(); - option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); - option.legend().setOrient(Orient.vertical); - option.legend().setRight(10); - option.legend().setTop(10); - option.legend().setBottom(10); - option.legend().setData(new ArrayList<String>()); - option.legend().setType(LegendType.scroll); - List<Object> content = new ArrayList<>(); - content.add("#c23531"); - content.add("#2f4554"); - option.setColor(content); - Pie pie = new Pie(); - pie.setName("库存"); - pie.setType(SeriesType.pie); - pie.setRadius("55%"); - pie.setCenter(new String[]{"40%","50%"}); - pie.itemStyle().emphasis().setShadowBlur(10); - pie.itemStyle().emphasis().setShadowOffsetX(0); - pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); - Normal normal = new Normal(); - normal.setFormatter("{b} \n {c} ({d}%)"); - normal.setBarBorderColor("#eee"); - normal.setBorderWidth(1); - normal.setBorderRadius(4); - pie.label().normal(normal); - - int i = 0; - Map<String, Boolean> map = new HashMap<>(); - for(InventoryDetail inventory: inventoryDetails){ - Object o1 = inventory.getMaterialName(); - Object o2 = inventory.getQty(); - option.legend().data().add(o1); - pie.data().add(new ChartData(o1.toString(), Convert.toDouble(o2))); - if(i<6){ - map.put(o1.toString(),true); - }else{ - map.put(o1.toString(),false); - } - i++; - } - option.series(pie); - option.legend().setSelected(map); - String format = GsonUtil.format(option); - return Result.ok(GsonUtil.format(option)); - + return homePageViewService.inventoryOverview(); } @@ -338,61 +106,7 @@ public class HomePageViewController { */ @RequestMapping(value = "/getCommonData", method = {RequestMethod.PUT,RequestMethod.POST}) public Result getCommonData() { - - //昨天日期 - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - 1000 * 60 * 60 * 24).toString(); - Map<String, Object> map = new HashMap<>(); - - //今天入库量 - LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); - taskDetailLambdaQueryWrapper.select(TaskDetail::getTaskType,TaskDetail::getQty).gt(TaskDetail::getCreateTime,today); - List<TaskDetail> taskDetails = taskDetailServiceImpl.list(taskDetailLambdaQueryWrapper); - BigDecimal receiptQty = BigDecimal.ZERO; - BigDecimal shipmentQty = BigDecimal.ZERO; - - for(TaskDetail taskDetail : taskDetails) - { - if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT)) - { - receiptQty=receiptQty.add(taskDetail.getQty()); - }else if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT)) - { - shipmentQty=shipmentQty.add(taskDetail.getQty()); - } - - } - map.put("receiptTotal",receiptQty); - map.put("shipmentTotal",shipmentQty); - //今日交易量 - map.put("bllCount",receiptQty.add(shipmentQty)); - - - //库存总数 - LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); - inventoryHeaderLambdaQueryWrapper.select(InventoryHeader::getTotalQty); - List<InventoryHeader> inventoryHeaders = inventoryHeaderServiceImpl.list(inventoryHeaderLambdaQueryWrapper); - BigDecimal inventoryQty = BigDecimal.ZERO; - for(InventoryHeader inventoryHeader : inventoryHeaders) - { - inventoryQty=inventoryQty.add(inventoryHeader.getTotalQty()); - } - map.put("inventoryTotal",inventoryQty); - - - //库内品数 - LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); - inventoryDetailLambdaQueryWrapper.select(InventoryDetail::getId).groupBy(InventoryDetail::getInventoryStatus); - List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(inventoryDetailLambdaQueryWrapper); - map.put("materialCount",inventoryDetails.size()); - - //待执行任务数 - LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); - taskHeaderLambdaQueryWrapper.ge(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_RELEASE) - .lt(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_COMPLETED); - List<TaskHeader> taskHeaders = taskHeaderService.list(taskHeaderLambdaQueryWrapper); - map.put("taskUncompletedTotal",taskHeaders.size()); - - return Result.ok(map); + return homePageViewService.getCommonData(); } } diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java new file mode 100644 index 0000000..ba84956 --- /dev/null +++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java @@ -0,0 +1,30 @@ +package org.jeecg.modules.wms.home.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.wms.config.location.entity.Location; +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; + +import java.io.Serializable; +import java.util.Collection; + +/** + * @Description: 任务表 + * @Author: jeecg-boot + * @Date: 2022-11-10 + * @Version: V1.0 + */ +public interface HomePageViewService { + + + Result<String> deliveringAmount(); + + Result<String> inventoryUtilization(); + + Result<String> inventoryStatus(); + + Result<String> inventoryOverview(); + + Result getCommonData(); + +} diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java new file mode 100644 index 0000000..5167fb7 --- /dev/null +++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java @@ -0,0 +1,374 @@ +package org.jeecg.modules.wms.home.service.impl; + + +import cn.hutool.core.util.ArrayUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.abel533.echarts.Option; +import com.github.abel533.echarts.axis.Axis; +import com.github.abel533.echarts.axis.CategoryAxis; +import com.github.abel533.echarts.axis.ValueAxis; +import com.github.abel533.echarts.code.*; +import com.github.abel533.echarts.json.GsonUtil; +import com.github.abel533.echarts.series.Line; +import com.github.abel533.echarts.series.Pie; +import com.github.abel533.echarts.style.itemstyle.Normal; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.system.entity.SysDictItem; +import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; +import org.jeecg.modules.wms.config.location.entity.Location; +import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; +import org.jeecg.modules.wms.home.service.HomePageViewService; + +import org.jeecg.modules.wms.home.support.ChartData; +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; +import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryHeaderServiceImpl; +import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; +import org.jeecg.modules.wms.receipt.receiptHeader.service.impl.ReceiptHeaderServiceImpl; +import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; +import org.jeecg.modules.wms.shipment.shipmentHeader.service.impl.ShipmentHeaderServiceImpl; +import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; +import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl; +import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl; +import org.jeecg.utils.StringUtils; +import org.jeecg.utils.constant.QuantityConstant; +import org.jeecg.utils.support.Convert; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * @Description: 任务表 + * @Author: jeecg-boot + * @Date: 2022-11-10 + * @Version: V1.0 + */ +@Service +public class HomePageViewServiceImpl implements HomePageViewService { + + + @Resource + ShipmentHeaderServiceImpl shipmentHeaderServiceImpl; + @Resource + ReceiptHeaderServiceImpl receiptHeaderServiceImpl; + @Resource + SysDictItemServiceImpl sysDictItemServiceImpl; + @Resource + LocationServiceImpl locationServiceImpl; + @Resource + InventoryDetailServiceImpl inventoryDetailServiceImpl; + @Resource + InventoryHeaderServiceImpl inventoryHeaderServiceImpl; + @Resource + TaskDetailServiceImpl taskDetailServiceImpl; + @Resource + TaskHeaderServiceImpl taskHeaderService; + @Resource + HomePageViewService homePageViewService; + + + @Override + public Result<String> deliveringAmount() { + //查询出库单的7天出库量 + LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); + shipmentHeaderLambdaQueryWrapper + .select(ShipmentHeader::getCreateTime,ShipmentHeader::getTotalQty); + List<ShipmentHeader> shipmentHeaders = shipmentHeaderServiceImpl.list(shipmentHeaderLambdaQueryWrapper); + LinkedHashMap<String, String> list = new LinkedHashMap<>(); + + for (int i=6;i>=0;i--) + { + List<ShipmentHeader> shipmentHeadersCop = shipmentHeaders; + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() -(1000 * 60 * 60 * 24)*i).toString(); + List<ShipmentHeader> collect = shipmentHeadersCop.stream().filter(shipmentHeader -> new SimpleDateFormat("yyyy-MM-dd").format(shipmentHeader.getCreateTime()).toString().contains(today)).collect(Collectors.toList()); + list.put(today, String.valueOf(collect.size())); + } + + + //查询入库单的7天入库量 + LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); + receiptHeaderLambdaQueryWrapper + .select(ReceiptHeader::getCreateTime,ReceiptHeader::getTotalqty); + List<ReceiptHeader> receiptHeaders = receiptHeaderServiceImpl.list(receiptHeaderLambdaQueryWrapper); + LinkedHashMap<String, String> list2 = new LinkedHashMap<>(); + for (int i=6;i>=0;i--) + { + List<ReceiptHeader> receiptHeadersCop = receiptHeaders; + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() -(1000 * 60 * 60 * 24)*i).toString(); + List<ReceiptHeader> collect = receiptHeadersCop.stream().filter(ReceiptHeader -> new SimpleDateFormat("yyyy-MM-dd").format(ReceiptHeader.getCreateTime()).toString().contains(today)).collect(Collectors.toList()); + list2.put(today, String.valueOf(collect.size())); + } + + Option option = new Option(); + option.tooltip().trigger(Trigger.axis).axisPointer().type(PointerType.cross); + option.grid().setLeft("3%"); + option.grid().setRight("4%"); + option.grid().setBottom("3%"); + List<Object> content = new ArrayList<>(); + content.add("#c23531"); + content.add("#2f4554"); + option.setColor(content); + option.grid().containLabel(true); + option.legend().data().add("收货量"); + option.legend().data().add("发货量"); + Map<Object, Object> map = new HashMap<>(); + Axis axis = new CategoryAxis() ; + axis.boundaryGap(false); + Line line = new Line(); + line.setName("发货量"); + for (String key : list.keySet()) { + Object o1 = key; + Object o2 = list.get(key); + axis.data().add(o1); + line.data().add(o2); + } + + Line line2 = new Line(); + line2.setName("收货量"); + for (String key : list2.keySet()) { + Object o1 = key; + Object o2 = list2.get(key); + line2.data().add(o2); + } + + + option.setxAxis(Arrays.asList(axis)); + ValueAxis yAxis = new ValueAxis(); + option.setyAxis(Arrays.asList(yAxis)); + option.series(line,line2); + String format = GsonUtil.format(option); + return Result.ok(GsonUtil.format(option)); + } + + @Override + public Result<String> inventoryUtilization() { + //查询所有容器 select限制字段速度更快 + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); + locationLambdaQueryWrapper.select(Location::getContainerCode); + List<Location> locations = locationServiceImpl.list(locationLambdaQueryWrapper); + + //先存储总数 + int inStock=locations.size(); + + //删除为空的数量 + locations.removeIf(location -> StringUtils.isEmpty(location.getContainerCode())); + + //有货数量 总数-无货数量 + inStock=inStock-locations.size(); + + Option option = new Option(); +// option.title("库存状态分布").title().x("center"); + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); + option.legend().setOrient(Orient.vertical); + option.legend().setRight(10); + option.legend().setTop(20); + option.legend().setBottom(20); + option.legend().setData(new ArrayList<String>()); + List<Object> content = new ArrayList<>(); + content.add("#c23531"); + content.add("#2f4554"); + option.setColor(content); + Pie pie = new Pie(); + pie.setName("货位状态"); + pie.setType(SeriesType.pie); + pie.setRadius("55%"); + pie.setCenter(new String[]{"40%","50%"}); + Normal normal = new Normal(); + normal.setFormatter("{b} \n {c} ({d}%)"); + normal.setBarBorderColor("#eee"); + normal.setBorderWidth(1); + normal.setBorderRadius(4); + pie.label().normal(normal); + pie.itemStyle().emphasis().setShadowBlur(10); + pie.itemStyle().emphasis().setShadowOffsetX(0); + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); + + option.legend().data().add("有货"); + pie.data().add(new ChartData("有货", Convert.toDouble(inStock))); + + option.legend().data().add("无货"); + pie.data().add(new ChartData("无货", Convert.toDouble(locations.size()))); + + option.series(pie); + String format = GsonUtil.format(option); + return Result.ok(GsonUtil.format(option)); + } + + @Override + public Result<String> inventoryStatus() { + Option option = new Option(); + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); + option.legend().setOrient(Orient.vertical); + option.legend().setRight(10); + option.legend().setTop(20); + option.legend().setBottom(10); + option.legend().setData(new ArrayList<String>()); + List<Object> content = new ArrayList<>(); + content.add("#c23531"); + content.add("#2f4554"); + option.setColor(content); + + Pie pie = new Pie(); + pie.setName("库存状态"); + pie.setType(SeriesType.pie); + pie.setRadius("70%"); + pie.setCenter(new String[]{"40%","50%"}); + Normal normal = new Normal(); + normal.setFormatter("{b} \n {c} ({d}%)"); + normal.setBarBorderColor("#eee"); + normal.setBorderWidth(1); + normal.setBorderRadius(4); + pie.label().normal(normal); + pie.itemStyle().emphasis().setShadowBlur(10); + pie.itemStyle().emphasis().setShadowOffsetX(0); + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); + + + QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); + queryWrapper.select("inventory_status ,SUM(qty) qty") + .eq("warehouse_code", "CS0001").groupBy("inventory_status"); + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); + + + LambdaQueryWrapper<SysDictItem> sysDictItemLambdaQueryWrapper = Wrappers.lambdaQuery(); + sysDictItemLambdaQueryWrapper.select(SysDictItem::getItemText,SysDictItem::getItemValue); + List<SysDictItem> sysDictItems = sysDictItemServiceImpl.list(sysDictItemLambdaQueryWrapper); + List<String> collect = sysDictItems.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); + Object[] objects = collect.toArray(); + + + for(InventoryDetail inventoryDetail : inventoryDetails){ + int i = ArrayUtil.indexOf(objects, inventoryDetail.getInventoryStatus()); + ChartData chartData = new ChartData(); + option.legend().getData().add(sysDictItems.get(i).getItemText()); + chartData.setName(sysDictItems.get(i).getItemText()); + chartData.setValue(Convert.toDouble(inventoryDetail.getQty())); + pie.data().add(chartData); + } + option.series().add(pie); + String format = GsonUtil.format(option); + return Result.ok(GsonUtil.format(option)); + } + + @Override + public Result<String> inventoryOverview() { + QueryWrapper<InventoryDetail> queryWrapper = new QueryWrapper<>(); + queryWrapper.select("material_name, sum(qty) AS qty") + .eq("warehouse_code", "CS0001").groupBy("material_name"); + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(queryWrapper); + Option option = new Option(); + option.tooltip(Trigger.item).tooltip().formatter("{a} <br/>{b} : {c} ({d}%)"); + option.legend().setOrient(Orient.vertical); + option.legend().setRight(10); + option.legend().setTop(10); + option.legend().setBottom(10); + option.legend().setData(new ArrayList<String>()); + option.legend().setType(LegendType.scroll); + List<Object> content = new ArrayList<>(); + content.add("#c23531"); + content.add("#2f4554"); + option.setColor(content); + Pie pie = new Pie(); + pie.setName("库存"); + pie.setType(SeriesType.pie); + pie.setRadius("55%"); + pie.setCenter(new String[]{"40%","50%"}); + pie.itemStyle().emphasis().setShadowBlur(10); + pie.itemStyle().emphasis().setShadowOffsetX(0); + pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)"); + Normal normal = new Normal(); + normal.setFormatter("{b} \n {c} ({d}%)"); + normal.setBarBorderColor("#eee"); + normal.setBorderWidth(1); + normal.setBorderRadius(4); + pie.label().normal(normal); + + int i = 0; + Map<String, Boolean> map = new HashMap<>(); + for(InventoryDetail inventory: inventoryDetails){ + Object o1 = inventory.getMaterialName(); + Object o2 = inventory.getQty(); + option.legend().data().add(o1); + pie.data().add(new ChartData(o1.toString(), Convert.toDouble(o2))); + if(i<6){ + map.put(o1.toString(),true); + }else{ + map.put(o1.toString(),false); + } + i++; + } + option.series(pie); + option.legend().setSelected(map); + String format = GsonUtil.format(option); + return Result.ok(GsonUtil.format(option)); + } + + @Override + public Result getCommonData() { + //昨天日期 + String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - 1000 * 60 * 60 * 24).toString(); + Map<String, Object> map = new HashMap<>(); + + //今天入库量 + LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + taskDetailLambdaQueryWrapper.select(TaskDetail::getTaskType,TaskDetail::getQty).gt(TaskDetail::getCreateTime,today); + List<TaskDetail> taskDetails = taskDetailServiceImpl.list(taskDetailLambdaQueryWrapper); + BigDecimal receiptQty = BigDecimal.ZERO; + BigDecimal shipmentQty = BigDecimal.ZERO; + + for(TaskDetail taskDetail : taskDetails) + { + if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT)) + { + receiptQty=receiptQty.add(taskDetail.getQty()); + }else if (taskDetail.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT)) + { + shipmentQty=shipmentQty.add(taskDetail.getQty()); + } + + } + map.put("receiptTotal",receiptQty); + map.put("shipmentTotal",shipmentQty); + //今日交易量 + map.put("bllCount",receiptQty.add(shipmentQty)); + + + //库存总数 + LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryHeaderLambdaQueryWrapper.select(InventoryHeader::getTotalQty); + List<InventoryHeader> inventoryHeaders = inventoryHeaderServiceImpl.list(inventoryHeaderLambdaQueryWrapper); + BigDecimal inventoryQty = BigDecimal.ZERO; + for(InventoryHeader inventoryHeader : inventoryHeaders) + { + inventoryQty=inventoryQty.add(inventoryHeader.getTotalQty()); + } + map.put("inventoryTotal",inventoryQty); + + + //库内品数 + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryDetailLambdaQueryWrapper.select(InventoryDetail::getId).groupBy(InventoryDetail::getInventoryStatus); + List<InventoryDetail> inventoryDetails = inventoryDetailServiceImpl.list(inventoryDetailLambdaQueryWrapper); + map.put("materialCount",inventoryDetails.size()); + + //待执行任务数 + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); + taskHeaderLambdaQueryWrapper.ge(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_RELEASE) + .lt(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_COMPLETED); + List<TaskHeader> taskHeaders = taskHeaderService.list(taskHeaderLambdaQueryWrapper); + map.put("taskUncompletedTotal",taskHeaders.size()); + + return Result.ok(map); + } + + +}