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

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
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.api.mobile.InventorySurvey;
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.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
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;
import java.util.Map;


@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 MaterialService materialService;
    @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));

        ajaxResult.setData("");
        return ajaxResult;
    }



    /**
     * 库存明细查看
     */
    @Log(title = "库存明细查看", action = BusinessType.UPDATE)
    @PostMapping("/inventoryList")
    @ApiOperation("库存明细查看")
    @ResponseBody
    public AjaxResult 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> inventories = inventoryDetailService.list(lambdaQueryWrapper);
        List<InventorySurvey> inventorySurveys = new ArrayList<>();

        List<String> materials= new ArrayList<>();
        for(InventoryDetail inventory1 :inventories)  {
            materials.add(inventory1.getMaterialCode());
        }
        String[] str = materials.toArray(new String[materials.size()]);
        List<Material>  materialList = null;
        if(str != null && str.length > 0) {
            materialList = materialService.selectNameByListcode(str);
        }

        for(InventoryDetail inventory1 : inventories) {
            boolean add = true;
            int index = -1;
            InventorySurvey inventorySurvey2 = null;
            if(inventorySurveys != null && inventorySurveys.size() > 0) {
                for (InventorySurvey inventorySurvey : inventorySurveys) {
                    index++;
                    if (inventory1.getMaterialCode() != null) {
                        if (inventorySurvey.getMaterialCode().equals(inventory1.getMaterialCode())) {
                            add = false;
                            inventorySurvey2 = inventorySurvey;
                        }
                    }
                }
            }
            if(add) {
                InventorySurvey inventorySurvey = new InventorySurvey();
                inventorySurvey.setMaterialCode(inventory1.getMaterialCode());
                String materialName = null;
                for (Material material1 : materialList) {
                    if (material1.getCode().equals(inventory1.getMaterialCode())){
                        materialName = material1.getName();
                        break;
                    }
                }
                if(materialName != null) {
                    inventorySurvey.setMaterialName(materialName);
                }
                inventorySurvey.setQty(inventory1.getQty());
                inventorySurveys.add(inventorySurvey);
            } else {
                inventorySurveys.remove(inventorySurvey2);
                BigDecimal qty = inventorySurvey2.getQty().add(inventory1.getQty());
                inventorySurvey2.setQty(qty);
                inventorySurveys.add(index, inventorySurvey2);
            }
        }
        return AjaxResult.success(inventorySurveys);
//        }
    }

    @PostMapping("/getInventoryDetails")
    @ApiOperation("移动端获取库存详情")
    @Log(title = "移动端获取库存详情", action = BusinessType.OTHER)
    public AjaxResult getInventoryDetails(@RequestBody Map<String, String> param) {
        if  (param.get("code") == null || param.get("code").trim().length() < 1)
            throw new JSONException("物料号号不能为空");
        String materialCode = param.get("code");
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode, materialCode);
        List<InventoryDetail> inventories = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
        if(inventories == null) {
            return AjaxResult.error("查询该物料库存信息失败");
        }
        LambdaQueryWrapper<Material> materialLambdaQueryWrapper = Wrappers.lambdaQuery();
        materialLambdaQueryWrapper.eq(Material::getCode, materialCode);
        Material material = materialService.getOne(materialLambdaQueryWrapper);
        if(material != null) {
            for (InventoryDetail inventory1 : inventories) {
                inventory1.setMaterialName(material.getName());
            }
        }
        return AjaxResult.success(inventories);
    }

//    /**
//     * 相同物料数量汇总查看
//     */
//    @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));
            }
        }
        ajaxResult.setData("");
        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(taskHeaderLambda);
        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(taskHeaderLambda);
        if(taskHeaders.isEmpty()){
            return AjaxResult.success("没有可回库的任务");
        }
        for (TaskHeader item : taskHeaders) {
            ajaxResult = acsService.ReceiptTask(item.getId());
        }


        return ajaxResult;
    }




}