XWmsInfoController.java 13 KB
package com.huaheng.api.wmsinfo2.contoller;

import com.huaheng.api.wmsinfo2.domain.*;
import com.huaheng.common.constant.Constants;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.DataUtils;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.pc.config.location.service.CscLocationServiceImpl;
import com.huaheng.pc.config.location.service.LocationServiceImpl;
import com.huaheng.pc.config.materialMultiple.service.MaterialMultipleServiceImpl;
import com.huaheng.pc.config.materialType.mapper.MaterialTypeMapper;
import com.huaheng.pc.config.materialType.service.MaterialTypeService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailServiceImpl;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderServiceImpl;
import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/api/wms/info")
public class XWmsInfoController {
    private static final Logger log = LoggerFactory.getLogger(XWmsInfoController.class);
    @Resource
    private LocationServiceImpl locationService;

    @Resource
    private CscLocationServiceImpl cscLocationService;

    @Resource
    private InventoryDetailServiceImpl inventoryDetailService;

    @Resource
    private InventoryTransactionService inventoryTransactionService;

    @Resource
    private TaskDetailServiceImpl taskDetailService;

    @Resource
    private TaskHeaderServiceImpl taskHeaderService;

    @Resource
    private MaterialTypeService materialTypeService;

    @Resource
    private ReceiptDetailService receiptDetailService;

    @Resource
    private InventoryHeaderServiceImpl inventoryHeaderService;



    @PostMapping("/material")
    @ResponseBody
    public WmsResult getMaterial(){
        WmsResult result = new WmsResult();
        List<InventoryDetail> detailList = inventoryDetailService.list();
        HashMap<String, DataMaterial> map = new HashMap<>();
        detailList.forEach(it->{
            DataMaterial mt = map.get(it.getLocationCode());
            if(mt == null){
                mt = new DataMaterial(it.getContainerCode(), Constants.getCscLocationCode(it.getLocationCode(), it.getContainerCode()));
                mt.add(it);
                map.put(it.getLocationCode(), mt);
            }
        });
        map.values().forEach(it ->{
            DataItem item = new DataItem(it.locCode);
            item.parseJson(it);
            result.data.add(item);
        });
        return result;
    }
    /**
     * 仓库数据概况
     */
    @PostMapping()
    @ResponseBody
    public WmsResult getInfo() {
        WmsResult result = new WmsResult();
        long t1 = System.currentTimeMillis();

        result.data.add(getDataOfThisYearByMonth());
        long t2 = System.currentTimeMillis();

        result.data.add(getDataOfToday());
        long t3 = System.currentTimeMillis();

        result.data.add(getLocationUsedPercent());
        long t4 = System.currentTimeMillis();

        result.data.add(getLocationUsedCount());
        long t5 = System.currentTimeMillis();

        result.data.add(getLocationAllCount());
        long t6 = System.currentTimeMillis();

        result.data.add(getMaterialTypePercent());
        long t7 = System.currentTimeMillis();

        result.data.add(getMaterialQtyAll());
        long t8 = System.currentTimeMillis();

        result.data.add(getReceiptNow());
        long t9 = System.currentTimeMillis();

        result.data.add(getReceiptUnfinish());
        long t10 = System.currentTimeMillis();

        result.data.add(getTurnOverRate());
        long t11 = System.currentTimeMillis();
        log.info("==看板执行计时================================================================");
        log.info("getDataOfthisYearByMonth: " + (t2 - t1));
        log.info("getDataOfToday: " + (t3 - t2));
        log.info("getLocationUsedPercent: " + (t4 - t3));
        log.info("getLocationUsedCount: " + (t5 - t4));
        log.info("getLocationAllCount: " + (t6 - t5));
        log.info("getMaterialTypePercent: " + (t7 - t6));
        log.info("getMaterialQtyAll: " + (t8 - t7));
        log.info("getReceiptNow: " + (t9 - t8));
        log.info("getReceiptUnfinish: " + (t10 - t9));
        log.info("getTurnOverRate: " + (t11 - t10));
        log.info("==看板执行计时================================================================\n\n");
        return result;
    }

    /**
     * 本年月度出入库数量
     *
     * @return
     */
    public DataItem getDataOfThisYearByMonth() {
        DataItem item = new DataItem("月度出入库数量");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("1月");
        pkg.categories.add("2月");
        pkg.categories.add("3月");
        pkg.categories.add("4月");
        pkg.categories.add("5月");
        pkg.categories.add("6月");
        pkg.categories.add("7月");
        pkg.categories.add("8月");
        pkg.categories.add("9月");
        pkg.categories.add("10月");
        pkg.categories.add("11月");
        pkg.categories.add("12月");

        DataSeries seriesReceipt = new DataSeries("月度入库数量");
        DataSeries seriesShipment = new DataSeries("月度出库数量");
        int year = Calendar.getInstance().get(Calendar.YEAR);
        for (int i = 1; i <= 12; i++) {
            Data dataReceipt = new Data(inventoryTransactionService.getReceiptQtyOfMonth(year, i));
            seriesReceipt.data.add(dataReceipt);
            Data dataShipment = new Data(inventoryTransactionService.getShipmentQtyOfMonth(year, i));
            seriesShipment.data.add(dataShipment);
        }
        pkg.series.add(seriesReceipt);
        pkg.series.add(seriesShipment);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 当月出入库数量
     *
     * @return
     */
    public DataItem getDataOfToday() {
        DataItem item = new DataItem("当日出入库数量");
        DataPkg pkg = new DataPkg();

        String today = DateUtils.getDate();
        DataSeries seriesReceipt = new DataSeries("当日入库数量");
        Data dataReceipt = new Data(inventoryTransactionService.getReceiptQtyOfDay(today));
        seriesReceipt.data.add(dataReceipt);

        DataSeries seriesShipment = new DataSeries("当日出库数量");
        Data dataShipment = new Data(inventoryTransactionService.getShipmentQtyOfDay(today));
        seriesShipment.data.add(dataShipment);

        pkg.series.add(seriesReceipt);
        pkg.series.add(seriesShipment);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 库容使用率
     *
     * @return
     */
    public DataItem getLocationUsedPercent() {
        DataItem item = new DataItem("库容使用率");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("穿梭车库");
        pkg.categories.add("立体库");

        DataSeries seriesCSC = new DataSeries("穿梭车库");
        DataSeries seriesLK = new DataSeries("立体库");

        int totalCsc = locationService.getTotalLocationCount("C");
        int usedCsc = locationService.getUsedLocationCount("C");
        BigDecimal percentCsc = new BigDecimal(usedCsc * 100.0f / totalCsc);
        seriesCSC.data.add(new Data(percentCsc));
        pkg.series.add(seriesCSC);

        int totalLk = locationService.getTotalLocationCount("L");
        int usedLk = locationService.getUsedLocationCount("L");
        BigDecimal percentLk = new BigDecimal(usedLk * 100.0f / totalLk);
        seriesLK.data.add(new Data(percentLk));
        pkg.series.add(seriesLK);

        item.parseJson(pkg);
        return item;
    }

    /**
     * 物资分类占比
     *
     * @return
     */
    public DataItem getMaterialTypePercent() {
        DataItem item = new DataItem("物料分类占比");
        DataPkg pkg = new DataPkg();
        materialTypeService.list().forEach(type -> {
            pkg.categories.add(type.getName());
            DataSeries dataSeries = new DataSeries(type.getName());
            dataSeries.data.add(new Data(inventoryDetailService.getSumByType(type.getCode())));
            pkg.series.add(dataSeries);
        });
        pkg.categories.add("未分类");
        DataSeries dataSeriesTypeLess = new DataSeries("未分类");
        dataSeriesTypeLess.data.add(new Data(inventoryDetailService.getSumByTypeLess()));
        pkg.series.add(dataSeriesTypeLess);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 库位情况,已用库位数
     *
     * @return
     */
    public DataItem getLocationUsedCount() {
        DataItem item = new DataItem("库位情况");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("库位情况");
        DataSeries dataSeries = new DataSeries("库位情况");
        int count = locationService.getUsedLocationCount("C") + locationService.getUsedLocationCount("L");
        dataSeries.data.add(new Data(new BigDecimal(count)));
        pkg.series.add(dataSeries);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 仓库容积
     * @return
     */
    public DataItem getLocationAllCount() {
        DataItem item = new DataItem("仓库容积");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("仓库容积");
        DataSeries dataSeries = new DataSeries("仓库容积");
        int count = locationService.getTotalLocationCount("C") + locationService.getTotalLocationCount("L");
        dataSeries.data.add(new Data(new BigDecimal(count)));
        pkg.series.add(dataSeries);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 周转率,简单用当月的出库数量/当前库存数量
     * @return
     */
    public DataItem getTurnOverRate() {
        DataItem item = new DataItem("物资周转率");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("物资周转率");
        DataSeries dataSeries = new DataSeries("物资周转率");
        int year = Calendar.getInstance().get(Calendar.YEAR);
        int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
        int out = inventoryTransactionService.getShipmentQtyOfMonth(year, month).intValue();
        int all = inventoryDetailService.getMaterialQtySum("C").add(inventoryDetailService.getMaterialQtySum("L")).intValue();
        dataSeries.data.add(new Data(new BigDecimal(out * 100f / all)));
        pkg.series.add(dataSeries);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 总货物数量
     *
     * @return
     */
    public DataItem getMaterialQtyAll() {
        DataItem item = new DataItem("总货物数量");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("总货物数量");
        DataSeries dataSeries = new DataSeries("总货物数量");
        BigDecimal count = inventoryDetailService.getMaterialQtySum("C").add(inventoryDetailService.getMaterialQtySum("L"));
        dataSeries.data.add(new Data(count));
        pkg.series.add(dataSeries);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 当前应入库总数
     *
     * @return
     */
    public DataItem getReceiptNow() {
        DataItem item = new DataItem("入库总数");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("入库总数");
        DataSeries dataSeries = new DataSeries("入库总数");
        String today =  DateUtils.getDate();
        dataSeries.data.add(new Data(receiptDetailService.getReceiptSumOfDay(today)));
        pkg.series.add(dataSeries);
        item.parseJson(pkg);
        return item;
    }

    /**
     * 入库未领数
     */
    public DataItem getReceiptUnfinish() {
        DataItem item = new DataItem("未领数");
        DataPkg pkg = new DataPkg();
        pkg.categories.add("未领数");
        DataSeries dataSeries = new DataSeries("未领数");
        String today =  DateUtils.getDate();
        dataSeries.data.add(new Data(receiptDetailService.getReceiptSumOfDayUnfinish(today)));
        pkg.series.add(dataSeries);
        item.parseJson(pkg);
        return item;
    }
}