MoBileController.java 10.6 KB
package com.huaheng.api.mobile.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.page.PageDomain;
import com.huaheng.framework.web.page.TableDataInfo;
import com.huaheng.framework.web.page.TableSupport;
import com.huaheng.pc.api.acs.service.AcsService;
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.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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

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


@RestController
@RequestMapping("/API/mobile")
public class MoBileController extends BaseController {


    @Resource
    private TaskHeaderService
            taskHeaderService;
    @Resource
    private TaskDetailService
            taskDetailService;
    @Resource
    private InventoryHeaderService
            inventoryHeaderService;
    @Resource
    private InventoryDetailService
            inventoryDetailService;
    @Resource
    private InventoryMaterialSummaryService
            inventoryMaterialSummaryService;
    @Resource
    private AcsService
            acsService;

    /**
     * 入库任务建立
     */
    @Log(title = "入库任务建立", action = BusinessType.UPDATE)
    @PostMapping("/addReceiptTask")
    @ApiOperation("入库任务建立")
    @ResponseBody
    public AjaxResult addReceiptTask(@RequestBody HashMap<String,Object> map)
    {
        String containerCode = String.valueOf(map.get("containerCode"));
        List<TaskDetail> taskDetails = JSONObject.parseArray(JSON.toJSONString(map.get("taskDetails")),TaskDetail.class);
        AjaxResult ajaxResult = taskHeaderService.addTaskHeader(containerCode,"mobile","");
        if(ajaxResult.hasErr()){
            return ajaxResult;
        }
        String taskId =JSON.toJSONString(ajaxResult.getData());
        if(!taskDetails.isEmpty()) {
            for (TaskDetail item : taskDetails) {
                item.setTaskId(Integer.valueOf(taskId));
                ajaxResult = taskDetailService.addRDetail(item);
            }
        }
        ajaxResult =taskHeaderService.sendTaskToWcs(Convert.toIntArray(taskId));


        return ajaxResult;
    }



    /**
     * 库存明细查看
     */
    @Log(title = "库存明细查看", action = BusinessType.UPDATE)
    @PostMapping("/inventoryList")
    @ApiOperation("库存明细查看")
    @ResponseBody
    public TableDataInfo inventoryList(@RequestBody InventoryDetail inventoryDetail)
    {
        LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
        PageDomain
                pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();

        lambdaQueryWrapper//仓库
                .eq(inventoryDetail.getInventoryHeaderId() != null,InventoryDetail::getInventoryHeaderId,inventoryDetail.getInventoryHeaderId()) //ID
                .eq(StringUtils.isNotEmpty(inventoryDetail.getLocationCode()),InventoryDetail::getLocationCode,inventoryDetail.getLocationCode()) //库位
                .eq(StringUtils.isNotEmpty(inventoryDetail.getContainerCode()),InventoryDetail::getContainerCode,inventoryDetail.getContainerCode())//容器
                .eq(StringUtils.isNotEmpty(inventoryDetail.getSupplierCode()),InventoryDetail::getSupplierCode,inventoryDetail.getSupplierCode())//供应商
                .eq(StringUtils.isNotEmpty(inventoryDetail.getMaterialCode()),InventoryDetail::getMaterialCode,inventoryDetail.getMaterialCode())//物料编码
                .like(StringUtils.isNotEmpty(inventoryDetail.getMaterialName()),InventoryDetail::getMaterialName,inventoryDetail.getMaterialName())//物料名称
                .like(StringUtils.isNotEmpty(inventoryDetail.getMaterialSpec()),InventoryDetail::getMaterialSpec,inventoryDetail.getMaterialSpec())//物料规格
                .eq(StringUtils.isNotEmpty(inventoryDetail.getInventorySts()),InventoryDetail::getInventorySts,inventoryDetail.getInventorySts())//库存状态
                .eq(StringUtils.isNotEmpty(inventoryDetail.getBatch()),InventoryDetail::getBatch,inventoryDetail.getBatch())//批次
                .eq(StringUtils.isNotEmpty(inventoryDetail.getProjectNo()),InventoryDetail::getProjectNo,inventoryDetail.getProjectNo())//项目号
                .eq(StringUtils.isNotEmpty(inventoryDetail.getLot()),InventoryDetail::getLot,inventoryDetail.getLot())//批号
                .eq(StringUtils.isNotEmpty(inventoryDetail.getReceiptCode()),InventoryDetail::getReceiptCode,inventoryDetail.getReceiptCode())//入库单编码
                .eq(inventoryDetail.getReceiptDetailId() != null,InventoryDetail::getReceiptDetailId,inventoryDetail.getReceiptDetailId()) // 入库单明细ID
                .eq(StringUtils.isNotEmpty(inventoryDetail.getReferCode()),InventoryDetail::getReferCode,inventoryDetail.getReferCode())//上游单号
                .eq(StringUtils.isNotEmpty(inventoryDetail.getReferDetailId()),InventoryDetail::getReferDetailId,inventoryDetail.getReferDetailId())//上游行号
                .eq(StringUtils.isNotEmpty(inventoryDetail.getLockCode()),InventoryDetail::getLockCode,inventoryDetail.getLockCode())//库存锁
                //货主
                .orderByDesc(InventoryDetail::getId);

        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
            //分页查询
            Page<InventoryDetail>
                    page = new Page<>(pageNum, pageSize);
            IPage<InventoryDetail>
                    iPage = inventoryDetailService.page(page, lambdaQueryWrapper);
            return getMpDataTable(iPage.getRecords(),iPage.getTotal());
        } else {
            List<InventoryDetail> list = inventoryDetailService.list(lambdaQueryWrapper);
            return getDataTable(list);
        }
    }



//    /**
//     * 相同物料数量汇总查看
//     */
//    @Log(title = "相同物料数量汇总查看", action = BusinessType.UPDATE)
//    @PostMapping("/inventoryMaterialSummary")
//    @ApiOperation("相同物料数量汇总查看")
//    @ResponseBody
//    @ApiLogger(apiName = "相同物料数量汇总查看", from="mobile")
//    public AjaxResult inventoryMaterialSummary(@RequestBody HashMap<String,Object> map)
//    {
//        return acsService.TaskConfirm(map);
//    }


    /**
     * 出库任务建立
     */
    @Log(title = "出库任务建立", action = BusinessType.UPDATE)
    @PostMapping("/addShipmentTask")
    @ApiOperation("出库任务建立")
    @ResponseBody
    public AjaxResult addShipmentTask(@RequestBody HashMap<String,Object> map)
    {
        AjaxResult ajaxResult = new AjaxResult();
        String json = JSON.toJSONString(map);
//        logger.info("AGV完成数据:{}",json);
        String ids = String.valueOf(map.get("ids"));
        if( StringUtils.isNull(map.get("qty"))){
            ajaxResult = inventoryHeaderService.ships(java.util.Arrays.asList(ids.split(",")),"mobile");
        }else {
            ajaxResult = inventoryHeaderService.ship(ids,new BigDecimal(String.valueOf(map.get("qty"))),"mobile");
        }
        if(ajaxResult.hasErr()){
            return ajaxResult;
        }else {
            List<Integer> taskIds = JSON.parseObject(JSON.toJSONString(ajaxResult.getData()), ArrayList.class);
            if(!taskIds.isEmpty()){
                Integer[] id = new Integer[taskIds.size()];
                ajaxResult =taskHeaderService.sendTaskToWcs(taskIds.toArray(id));
            }
        }
        return ajaxResult;
    }






    @Log(title = "AGV呼叫", action = BusinessType.UPDATE)
    @PostMapping("/callCar")
    @ApiOperation("AGV呼叫")
    @ResponseBody
    public AjaxResult callCar()
    {
        return acsService.callCar();
    }

    /**
     * AGV行走
     */
    @Log(title = "AGV行走", action = BusinessType.UPDATE)
    @PostMapping("/taskPPW")
    @ApiOperation("AGV行走")
    @ResponseBody
    public AjaxResult taskPPW()
    {
        AjaxResult ajaxResult = new AjaxResult();
        //获取状态为到达取货点任务
        LambdaQueryWrapper<TaskHeader> taskHeaderLambda = Wrappers.lambdaQuery();
        taskHeaderLambda.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_APP);
        List<TaskHeader> taskHeaders = taskHeaderService.list();
        if(taskHeaders.isEmpty()){
            return AjaxResult.success("没有可行走的任务");
        }
        for (TaskHeader item : taskHeaders) {
            ajaxResult = acsService.WalkingTask(item.getId());
        }


        return ajaxResult;
    }


    /**
     * AGV回库
     */
    @Log(title = "AGV回库", action = BusinessType.UPDATE)
    @PostMapping("/taskRPB")
    @ApiOperation("AGV回库")
    @ResponseBody
    public AjaxResult TaskRPB()
    {
        AjaxResult ajaxResult = new AjaxResult();
        //获取状态为到达取货点任务
        LambdaQueryWrapper<TaskHeader> taskHeaderLambda = Wrappers.lambdaQuery();
        taskHeaderLambda.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_ARP);
        List<TaskHeader> taskHeaders = taskHeaderService.list();
        if(taskHeaders.isEmpty()){
            return AjaxResult.success("没有可回库的任务");
        }
        for (TaskHeader item : taskHeaders) {
            ajaxResult = acsService.ReceiptTask(item.getId());
        }


        return ajaxResult;
    }




}