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 previewDtos = outManage.orderOutBatchPreview(param); return R.ok().add(previewDtos); } @PostMapping("/out/orderOut/batch") @OperationLog("批量出库") @Transactional public R orderOutBatch(@RequestBody List param) { outManage.orderOutBatch(param); return R.ok(); } @PostMapping("/out/orderOut/merge/preview") @OperationLog("预览合并订单") @Transactional public R orderOutMergePreview(@RequestBody OrderOutMergePreviewParam param) { List dtos = outManage.orderOutMergePreview(param); return R.ok().add(dtos); } @PostMapping("/out/orderOut/merge/loc/preview") @OperationLog("预览合并订单出库") @Transactional public R orderOutMergeLocPreview(@RequestBody List param) { List dtos = outManage.orderOutMergeLocPreview(param); return R.ok().add(dtos); } @PostMapping("/out/orderOut/wave/preview") @OperationLog("预览波次出库") @Transactional(rollbackFor = Exception.class) public R orderOutWavePreview(@RequestBody OrderOutWavePreviewParam param) { if (param == null) { throw new CoolException("参数不能为空"); } Long waveId = param.getWaveId(); if (waveId == null) { throw new CoolException("波次不能为空"); } //获取出库订单 List orderIds = new ArrayList<>(); List orders = orderService.list(new LambdaQueryWrapper().eq(Order::getWaveId, waveId)); for (Order order : orders) { orderIds.add(order.getId()); } //获取订单波次明细 List dtos = new ArrayList<>(); List waveDetls = waveDetlService.list(new LambdaQueryWrapper().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 resultDtos = outManage.orderOutMergeLocPreview(dtos); return R.ok().add(resultDtos); } @PostMapping("/out/orderOut/merge/wave") @OperationLog("生成波次任务") 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/check/locs/stock") @OperationLog("盘点出库") public R checkOut(@RequestBody CheckOutParam param) { if (Objects.isNull(param)) { throw new CoolException("参数不能为空!!"); } outManage.outCheckStock(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 waveIds) { outManage.cancelWave(waveIds); return R.ok(); } }