package com.zy.asrs.wms.asrs.controller;  
 | 
  
 | 
import com.alibaba.fastjson.JSON;  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
 | 
import com.zy.asrs.wms.asrs.entity.param.StockOutParam;  
 | 
import com.zy.asrs.framework.common.R;  
 | 
import com.zy.asrs.framework.exception.CoolException;  
 | 
import com.zy.asrs.wms.asrs.entity.Order;  
 | 
import com.zy.asrs.wms.asrs.entity.WaveDetl;  
 | 
import com.zy.asrs.wms.asrs.entity.dto.MergePreviewDto;  
 | 
import com.zy.asrs.wms.asrs.entity.dto.MergePreviewResultDto;  
 | 
import com.zy.asrs.wms.asrs.entity.dto.OrderOutBatchPreviewDto;  
 | 
import com.zy.asrs.wms.asrs.entity.param.*;  
 | 
import com.zy.asrs.wms.asrs.manage.OutManage;  
 | 
import com.zy.asrs.wms.asrs.service.OrderService;  
 | 
import com.zy.asrs.wms.asrs.service.WaveDetlService;  
 | 
import com.zy.asrs.wms.common.annotation.OperationLog;  
 | 
import com.zy.asrs.wms.system.controller.BaseController;  
 | 
import org.springframework.beans.factory.annotation.Autowired;  
 | 
import org.springframework.transaction.annotation.Transactional;  
 | 
import org.springframework.web.bind.annotation.PostMapping;  
 | 
import org.springframework.web.bind.annotation.RequestBody;  
 | 
import org.springframework.web.bind.annotation.RequestMapping;  
 | 
import org.springframework.web.bind.annotation.RestController;  
 | 
  
 | 
import java.util.ArrayList;  
 | 
import java.util.List;  
 | 
import java.util.Objects;  
 | 
  
 | 
  
 | 
@RestController  
 | 
@RequestMapping("/api")  
 | 
public class OutController extends BaseController {  
 | 
  
 | 
    @Autowired  
 | 
    private OutManage outManage;  
 | 
    @Autowired  
 | 
    private OrderService orderService;  
 | 
    @Autowired  
 | 
    private WaveDetlService waveDetlService;  
 | 
  
 | 
    /**  
 | 
     * 出库  
 | 
     */  
 | 
    @PostMapping("/out/start")  
 | 
    @OperationLog("出库")  
 | 
    @Transactional  
 | 
    public R start(@RequestBody OutParam param) {  
 | 
        outManage.out(param);  
 | 
        return R.ok();  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/orderOut/batch/preview")  
 | 
    @OperationLog("批量出库预览")  
 | 
    @Transactional  
 | 
    public R orderOutBatchPreview(@RequestBody OrderOutBatchPreviewParam param) {  
 | 
        List<OrderOutBatchPreviewDto> previewDtos = outManage.orderOutBatchPreview(param);  
 | 
        return R.ok().add(previewDtos);  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/orderOut/batch")  
 | 
    @OperationLog("批量出库")  
 | 
    @Transactional  
 | 
    public R orderOutBatch(@RequestBody List<OrderOutBatchPreviewDto> param) {  
 | 
        outManage.orderOutBatch(param);  
 | 
        return R.ok();  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/orderOut/merge/preview")  
 | 
    @OperationLog("预览合并订单")  
 | 
    @Transactional  
 | 
    public R orderOutMergePreview(@RequestBody OrderOutMergePreviewParam param) {  
 | 
        List<MergePreviewDto> dtos = outManage.orderOutMergePreview(param);  
 | 
        return R.ok().add(dtos);  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/orderOut/merge/loc/preview")  
 | 
    @OperationLog("预览合并订单出库")  
 | 
    @Transactional  
 | 
    public R orderOutMergeLocPreview(@RequestBody List<MergePreviewDto> param) {  
 | 
        List<MergePreviewResultDto> dtos = outManage.orderOutMergeLocPreview(param);  
 | 
        return R.ok().add(dtos);  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/orderOut/wave/preview")  
 | 
    @OperationLog("预览波次出库")  
 | 
    @Transactional  
 | 
    public R orderOutWavePreview(@RequestBody OrderOutWavePreviewParam param) {  
 | 
        if (param == null) {  
 | 
            throw new CoolException("参数不能为空");  
 | 
        }  
 | 
  
 | 
        Long waveId = param.getWaveId();  
 | 
        if (waveId == null) {  
 | 
            throw new CoolException("波次不能为空");  
 | 
        }  
 | 
  
 | 
        //获取出库订单  
 | 
        List<Long> orderIds = new ArrayList<>();  
 | 
        List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, waveId));  
 | 
        for (Order order : orders) {  
 | 
            orderIds.add(order.getId());  
 | 
        }  
 | 
  
 | 
        //获取订单波次明细  
 | 
        List<MergePreviewDto> dtos = new ArrayList<>();  
 | 
        List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, waveId));  
 | 
        for (WaveDetl waveDetl : waveDetls) {  
 | 
            MergePreviewDto dto = new MergePreviewDto();  
 | 
            dtos.add(dto);  
 | 
  
 | 
            double anfme = Math.round((waveDetl.getAnfme() - waveDetl.getWorkQty()) * 1000) / 1000.0;  
 | 
            dto.setMatnr(waveDetl.getMatnr());  
 | 
            dto.setBatch(waveDetl.getBatch());  
 | 
            dto.setStatus(0);  
 | 
            dto.setWorkQty(0.0);  
 | 
            dto.setAnfme(anfme);  
 | 
            dto.setOrderIds(orderIds);  
 | 
            dto.setFieldParams(JSON.parseArray(waveDetl.getFieldParams(), FieldParam.class));  
 | 
            dto.setFieldParamsEncode(waveDetl.getFieldParams());  
 | 
        }  
 | 
        //获取波次明细库位信息  
 | 
        List<MergePreviewResultDto> resultDtos = outManage.orderOutMergeLocPreview(dtos);  
 | 
        return R.ok().add(resultDtos);  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/orderOut/merge/wave")  
 | 
    @OperationLog("生成波次任务")  
 | 
    @Transactional  
 | 
    public R orderOutMerge(@RequestBody OrderOutMergeParamDto param) {  
 | 
        outManage.orderOutMergeWave(param);  
 | 
        return R.ok();  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/locs/stock")  
 | 
    @OperationLog("手动出库")  
 | 
    public R stockOut(@RequestBody StockOutParam param) {  
 | 
        if (Objects.isNull(param)) {  
 | 
            throw new CoolException("参数不能为空!!");  
 | 
        }  
 | 
        outManage.outLocStock(param);  
 | 
        return R.ok();  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/wave/generate")  
 | 
    @OperationLog("生成波次")  
 | 
    @Transactional  
 | 
    public R generateWave(@RequestBody GenerateWaveParam param) {  
 | 
        outManage.generateWave(param);  
 | 
        return R.ok();  
 | 
    }  
 | 
  
 | 
    @PostMapping("/out/wave/cancel")  
 | 
    @OperationLog("取消波次")  
 | 
    @Transactional  
 | 
    public R cancelWave(@RequestBody List<Long> waveIds) {  
 | 
        outManage.cancelWave(waveIds);  
 | 
        return R.ok();  
 | 
    }  
 | 
}  
 |