package com.vincent.rsf.server.manager.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.controller.params.WarehouseStockParam; import com.vincent.rsf.server.manager.entity.StockItem; import com.vincent.rsf.server.manager.entity.ViewStockManage; import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.enums.ViewStockType; import com.vincent.rsf.server.manager.service.WarehouseStockService; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; 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.List; import java.util.Map; import java.util.Objects; @Api("库存管理") @RestController @RequestMapping("/warehouse/stock") public class WarehouseStockController extends BaseController { @Autowired private WarehouseStockService warehouseStockService; @PreAuthorize("hasAuthority('manager:locItem:list')") @PostMapping("/page") public R page(@RequestBody Map param) { if (Objects.isNull(param)) { return R.error("参数不能为空!!"); } BaseParam baseParam = buildParam(param, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, ViewStockManage.class); WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class); String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType(); ViewStockManage stock = stockParam.getStock(); QueryWrapper wrapper = new QueryWrapper<>(); if (type.equals(ViewStockType.VIEW_STOCK_TYPE_SUPPLIER.val)) { wrapper.groupBy("splr_id"); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_BATCH.val)) { wrapper.groupBy("batch"); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_WAREHOUSE.val)) { wrapper.groupBy("warehouse"); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_FIELDSINDEX.val)) { wrapper.groupBy("fields_index"); } else { wrapper.groupBy("matnr_id"); } FieldsUtils.setFieldsFilters(wrapper, pageParam, ViewStockManage.class); IPage pageResult = warehouseStockService.pageByStock(pageParam, wrapper); List records = pageResult.getRecords(); for (ViewStockManage record : records) { if (!Objects.isNull(record.getFieldsIndex())) { Map fields = FieldsUtils.getFields(record.getFieldsIndex()); record.setExtendFields(fields); } } pageResult.setRecords(records); return R.ok(pageResult); } @PreAuthorize("hasAuthority('manager:locItem:list')") @PostMapping("/histories/page") public R histories(@RequestBody Map param) { if (Objects.isNull(param)) { return R.error("参数不能为空!!"); } BaseParam baseParam = buildParam(param, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, StockItem.class); WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class); String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType(); ViewStockManage stock = stockParam.getStock(); QueryWrapper wrapper = new QueryWrapper<>(); if (type.equals(ViewStockType.VIEW_STOCK_TYPE_SUPPLIER.val)) { wrapper.eq("splr_id", stock.getSplrId()); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_BATCH.val)) { wrapper.eq("batch", stock.getBatch()); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_WAREHOUSE.val)) { wrapper.eq("warehouse", stock.getWarehouse()); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_FIELDSINDEX.val)) { wrapper.eq("fields_index", stock.getFieldsIndex()); } else { wrapper.eq("matnr_id", stock.getMatnrId()); } IPage pageResult = warehouseStockService.pageByHistories(pageParam, wrapper); List records = pageResult.getRecords(); for (StockItem record : records) { if (!Objects.isNull(record.getFieldsIndex())) { Map fields = FieldsUtils.getFields(record.getFieldsIndex()); record.setExtendFields(fields); } } pageResult.setRecords(records); return R.ok(pageResult); } @PreAuthorize("hasAuthority('manager:locItem:list')") @PostMapping("/info") public R stockInfo(@RequestBody Map param) { if (Objects.isNull(param)) { return R.error("参数不能为空!!"); } BaseParam baseParam = buildParam(param, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, ViewStockManage.class); WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class); String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType(); if (Objects.isNull(type)) { return R.error("参数不能为空!!"); } ViewStockManage stock = stockParam.getStock(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); if (type.equals(ViewStockType.VIEW_STOCK_TYPE_SUPPLIER.val)) { wrapper.eq(ViewStockManage::getSplrId, stock.getSplrId()); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_BATCH.val)) { wrapper.eq(ViewStockManage::getBatch, stock.getBatch()); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_WAREHOUSE.val)) { wrapper.eq(ViewStockManage::getWarehouse, stock.getWarehouse()); } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_FIELDSINDEX.val)) { if (StringUtils.isBlank(stock.getFieldsIndex())) { wrapper.isNull(ViewStockManage::getFieldsIndex); } else { wrapper.eq(ViewStockManage::getFieldsIndex, stock.getFieldsIndex()); } } else { wrapper.eq(ViewStockManage::getMatnrCode, stock.getMatnrCode()); } return R.ok(warehouseStockService.page(pageParam, wrapper)); } }