package com.vincent.rsf.server.manager.controller; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.vincent.rsf.framework.common.Cools; 
 | 
import com.vincent.rsf.framework.common.R; 
 | 
import com.vincent.rsf.framework.exception.CoolException; 
 | 
import com.vincent.rsf.server.common.utils.ExcelUtil; 
 | 
import com.vincent.rsf.server.common.annotation.OperationLog; 
 | 
import com.vincent.rsf.server.common.domain.BaseParam; 
 | 
import com.vincent.rsf.server.common.domain.KeyValVo; 
 | 
import com.vincent.rsf.server.common.domain.PageParam; 
 | 
import com.vincent.rsf.server.manager.entity.Warehouse; 
 | 
import com.vincent.rsf.server.manager.entity.WarehouseAreas; 
 | 
import com.vincent.rsf.server.manager.service.WarehouseAreasItemService; 
 | 
import com.vincent.rsf.server.manager.service.WarehouseAreasService; 
 | 
import com.vincent.rsf.server.manager.service.WarehouseService; 
 | 
import com.vincent.rsf.server.system.controller.BaseController; 
 | 
import io.swagger.annotations.Api; 
 | 
import io.swagger.annotations.ApiOperation; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.security.access.prepost.PreAuthorize; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.util.*; 
 | 
  
 | 
@Api(tags = "仓库") 
 | 
@RestController 
 | 
public class WarehouseController extends BaseController { 
 | 
  
 | 
    @Autowired 
 | 
    private WarehouseService warehouseService; 
 | 
  
 | 
    @Autowired 
 | 
    private WarehouseAreasService warehouseAreasService; 
 | 
  
 | 
    @Autowired 
 | 
    private WarehouseAreasItemService warehouseAreasItemService; 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @PostMapping("/warehouse/page") 
 | 
    public R page(@RequestBody Map<String, Object> map) { 
 | 
        BaseParam baseParam = buildParam(map, BaseParam.class); 
 | 
        PageParam<Warehouse, BaseParam> pageParam = new PageParam<>(baseParam, Warehouse.class); 
 | 
        return R.ok().add(warehouseService.page(pageParam, pageParam.buildWrapper(true))); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @PostMapping("/warehouse/list") 
 | 
    public R list(@RequestBody Map<String, Object> map) { 
 | 
        return R.ok().add(warehouseService.list()); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @PostMapping({"/warehouse/many/{ids}", "/warehouses/many/{ids}"}) 
 | 
    public R many(@PathVariable Long[] ids) { 
 | 
        return R.ok().add(warehouseService.listByIds(Arrays.asList(ids))); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @GetMapping("/warehouse/{id}") 
 | 
    public R get(@PathVariable("id") Long id) { 
 | 
        return R.ok().add(warehouseService.getById(id)); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:save')") 
 | 
    @OperationLog("Create 仓库信息表") 
 | 
    @PostMapping("/warehouse/save") 
 | 
    public R save(@RequestBody Warehouse warehouse) { 
 | 
        if (Objects.isNull(warehouse)) { 
 | 
            throw new CoolException("参数不能为空!!"); 
 | 
        } 
 | 
        if (Objects.isNull(warehouse.getName())) { 
 | 
            throw new CoolException("仓库名称不能为空!!"); 
 | 
        } 
 | 
        List<Warehouse> warehouses = warehouseService.list(new LambdaQueryWrapper<Warehouse>().eq(Warehouse::getName, warehouse.getName())); 
 | 
        if (!warehouses.isEmpty()) { 
 | 
            throw new CoolException("仓库名称已存在!!"); 
 | 
        } 
 | 
        if (!warehouseService.list(new LambdaQueryWrapper<Warehouse>().eq(Warehouse::getCode, warehouse.getCode())).isEmpty()) { 
 | 
            throw new CoolException("仓库编码已存在!!"); 
 | 
        } 
 | 
  
 | 
        warehouse.setCreateBy(getLoginUserId()); 
 | 
        warehouse.setUpdateBy(getLoginUserId()); 
 | 
        if (!warehouseService.save(warehouse)) { 
 | 
            return R.error("Save Fail"); 
 | 
        } 
 | 
        return R.ok("Save Success").add(warehouse); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:update')") 
 | 
    @OperationLog("Update 仓库信息表") 
 | 
    @PostMapping("/warehouse/update") 
 | 
    public R update(@RequestBody Warehouse warehouse) { 
 | 
        if (Objects.isNull(warehouse)) { 
 | 
            throw new CoolException("参数不能为空!!"); 
 | 
        } 
 | 
        if (Objects.isNull(warehouse.getName())) { 
 | 
            throw new CoolException("仓库名称不能为空!!"); 
 | 
        } 
 | 
        warehouse.setUpdateBy(getLoginUserId()); 
 | 
  
 | 
        Warehouse warehouse1 = warehouseService.getById(warehouse.getId()); 
 | 
        if (!warehouse.getName().equals(warehouse1.getName())) { 
 | 
            List<Warehouse> areasList = warehouseService.list(new LambdaQueryWrapper<Warehouse>().eq(Warehouse::getName, warehouse1.getName())); 
 | 
            if (!areasList.isEmpty()) { 
 | 
                throw new CoolException("仓库名已存在!!"); 
 | 
            } 
 | 
        } 
 | 
        if (!warehouse.getCode().equals(warehouse1.getCode())) { 
 | 
            List<Warehouse> areasList = warehouseService.list(new LambdaQueryWrapper<Warehouse>().eq(Warehouse::getCode, warehouse1.getCode())); 
 | 
            if (!areasList.isEmpty()) { 
 | 
                throw new CoolException("仓库编码已存在!!"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        if (!warehouseService.updateById(warehouse)) { 
 | 
            return R.error("Update Fail"); 
 | 
        } 
 | 
        return R.ok("Update Success").add(warehouse); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:remove')") 
 | 
    @OperationLog("Delete 仓库信息表") 
 | 
    @PostMapping("/warehouse/remove/{ids}") 
 | 
    public R remove(@PathVariable Long[] ids) { 
 | 
        if (ids.length < 1) { 
 | 
            throw new CoolException("查询id不能为空!!"); 
 | 
        } 
 | 
        List<WarehouseAreas> warehouseAreas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>() 
 | 
                .in(WarehouseAreas::getWarehouseId, ids)); 
 | 
        if (!warehouseAreas.isEmpty()) { 
 | 
            throw new CoolException("当前仓库下有未删除库区, 不可操作删除!!"); 
 | 
        } 
 | 
        if (!warehouseService.removeByIds(Arrays.asList(ids))) { 
 | 
            return R.error("Delete Fail"); 
 | 
        } 
 | 
        return R.ok("Delete Success").add(ids); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @PostMapping("/warehouse/query") 
 | 
    public R query(@RequestParam(required = false) String condition) { 
 | 
        List<KeyValVo> vos = new ArrayList<>(); 
 | 
        LambdaQueryWrapper<Warehouse> wrapper = new LambdaQueryWrapper<>(); 
 | 
        if (!Cools.isEmpty(condition)) { 
 | 
            wrapper.like(Warehouse::getName, condition); 
 | 
        } 
 | 
        warehouseService.page(new Page<>(1, 30), wrapper).getRecords().forEach( 
 | 
                item -> vos.add(new KeyValVo(item.getId(), item.getName())) 
 | 
        ); 
 | 
        return R.ok().add(vos); 
 | 
    } 
 | 
  
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @PostMapping("/warehouse/export") 
 | 
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { 
 | 
        List<Warehouse> list = new ArrayList<>(); 
 | 
        if (!Objects.isNull(map.get("ids"))) { 
 | 
            list = warehouseService.list(new LambdaQueryWrapper<Warehouse>().in(Warehouse::getId, map.get("ids"))); 
 | 
        } else { 
 | 
            list = warehouseService.list(); 
 | 
        } 
 | 
        ExcelUtil.build(ExcelUtil.create(list, Warehouse.class), response); 
 | 
    } 
 | 
  
 | 
    @ApiOperation("获取仓库树状图") 
 | 
    @PreAuthorize("hasAuthority('manager:warehouse:list')") 
 | 
    @PostMapping("/warehouse/areas") 
 | 
    public R getAreasForWarehouse(@RequestBody Map<String, Object> param) { 
 | 
        return R.ok(warehouseService.getAllWarehouseAreas(param)); 
 | 
    } 
 | 
  
 | 
} 
 |