TvController.java 17.5 KB
package com.huaheng.api.tv.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.controller.TokenApiController;
import com.huaheng.api.tv.domain.*;
import com.huaheng.api.wcs.domain.WcsTask;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.controller.LocationController;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.domain.LocationStatus;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.materialWarnning.service.IMaterialWarningService;
import com.huaheng.pc.config.supplier.service.SupplierService;
import com.huaheng.pc.config.zone.domain.Zone;
import com.huaheng.pc.config.zone.service.ZoneService;
import com.huaheng.pc.inventory.InventoryMaterialSummary.domain.InventoryMaterialSummary;
import com.huaheng.pc.inventory.InventoryMaterialSummary.service.InventoryMaterialSummaryService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptDetailHistory.service.ReceiptDetailHistoryService;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/API/WMS/v2")
public class TvController extends BaseController {

    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ContainerService containerService;
    @Resource
    private LocationService locationService;
    @Resource
    private ZoneService zoneService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private InventoryMaterialSummaryService inventoryMaterialSummaryService;
    @Resource
    private MaterialService materialService;
    @Resource
    private LocationController locationController;
    @Resource
    private TokenApiController tokenApiController;
    @Resource
    private SupplierService supplierService;
    @Resource
    private ReceiptDetailHistoryService receiptDetailHistoryService;
    @Resource
    private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
    @Resource
    private IMaterialWarningService materialWarningService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ShipmentDetailService shipmentDetailService;

    @PostMapping("/getTvView")
    @ApiOperation("获取电视信息")
    @ResponseBody
    public AjaxResult getTvView(@RequestBody WcsTask wcsTask) {
       String area =  wcsTask.getArea();
       LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
       taskHeaderLambdaQueryWrapper.eq(TaskHeader::getArea, area)
                                .lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)
                                .orderByDesc(TaskHeader::getId);
       List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
       if(taskHeaderList != null && taskHeaderList.size() > 0) {
           for(TaskHeader taskHeader : taskHeaderList) {
               String materialCode = taskHeader.getMaterialCode();
               String warehouseCode = taskHeader.getWarehouseCode();
               Material material = materialService.getMaterialByCode(materialCode, warehouseCode);
               if(material != null) {
                   taskHeader.setMaterialCode(material.getName());
               }
           }
       }

       LambdaQueryWrapper<Container> containerEmptyLambdaQueryWrapper = Wrappers.lambdaQuery();
        containerEmptyLambdaQueryWrapper.eq(Container::getArea, area)
                                    .eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY)
                                    .ne(Container::getLocationCode, "");
       List<Container> containerEmptyList = containerService.list(containerEmptyLambdaQueryWrapper);
        int containerEmptySize = containerEmptyList.size();

        LambdaQueryWrapper<Container> containerManyLambdaQueryWrapper = Wrappers.lambdaQuery();
        containerManyLambdaQueryWrapper.eq(Container::getArea, area)
                .eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_MANY)
                .ne(Container::getLocationCode, "");
        List<Container> manyEmptyList = containerService.list(containerManyLambdaQueryWrapper);
        int manyEmptyListSize = manyEmptyList.size();
        containerEmptySize = containerEmptySize + manyEmptyListSize * 6;
        LambdaQueryWrapper<Container> containerSomeLambdaQueryWrapper = Wrappers.lambdaQuery();
        containerSomeLambdaQueryWrapper.eq(Container::getArea, area)
                .eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_SOME)
                .ne(Container::getLocationCode, "");
        List<Container> containerSomeList = containerService.list(containerSomeLambdaQueryWrapper);
        int containerSomeSize = containerSomeList.size();

        LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
        locationLambdaQueryWrapper.eq(Location::getArea, area);
        List<Location> locationList = locationService.list(locationLambdaQueryWrapper);
        int totalLocationSize = locationList.size();

        LambdaQueryWrapper<Zone> zoneLambdaQueryWrapper = Wrappers.lambdaQuery();
        zoneLambdaQueryWrapper.eq(Zone::getArea, area);
        Zone zone = zoneService.getOne(zoneLambdaQueryWrapper);
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getZoneCode, zone.getCode());
        List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
        int inventorySize = inventoryDetailList.size();


        LambdaQueryWrapper<InventoryMaterialSummary> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(InventoryMaterialSummary::getZoneCode, zone.getCode());
        List<InventoryMaterialSummary> list = inventoryMaterialSummaryService.list(lambdaQueryWrapper);
        if (list == null) {
            list = Collections.emptyList();
        }
        //筛选库存汇总数据的专用方法
        List<InventoryMaterialSummary> details = inventoryMaterialSummaryService.duplicateRemoval(list);

        TvBean tvBean = new TvBean();
        tvBean.setDetails(details);
        tvBean.setContainerEmptySize(containerEmptySize);
        tvBean.setContainerSomeSize(containerSomeSize);
        tvBean.setTotalLocationSize(totalLocationSize);
        tvBean.setTaskHeaderList(taskHeaderList);
        tvBean.setInventorySize(inventorySize);
        return AjaxResult.success(tvBean);
    }

    @GetMapping("/getTvPortView")
    @ApiOperation("获取电视信息")
    public AjaxResult getTvPortView(@RequestParam(name = "station",required = true) String station) {
        return taskHeaderService.getTvPortView(station);
    }

    @CrossOrigin
    @GetMapping("/getLocation")
    @ApiOperation("获取库位看板数据")
    public AjaxResult getLocation(String type,String row,String line, String layer) {
        tokenApiController.getToken("xcq","123456","CS0001");
        AjaxResult ajaxResult = locationController.getLocationInfo(type, row,line, layer, null);
        List<Location> locations = (List<Location>) ajaxResult.getData();
        Map<String, Object> map = new HashMap<>();
        Map<Integer,String> keyMap = new HashMap<>();
        keyMap.put(LocationStatus.IDLE_EMPTY_LOCATION, "空柜空闲");
        keyMap.put(LocationStatus.IDLE_EMPTY_CONTAINER, "空盘空闲");
        keyMap.put(LocationStatus.IDLE_FULL_CONTAINER, "满盘空闲" );
        keyMap.put(LocationStatus.LOCK_EMPTY_LOCATION, "空柜锁定");
        keyMap.put(LocationStatus.LOCK_EMPTY_CONTAINER, "空盘锁定");
        keyMap.put(LocationStatus.LOCK_FULL_CONTAINER, "满盘锁定");

        Map<String, Integer> locationMap = new HashMap<>();
        locationMap.put(keyMap.get(LocationStatus.IDLE_EMPTY_LOCATION), 0);
        locationMap.put(keyMap.get(LocationStatus.IDLE_EMPTY_CONTAINER), 0);
        locationMap.put(keyMap.get(LocationStatus.IDLE_FULL_CONTAINER), 0);
        locationMap.put(keyMap.get(LocationStatus.LOCK_EMPTY_LOCATION), 0);
        locationMap.put(keyMap.get(LocationStatus.LOCK_EMPTY_CONTAINER), 0);
        locationMap.put(keyMap.get(LocationStatus.LOCK_FULL_CONTAINER), 0);
        if (locations != null){
            locations.forEach(item->{
                Integer userDef3 = 0;
                if (StringUtils.isNotEmpty(item.getUserDef3())){
                    userDef3 = Integer.valueOf(item.getUserDef3());
                }
                if (keyMap.containsKey(userDef3)){
                    Integer temp = locationMap.get(keyMap.get(userDef3)) + 1;
                    locationMap.put(keyMap.get(userDef3), temp);
                }
            });
        }
        List<LocationDisplay> locationDisplayList = new ArrayList<>();
        keyMap.forEach((key, value)->{
            LocationDisplay display = new LocationDisplay();
            display.setText(value);
            display.setNumCount(locationMap.get(value));
            display.setUserDef3(String.valueOf(key));
            locationDisplayList.add(display);
        });
        map.put("topData", locationDisplayList);
        List data = locationService.columnLayerConvert(locations);
        map.put("data", data);


        ajaxResult.setData(map);
        return ajaxResult;
    }




    @CrossOrigin
    @GetMapping("/getWMSDisplayData")
    @ApiOperation("获取WMS看板数据")
    public AjaxResult getWMSDisplayData(){
        try {
            DisplayData displayData = new DisplayData();
            // 获取供应商数量
            Integer supplier = supplierService.count();
            displayData.getTopData().put("supplier", supplier);
            // 获取库位数量
            Integer location  = locationService.count();
            displayData.getTopData().put("location", location);
            // 获取入库量
            Integer receipt = receiptDetailHistoryService.count();
            displayData.getTopData().put("receipt", receipt);
            // 获取出库量
            Integer shipment = shipmentHeaderHistoryService.count();
            displayData.getTopData().put("shipment", shipment);
            // 获取库存总量
            BigDecimal total = inventoryDetailService.selectQtyTotal();
            displayData.getTopData().put("total", total);
            // 获取物料总量
            Integer material = materialService.count();
            displayData.getTopData().put("material", material);
            // 获取预警数量
            Integer warning = materialWarningService.selectWarningQuantity();
            displayData.getTopData().put("warning", warning);
            // 获取出入库热度数据
            displayData.setProjectBeanList(inventoryHeaderService.getInOutHeadData());
            // 获取库龄数据
            displayData.setWarehouseLowBeanList(inventoryHeaderService.getInventoryAge());
            // 获取库龄饼状图
            displayData.setTopBeanList(materialService.getWarehourePieData());
            // 获取入库统计数据
            displayData.setReceiptStatistics(receiptHeaderService.selectReceiptStatistics());
            // 获取出库统计数据
            displayData.setShipmentStatistics(shipmentHeaderService.selectShipmentStatistics());
            // 获取入库情况数据
            displayData.setReceiptSituationList(receiptHeaderService.selectReceiptSituation());
            // 获取出库情况数据
            displayData.setShipmentSituationList(shipmentHeaderService.selectShipmentSituation());
            // 获取最近7天入库趋势
            displayData.setReceiptTrend(receiptHeaderService.selectReceiptTrend());
            // 获取最近7天出库趋势
            displayData.setShipmentTrend(shipmentHeaderService.selectShipmentTrend());
            // 获取物料预警数据
            displayData.setMaterialWarningLists(materialWarningService.selectMaterialWarningList());
            // 获取库存等级图表
            displayData.setInventoryLevelChart(inventoryDetailService.getInventoryLevelChart());
            // 获取入库等级趋势图
            // 优等品
            List<ProjectBean> premium = receiptDetailService.getReceiptLevelLast7Days("01");
            // 一等品
            List<ProjectBean> grade = receiptDetailService.getReceiptLevelLast7Days("02");
            // 合格品
            List<ProjectBean> qualified = receiptDetailService.getReceiptLevelLast7Days("03");
            displayData.getReceiptLevelTrend().put("nums", premium.stream().map(ProjectBean::getName).collect(Collectors.toList()));
            displayData.getReceiptLevelTrend().put("premium", premium.stream().map(ProjectBean::getNums).collect(Collectors.toList()));
            displayData.getReceiptLevelTrend().put("grade", grade.stream().map(ProjectBean::getNums).collect(Collectors.toList()));
            displayData.getReceiptLevelTrend().put("qualified", qualified.stream().map(ProjectBean::getNums).collect(Collectors.toList()));
            // 获取出库等级趋势图
            premium = shipmentDetailService.getShipmentLevelLast7Days("01");
            grade = shipmentDetailService.getShipmentLevelLast7Days("02");
            qualified = shipmentDetailService.getShipmentLevelLast7Days("03");
            displayData.getShipmentLevelTrend().put("nums", premium.stream().map(ProjectBean::getName).collect(Collectors.toList()));
            displayData.getShipmentLevelTrend().put("premium", premium.stream().map(ProjectBean::getNums).collect(Collectors.toList()));
            displayData.getShipmentLevelTrend().put("grade", grade.stream().map(ProjectBean::getNums).collect(Collectors.toList()));
            displayData.getShipmentLevelTrend().put("qualified", qualified.stream().map(ProjectBean::getNums).collect(Collectors.toList()));
            return AjaxResult.success(displayData);
        }catch (Exception e){
            return AjaxResult.error(e.getMessage());
        }
    }

    @CrossOrigin
    @GetMapping("/getPickingData")
    @ApiOperation("获取WMS拣选数据")
    public AjaxResult getPickingData(){
        PickingData pickingData = new PickingData();
        try {
            // 获取今日任务数量
            pickingData.setTodayTask(taskHeaderService.getTodayTask());
            // 获取已完成任务数量
            pickingData.setTaskCompleted(taskHeaderService.getTaskCompleted());
            // 获取未完成任务数量
            pickingData.setIncompleteTask(taskHeaderService.getIncompleteTask());
            // 获取拆垛数据
            pickingData.setDestackingData(taskHeaderService.getDestackingData());
            // 获取码垛数据
            pickingData.setPalletizingData(taskHeaderService.getPalletizingData());
            // 获取正在挑选的订单
            pickingData.setOrdersBeingPicked(taskHeaderService.getOrdersBeingPicked());
            // 获取正在拣选的订单
            pickingData.setOrdersWaitingPalletized(taskHeaderService.getOrdersWaitingPalletized());
            // 拆垛总数
            if (pickingData.getDestackingData()!= null && pickingData.getDestackingData().size() > 0){
                Integer destackingTotal = pickingData.getDestackingData().stream().map(ProjectBean::getNums).mapToInt(BigDecimal::intValue).sum();
                pickingData.setDestackingTotal(destackingTotal);
            }else {
                pickingData.setDestackingTotal(0);
            }
            if (pickingData.getPalletizingData() != null && pickingData.getPalletizingData().size() > 0){
                Integer palletizingTotal = pickingData.getPalletizingData().stream().map(ProjectBean::getNums).mapToInt(BigDecimal::intValue).sum();
                pickingData.setPalletizingTotal(palletizingTotal);
            }else {
                pickingData.setPalletizingTotal(0);
            }
            return AjaxResult.success(pickingData);
        }catch (Exception e){
            return AjaxResult.error(e.getMessage());
        }
    }



}