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

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.tv.domain.*;
import com.huaheng.api.wcs.domain.WcsTask;
import com.huaheng.common.constant.HttpConstant;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.restful.RestUtil;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.service.ConfigService;
import com.huaheng.mobile.task.TaskDomain;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
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.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.inventoryTransaction.service.InventoryTransactionService;
import com.huaheng.pc.system.dict.domain.DictData;
import com.huaheng.pc.system.dict.service.IDictDataService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderTvService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

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

    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ContainerService containerService;
    @Resource
    private LocationService locationService;
    @Resource
    private InventoryTransactionService inventoryTransactionService;
    @Resource
    private ZoneService zoneService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private InventoryMaterialSummaryService inventoryMaterialSummaryService;
    @Resource
    private MaterialService materialService;
    @Resource
    private TaskHeaderTvService taskHeaderTvService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private IDictDataService dictDataService;
    @Resource
    private ConfigService configService;
    @Autowired
    private AddressService addressService;


    @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("/gettvView")
    @CrossOrigin
    public AjaxResult<List<TaskDomain>> getTvView(String port) {

        List<TaskDomain> taskDomainList = new ArrayList<>();

        //port多个站台用,分隔,查出所有头表
        List<DictData> dictlist = dictDataService.selectDictDataByType("taskType");
        List<TaskHeader> taskList = new ArrayList<>();
        for (String p : port.split(",")) {
            List<TaskHeader> tmpTaskList = taskHeaderTvService.getTaskByTvPort(p);

            taskList.addAll(tmpTaskList);
        }

        lable1:
        for (TaskHeader task : taskList) {
            if (task.getInternalTaskType().intValue() == 100) {
                task.setFromLocation(task.getToLocation());
            }
            lable2:
            for (DictData dictData : dictlist) {
                if (task.getTaskType().toString().equals(dictData.getDictValue())) {
                    task.setUserDef1(dictData.getDictLabel());
                    break lable2;
                }
            }
            TaskDomain taskDomain = new TaskDomain();


            List<TaskDetail> taskDetails = taskDetailService.findByTaskId(task.getId());

            taskDomain.setTaskHeader(task);
//            checkSpec(taskDetails);
            taskDomain.setTaskDetails(taskDetails);
            taskDomainList.add(taskDomain);
        }

        taskDomainList.sort(new Comparator<TaskDomain>() {
            @Override
            public int compare(TaskDomain o1, TaskDomain o2) {
                TaskHeader task1 = o1.getTaskHeader();
                TaskHeader task2 = o2.getTaskHeader();
                int ret = task2.getStatus() - task1.getStatus();
                if (ret == 0) {
                    ret = (int) (task2.getLastUpdated().getTime() - task1.getLastUpdated().getTime());
                }
                return ret;
            }
        });
        return AjaxResult.success(taskDomainList);
    }

    @GetMapping("/gettvViewUp")
    @ResponseBody
    @CrossOrigin
    public AjaxResult<List<TaskBillList>> getTvViewUp(String port) {
        List<TaskBillList> taskBillLists=new ArrayList<>();
        String area = "1";
        String warehouseCode = "CS0001";
        TvPortSelect tvPortSelect = new TvPortSelect();
        tvPortSelect.setArea("1");
        tvPortSelect.setStationCode(port);
        tvPortSelect.setWarehouseCode(warehouseCode);
        //调用wcs接口
        String url = addressService.selectAddress(QuantityConstant.ADDRESS_WCS_Station_Container,warehouseCode, area);
        String jsonParam = JSON.toJSONString(tvPortSelect);
        ResponseEntity<JSONObject> result = RestUtil.request_post(url, warehouseCode, jsonParam);
        if (result != null && result.getBody() != null) {
            String code = result.getBody().getString("code");
            String msg = result.getBody().getString("msg");
            if (!HttpConstant.isSuccess(Integer.parseInt(code))) {
                return AjaxResult.success(taskBillLists);
//                return AjaxResult.error(msg);
            }
        } else {
            return AjaxResult.success(taskBillLists);
//            Date date = new Date();
//            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss");
//            throw new ServiceException(formatter.format(date)+"调取WCS接口未成功");
        }

        List<TaskBill> taskBillList = new ArrayList<>();
        TaskBill taskBill=new TaskBill();

        String data = result.getBody().getString("data");
        String containerCode = data.substring(15,22);
//        String data = "data:{containerCode:CG00117, stationCode: P1001}";
//        String containerCode = data.substring(20,27);
        if (containerCode.trim().equals("")){
            return AjaxResult.success(taskBillLists);
        }
        LambdaQueryWrapper<Container> containerLambdaQueryWrapper=Wrappers.lambdaQuery();
        containerLambdaQueryWrapper.eq(Container::getCode,containerCode)
                .eq(Container::getWarehouseCode,warehouseCode);
        Container one = containerService.getOne(containerLambdaQueryWrapper);
        if (one==null){
            return AjaxResult.success(taskBillLists);
        }

        LambdaQueryWrapper<TaskHeader> taskHeader=Wrappers.lambdaQuery();
        taskHeader.eq(TaskHeader::getContainerCode,containerCode)
                .eq(TaskHeader::getWarehouseCode,warehouseCode)
                .eq(TaskHeader::getPort,port)
                .last("ORDER BY id desc limit 1");
        List<DictData> dictlist = dictDataService.selectDictDataByType("taskType");
        TaskHeader task = taskHeaderService.getOne(taskHeader);
        if (task==null){
            return AjaxResult.success(taskBillLists);
        }
        for (DictData dictData : dictlist) {
            if (task.getTaskType().toString().equals(dictData.getDictValue())) {
                task.setUserDef1(dictData.getDictLabel());
                break;
            }
        }

        LambdaQueryWrapper<TaskDetail> taskDetail=Wrappers.lambdaQuery();
        taskDetail.eq(TaskDetail::getWarehouseCode,warehouseCode)
                .eq(TaskDetail::getTaskId,task.getId())
                .eq(TaskDetail::getContainerCode,task.getContainerCode());
        List<TaskDetail> list1 = taskDetailService.list(taskDetail);
//        List<String> batch=new ArrayList<>();
//        List<BigDecimal> qty=new ArrayList<>();
//        BatchAndQty batchAndQty = new BatchAndQty();
        TaskBillList taskBillList1=new TaskBillList();
        List<BatchAndQty> batchAndQtyList = new ArrayList<>();
        taskBill.setTaskType(task.getUserDef1());
        taskBill.setContainerCode(task.getContainerCode());
        taskBill.setPort(task.getPort());
        taskBill.setFromLocation(task.getFromLocation());
        for (TaskDetail ta:list1) {
//            batch.add(ta.getBatch());
//            qty.add(ta.getQty());
            BatchAndQty batchAndQty = new BatchAndQty();
            batchAndQty.setQty(ta.getQty());
            batchAndQty.setBatchAndqty(ta.getBatch());
            batchAndQtyList.add(batchAndQty);
        }

        taskBillList.add(taskBill);
        taskBillList1.setTaskBillList(taskBillList);
        taskBillList1.setBatchAndQtyList(batchAndQtyList);
        taskBillLists.add(taskBillList1);
        return AjaxResult.success(taskBillLists);
    }
}