#
Junjie
2024-09-20 053e6028bd20e599aea103401137816c6296a9ef
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OutController.java
@@ -1,52 +1,144 @@
package com.zy.asrs.wms.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wms.asrs.controller.req.OutReq;
import com.zy.asrs.wms.asrs.entity.LocDetl;
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.Map;
/**
 * 这里处理所有的出库流程的接口
 */
@RestController
@RequestMapping("/api")
public class OutController extends BaseController {
    @Autowired
    private OutManage outManage;
    /**
     * 获取库存
     *
     * @param map
     * @return
     */
    @PostMapping("/out/getStock")
    public R page(@RequestBody Map<String, Object> map) {
        List<LocDetl> suitableMat = outManage.getSuitableMat(map);
        return R.ok(suitableMat);
    }
    @Autowired
    private OrderService orderService;
    @Autowired
    private WaveDetlService waveDetlService;
    /**
     * 出库
     *
     * @param outReq 出库列表
     * @return
     */
    @PostMapping("/out/start")
    public R page(@RequestBody OutReq outReq) {
        outManage.out(outReq);
    @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 = waveDetl.getAnfme() - waveDetl.getWorkQty();
            dto.setMatnr(waveDetl.getMatnr());
            dto.setBatch(waveDetl.getBatch());
            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/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();
    }
}