自动化立体仓库 - WMS系统
zjj
2025-01-08 ac0f708807b8876b23b59dfce0d41a146323428a
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -1,5 +1,6 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
@@ -8,18 +9,21 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
import com.zy.common.model.WrkDto;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -28,6 +32,7 @@
 */
@RestController
@RequestMapping("mobile")
@Slf4j
public class MobileController extends BaseController  {
    @Autowired
@@ -50,6 +55,155 @@
    private BasDevpService basDevpService;
    @Autowired
    private PackService packService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private WrkDetlLogService wrkDetlLogService;
    @Autowired
    private CommonService commonService;
//    @PostMapping("/agv/start")
//    @ManagerAuth
//    public R pdaStockCheck(@RequestBody StockCheckParam param){
//
//
//
//    }
    @PostMapping("/agv/start")
    @ManagerAuth
    public R pdaAgvStart(@RequestBody Map<String,Object> map){
        if (Cools.isEmpty(map.get("sta"))) {
            return R.parse("暂存位不能为空");
        } else if (Cools.isEmpty(map.get("inSta"))) {
            return R.parse("入库站点不能为空");
        }
//        HashMap<String, String> map1 = new HashMap<>();
//        map1.put("agv0001","sta0001");
//        String sta = map.get("sta").toString();
//
//        ForwardAGVTaskParam forwardAGVTaskParam = new ForwardAGVTaskParam();
//        getAgvTaskParam(forwardAGVTaskParam,sta,map1.get(sta));
//        String request = forwardAGVHttpRequest(forwardAGVTaskParam, "10.0.100.110:8182", "/rcms/services/rest/hikRpcService/genAgvSchedulingTask");
//        if ("SUCCESS".equals(request)) {
//            return R.ok();
//        }
        String sta = (String) map.get("sta"); // 暂存位
        String inSta = String.valueOf(map.get("inSta")); // 入库站点
        return mobileService.inLocCallAgv(sta, inSta);
    }
    @PostMapping("/agv/unbind")
    @ManagerAuth
    public R pdaAgvUnbind(@RequestBody Map<String,Object> map){
        String site = (String) map.get("site"); // 暂存位
        if (Cools.isEmpty(site)) {
            return R.parse("暂存位不能为空");
        }
        return mobileService.unbind(site);
    }
    private void getAgvTaskParam(ForwardAGVTaskParam agvTaskCreateParam,String agv,String sta){
        List<ForwardAGVTaskParam.PositionCodePaths> agvTaskParamList = Arrays.asList(
                //起始位
                new ForwardAGVTaskParam.PositionCodePaths(agv,"05"),
                //目标位
                new ForwardAGVTaskParam.PositionCodePaths(sta,"05")
        );
        Date date = new Date();
        DecimalFormat df = new DecimalFormat("0000");
        String wrkNo = "Crn"+date.getTime()/1000;
        agvTaskCreateParam.setReqCode(wrkNo);
        agvTaskCreateParam.setReqTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        agvTaskCreateParam.setTaskTyp("GT1");
        agvTaskCreateParam.setCtnrCode("00000000");
        agvTaskCreateParam.setPositionCodePath(agvTaskParamList);
        agvTaskCreateParam.setCtnrTyp("1");
        agvTaskCreateParam.setTaskCode(wrkNo);
    }
    private String forwardAGVHttpRequest(Object requestParam, String url, String path){
        String response = "";
        String success = "error";
        try {
            response = new HttpHandler.Builder()
                    .setUri(url)
//                    .setHttps(true)
                    .setPath(path)
                    .setJson(JSONObject.toJSONString(requestParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            String message = jsonObject.get("code").toString();
            if(("0").equals(message) || ("请求编号已存在").contains(message)){
                success = "SUCCESS";
            }else {
                success = message;
            }
            log.info("转发agv任务:请求体:"+JSONObject.toJSONString(requestParam)+",返回值:"+jsonObject);
        }catch (Exception e){
        }
        return success;
    }
    @RequestMapping("/select/workDetl/barcode")
    @ManagerAuth
    public R selectWorkDetlBarcode(@RequestBody Map<String,Object> map) {
        String barcode = map.get("barcode").toString();
        if (Cools.isEmpty(barcode)) {
            return R.error("条码为空");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        if (Cools.isEmpty(wrkMast)) {
            return R.error("未找到任务");
        }
        if (wrkMast.getWrkSts() != 14 && wrkMast.getIoType() != 103) {
            return R.error("任务状态有误");
        }
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        if (Cools.isEmpty(wrkDetls)) {
            return R.error("工作明细有误");
        }
        return R.ok(wrkDetls);
    }
    @RequestMapping("/leftovers/out")
    @ManagerAuth
    public R leftoversOut(@RequestBody Map<String,Object> map) {
        mobileService.leftoversOut(map,getUserId());
        return R.ok();
    }
    // 商品上架
    @RequestMapping("/mat/onSale/auth")
    @ManagerAuth
    public R matOnSale(@RequestBody CombParam combParam){
        mobileService.onSale(combParam);
        return R.ok("上架成功");
    }
    // 商品下架
    @RequestMapping("/mat/offSale/auth")
    //@ManagerAuth
    public R matOffSale(@RequestBody OffSaleParam offSaleParam){
        mobileService.offSale(offSaleParam);
        return R.ok("下架成功");
    }
    // 组托 ----------------------------------------------------------------------------------------------------
@@ -57,32 +211,112 @@
     * 根据单号检索单据数据
     * http://localhost:8081/jkwms/mobile/order/serach/orderNo/auth?orderNo=123123
     */
//    @RequestMapping("/order/search/orderNo/auth")
//    @ManagerAuth
//    public R orderSearchByBarcode(@RequestParam String orderNo){
//        Order order = orderService.selectByNo(orderNo);
//        if (order == null) {
//            return R.ok();
//        }
//        DocType docType = docTypeService.selectById(order.getDocType());
//        if (docType.getPakin() == null || docType.getPakin() != 1) {
//            return R.ok();
//        }
//        if (order.getSettle() > 2) {
//            return R.ok();
//        }
//        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
//        if (Cools.isEmpty(orderDetls)) {
//            return R.ok();
//        }
//        return R.ok().add(orderDetls);
//    }
    @RequestMapping("/order/search/orderNo/auth")
    @ManagerAuth
    public R orderSearchByBarcode(@RequestParam String orderNo){
        Order order = orderService.selectByNo(orderNo);
        if (order == null) {
        if (Cools.isEmpty(orderNo)){
            orderNo=null;
        }
        List<Order> orders = orderService.selectorderNoL(orderNo);
        if (Cools.isEmpty(orders)){
            return R.ok();
        }
        DocType docType = docTypeService.selectById(order.getDocType());
        if (docType.getPakin() == null || docType.getPakin() != 1) {
            return R.ok();
        LinkedList<CombParam> combParams = new LinkedList<>();
        if (!Cools.isEmpty(orders)){
            for (Order order:orders){
                CombParam combParam=new CombParam();
                if (order == null) {
                    continue;
                }
                DocType docType = docTypeService.selectById(order.getDocType());
                if (docType.getPakin() == null || docType.getPakin() != 1) {
                    continue;
                }
                if (order.getSettle() > 2) {
                    continue;
                }
                List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
                if (!Cools.isEmpty(orderDetls)) {
                    LinkedList<CombParam.CombMat> combMats = new LinkedList<>();
                    for (OrderDetl orderDetl:orderDetls){
                        CombParam.CombMat combMat = new CombParam.CombMat();
                        combMat.setMatnr(orderDetl.getMatnr());
                        combMat.setBatch(orderDetl.getBatch());
                        combMat.setAnfme(orderDetl.getAnfme()-orderDetl.getWorkQty());
                        combMat.setMaktx(orderDetl.getMaktx());
                        combMat.setSpecs(orderDetl.getSpecs());
                        combMats.add(combMat);
                    }
                    combParam.setCombMats(combMats);
                }
                combParam.setOrderNo(order.getOrderNo());
                combParams.add(combParam);
            }
        }
        if (order.getSettle() > 2) {
            return R.ok();
        }
        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
        if (Cools.isEmpty(orderDetls)) {
            return R.ok();
        }
        return R.ok().add(orderDetls);
        return R.ok().add(combParams);
    }
    @RequestMapping("/comb/auth")
    @ManagerAuth(memo = "组托")
    public R comb(@RequestBody CombParam combParam){
        mobileService.comb(combParam, getUserId());
        return R.ok("组托成功");
        if (Cools.isEmpty(combParam.getBarcode(), combParam.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                .eq("barcode", combParam.getBarcode())
                .eq("io_type", 104)
                .eq("wrk_sts", 14));
        if (Cools.isEmpty(wrkMast)) {
            mobileService.comb(combParam, getUserId());
            return R.ok("组托成功");
        }else {
            mobileService.mergeComb(combParam, getUserId());
            return R.ok("并板成功");
        }
    }
    @RequestMapping("/pingKu/Shelves/auth")
    @ManagerAuth(memo = "平库上架")
    public R pingKuShelves(@RequestBody CombParam combParam){
        if (Cools.isEmpty(combParam.getLocno(), combParam.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        mobileService.pingKuShelves(combParam, getUserId());
        return R.ok();
    }
    @RequestMapping("/pingKu/unShelves/auth")
    @ManagerAuth(memo = "平库下架")
    public R pingKuUnShelves(@RequestBody CombParam combParam){
        if (Cools.isEmpty(combParam.getLocno(), combParam.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        mobileService.pingKuUnShelves(combParam, getUserId());
        return R.ok();
    }
    @RequestMapping("/pack/get/auth")
@@ -149,6 +383,41 @@
            return R.ok().add(Cools.add("wrkNo", wrkMast.getWrkNo()).add("ioType", wrkMast.getIoType()).add("list", wrkDetls));
        }
        return R.ok();
    }
    /**
     * 出库确认 - 扫货物  广德宜科版
     * 1.全板 返回 101
     * 2.拣料 返回 103
     */
    @RequestMapping("/pakout/confirm/goods/auth")       //待完善  原因(客户未给出详细信息)
    @ManagerAuth
    public R pakoutQueryByGoods(@RequestBody GDYKConfirmGoodsParam combParam){
        if (Cools.isEmpty(combParam)) {
            return R.ok();
        }
//        List<Order> orders = orderService.selectorderNoL(batch);
        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("matnr", combParam.getMatnr()).eq("batch", combParam.getBatch()).eq("order_no",combParam.getOrderNo()));
        if (Cools.isEmpty(orderDetl)){
            return R.error("未查到数据");
        }
        if (!orderDetl.getQty$().equals("已完成")){
            return R.error("任务未完成");
        }
        //复核数
        orderDetl.setSource(1);
        orderDetlService.updateById(orderDetl);
        return R.ok();
    }
    // 根据库位码和商品码搜索商品
    @RequestMapping("/mat/find/auth")
    public R find(@RequestParam(required = false) String locNo
            , @RequestParam(required = false) String matnr){
        //List<ManLocDetl> manLocDetls = manLocDetlMapper.selectItem0(locNo, matnr);
        ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(locNo, matnr);
        return R.ok(manLocDetl);
        //return R.ok(manLocDetlMapper.selectItem0(locNo, matnr));
    }
    /**
@@ -297,62 +566,75 @@
        return R.ok("盘点成功");
    }
    @PostMapping("/out/pakout/auth")
//    @ManagerAuth(memo = "根据订单出库")
    @RequestMapping("/pda/adjust/auth")
    @ManagerAuth(memo = "pda盘点")
    public R pdaAdjust(@RequestBody pdaAdjustParam param){
        mobileService.pdaAdjust(param,getUserId());
        return R.ok("盘点成功");
    }
    @PostMapping("/order/out/pakout/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakoutByOrder(@RequestBody JSONObject param) {
        if(!param.containsKey("staNo") || !param.containsKey("orderNo")){
            return R.parse(BaseRes.PARAM);
        }
        Integer staNo = param.containsKey("staNo") ? Integer.parseInt(param.get("staNo").toString()) : 0;
        String orderNo = param.containsKey("orderNo") ? param.get("orderNo").toString() : "";
        mobileService.pakoutByOrder(param,getUserId());
        return R.ok("出库成功");
    }
        BasDevp sta = basDevpService.checkSiteStatus(staNo);
        //根据订单号生成出库任务工作档,待实现
        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", orderNo));
        for(OrderDetl orderDetl : orderDetls){
            //查询所有库位状态为F的库位信息
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),null);
            if (locDetls.size() == 0) {
                throw new CoolException("库存中没有该物料");
            }
    @GetMapping("/checkOut/submit/auth")
    @ManagerAuth(memo = "盘点上传")
    public R CheckOutUploadERP(@RequestParam String orderId){
        mobileService.inventoryUpload(orderId);
        return R.ok("盘点成功");
    }
    @RequestMapping("/ddd/ddd")
    @ManagerAuth()
    public R ddd() {
        int w = 64;
        for (int i = 17; i <= 37; i++) {
        for (int j = 1;j<=3;j++){
//            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 7).eq("lev1", j));
            LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 12).eq("lev1", j));
            LocMast locMast3 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 14).eq("lev1", j));
//            LocMast locMast4 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", 26).eq("bay1", i).eq("lev1", 1));
//            if (locMast.getGro1() == 999){
//                continue;
//            }
//            locMast.setGro1(w);
//            locMast.setGro1(locMast.getGro1()+1000);
            locMast2.setGro1(locMast2.getGro1()+10000);
            locMast3.setGro1(locMast3.getGro1()+2000);
//            locMast4.setGro1(w);
//            locMastService.updateById(locMast);
            locMastService.updateById(locMast2);
            locMastService.updateById(locMast3);
//            locMastService.updateById(locMast4);
            w++;
        }
//        if (Cools.isEmpty(locDtos)) {
//            return R.parse(BaseRes.PARAM);
//        }
//        boolean lack = true;
//        for (LocDto locDto : locDtos) {
//            if (!locDto.isLack()) {
//                lack = false;
//                break;
//            }
//        }
//        if (lack) {
//            return R.error("库存不足");
//        }
//
//        Thread.sleep(1000L);
//
//        List<TaskDto> taskDtos = new ArrayList<>();
//        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
//        for (LocDto locDto : locDtos) {
//            if (locDto.isLack()) { continue; }
//            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
//            if (TaskDto.has(taskDtos, taskDto)) {
//                TaskDto dto = TaskDto.find(taskDtos, taskDto);
//                assert dto != null;
//                dto.getLocDtos().addAll(taskDto.getLocDtos());
//            } else {
//                taskDtos.add(taskDto);
//            }
//        }
//        // -----------------------------------------------------------------------------------------------
//        for (TaskDto taskDto : taskDtos) {
//            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
//            workService.stockOut(staNo, taskDto, getUserId());
        }
//        for (int i = 17; i <=37; i++) {
//            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 14).eq("lev1", 1));
////            LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 10).eq("lev1", 1));
////            LocMast locMast3 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 11).eq("lev1", 1));
////            LocMast locMast4 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", i).eq("bay1", 12).eq("lev1", 1));
//            locMast.setGro1(w);
////            locMast2.setGro1(w);
////            locMast3.setGro1(w);
////            locMast4.setGro1(w);
//            locMastService.updateById(locMast);
////            locMastService.updateById(locMast2);
////            locMastService.updateById(locMast3);
////            locMastService.updateById(locMast4);
//            w++;
//        }
        return R.ok();
    }
}