diff --git a/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java b/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java index 3f037cc..5b77fe3 100644 --- a/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java +++ b/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java @@ -45,327 +45,328 @@ import java.util.stream.Collectors; @RequestMapping("/config/location") public class LocationController extends BaseController { - private String prefix = "config/location"; - - @Resource - private ContainerService containerService; - @Resource - private LocationService locationService; - @Resource - private InventoryDetailService inventoryDetailService; - @Resource - private MaterialService materialService; - @Resource - private DataSource dataSource; - @Resource - private Print print; - - @RequiresPermissions("config:location:view") - @GetMapping() - public String location() { - return prefix + "/location"; + private String prefix = "config/location"; + + @Resource + private ContainerService containerService; + @Resource + private LocationService locationService; + @Resource + private InventoryDetailService inventoryDetailService; + @Resource + private MaterialService materialService; + @Resource + private DataSource dataSource; + @Resource + private Print print; + + @RequiresPermissions("config:location:view") + @GetMapping() + public String location () { + return prefix + "/location"; + } + + /** + * 查询库位列表 + */ + @ApiOperation(value = "查看库位列表", + notes = "根据行、列、层、格、库位类型、库区、库位状态、容器编码、库位名称、库位编码、创建时间获取库位的详细信息", + httpMethod = "POST") + @RequiresPermissions("config:location:list") + @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) + @PostMapping("/list") + @ResponseBody + public TableDataInfo list ( + @ApiParam(name = "location", value = "行、列、层、格、库位类型、库区、库位状态、容器编码、库位名称、库位编码") Location location, + @ApiParam(name = "createdBegin", value = "起止时间") String createdBegin, + @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd) { + LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(); + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Location::getCreated, createdBegin) + .lt(StringUtils.isNotEmpty(createdEnd), Location::getCreated, createdEnd) + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(StringUtils.isNotEmpty(location.getCode()), Location::getCode, location.getCode()) + .eq(StringUtils.isNotEmpty(location.getName()), Location::getName, location.getName()) + .eq(StringUtils.isNotEmpty(location.getContainerCode()), Location::getContainerCode, location.getContainerCode()) + .eq(StringUtils.isNotNull(location.getSystemCreated()), Location::getStatus, location.getStatus()) + .eq(StringUtils.isNotEmpty(location.getZoneCode()), Location::getZoneCode, location.getZoneCode()) + .eq(StringUtils.isNotNull(location.getIRow()), Location::getIRow, location.getIRow()) + .eq(StringUtils.isNotNull(location.getIColumn()), Location::getIColumn, location.getIColumn()) + .eq(StringUtils.isNotNull(location.getIGrid()), Location::getIGrid, location.getIGrid()) + .eq(StringUtils.isNotNull(location.getILayer()), Location::getILayer, location.getILayer()) + .eq(StringUtils.isNotEmpty(location.getStatus()), Location::getStatus, location.getStatus()) + .eq(StringUtils.isNotEmpty(location.getLocationType()), Location::getLocationType, location.getLocationType()) + .eq(Location::getDeleted, false) + .orderByDesc(Location::getId); + + if(StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { + /*使用分页查询*/ + Page<Location> page = new Page<>(pageNum, pageSize); + IPage<Location> iPage = locationService.page(page, lambdaQueryWrapper); + return getMpDataTable(iPage.getRecords(), iPage.getTotal()); + } else { + List<Location> list = locationService.list(lambdaQueryWrapper); + return getDataTable(list); } - - /** - * 查询库位列表 - */ - @ApiOperation(value = "查看库位列表", - notes = "根据行、列、层、格、库位类型、库区、库位状态、容器编码、库位名称、库位编码、创建时间获取库位的详细信息", - httpMethod = "POST") - @RequiresPermissions("config:location:list") - @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) - @PostMapping("/list") - @ResponseBody - public TableDataInfo list( - @ApiParam(name = "location", value = "行、列、层、格、库位类型、库区、库位状态、容器编码、库位名称、库位编码") Location location, - @ApiParam(name = "createdBegin", value = "起止时间") String createdBegin, - @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd) { - LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(); - PageDomain pageDomain = TableSupport.buildPageRequest(); - Integer pageNum = pageDomain.getPageNum(); - Integer pageSize = pageDomain.getPageSize(); - lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Location::getCreated, createdBegin) - .lt(StringUtils.isNotEmpty(createdEnd), Location::getCreated, createdEnd) - .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) - .eq(StringUtils.isNotEmpty(location.getCode()), Location::getCode, location.getCode()) - .eq(StringUtils.isNotEmpty(location.getName()), Location::getName, location.getName()) - .eq(StringUtils.isNotEmpty(location.getContainerCode()), Location::getContainerCode, location.getContainerCode()) - .eq(StringUtils.isNotNull(location.getSystemCreated()), Location::getStatus, location.getStatus()) - .eq(StringUtils.isNotEmpty(location.getZoneCode()), Location::getZoneCode, location.getZoneCode()) - .eq(StringUtils.isNotNull(location.getIRow()), Location::getIRow, location.getIRow()) - .eq(StringUtils.isNotNull(location.getIColumn()), Location::getIColumn, location.getIColumn()) - .eq(StringUtils.isNotNull(location.getIGrid()), Location::getIGrid, location.getIGrid()) - .eq(StringUtils.isNotNull(location.getILayer()), Location::getILayer, location.getILayer()) - .eq(StringUtils.isNotEmpty(location.getStatus()), Location::getStatus, location.getStatus()) - .eq(StringUtils.isNotEmpty(location.getLocationType()), Location::getLocationType, location.getLocationType()) - .eq(Location::getDeleted, false); - - if (StringUtils.isNotEmpty(location.getUserDef2())) { - if ("有容器".equals(location.getUserDef2())) { - lambdaQueryWrapper.apply("containerCode!='' and containerCode IS NOT null"); - } else { - lambdaQueryWrapper.apply("code in ( select CODE from location where containerCode='' or containerCode IS null) "); - } - lambdaQueryWrapper.orderByDesc(Location::getId); - } - if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { - /*使用分页查询*/ - Page<Location> page = new Page<>(pageNum, pageSize); - IPage<Location> iPage = locationService.page(page, lambdaQueryWrapper); - return getMpDataTable(iPage.getRecords(), iPage.getTotal()); - } else { - List<Location> list = locationService.list(lambdaQueryWrapper); - return getDataTable(list); - } - } - - /** - * 查询库位列表 - */ - @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) - @PostMapping("/getAllLocation") - @ResponseBody - public AjaxResult getAllLocation(String type) { - if (StringUtils.isEmpty(type)) { - return AjaxResult.error("type不能为空"); - } - - return AjaxResult.success(locationService.getAllLocation(type)); + } + + /** + * 查询库位列表 + */ + @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) + @PostMapping("/getAllLocation") + @ResponseBody + public AjaxResult getAllLocation (String type) { + if(StringUtils.isEmpty(type)) { + return AjaxResult.error("type不能为空"); } - - /** - * 新增库位 - */ - @GetMapping("/add") - public String add() { - return prefix + "/add"; - } - - /** - * 新增保存库位 - */ - @ApiOperation(value = "新增库位", notes = "新增单个库位", httpMethod = "POST") - @RequiresPermissions("config:location:add") - @Log(title = "配置-库存资料-库位管理", operating = "新增库位", action = BusinessType.INSERT) - @PostMapping("/add") - @ResponseBody - public AjaxResult addSave(Location location) { - AjaxResult result = locationService.addsave(location); - return result; - } - - - /** - * 批量新增库位 - */ - - @GetMapping("/addBatch") - public String addBatch() { - return prefix + "/addBatch"; + return AjaxResult.success(locationService.getAllLocation(type)); + } + + + /** + * 新增库位 + */ + @GetMapping("/add") + public String add () { + return prefix + "/add"; + } + + /** + * 新增保存库位 + */ + @ApiOperation(value = "新增库位", notes = "新增单个库位", httpMethod = "POST") + @RequiresPermissions("config:location:add") + @Log(title = "配置-库存资料-库位管理", operating = "新增库位", action = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave (Location location) { + AjaxResult result = locationService.addsave(location); + return result; + } + + + /** + * 批量新增库位 + */ + + @GetMapping("/addBatch") + public String addBatch () { + return prefix + "/addBatch"; + } + + + /** + * 批量新增保存库位 + */ + @RequiresPermissions("config:location:add") + @ApiOperation(value = "新增库位", notes = "批量新增库位", httpMethod = "POST") + @Log(title = "配置-库存资料-库位管理", operating = "新增库位", action = BusinessType.INSERT) + @PostMapping("/addBatchSave") + @ResponseBody + public AjaxResult addBatchSave (String prefix, String firstRow, String lastRow, String firstColumn, String lastColumn, String firstLayer, String lastLayer, + String firstGrid, String lastGrid, String roadway, String status, String zoneCode, String locationType, String high) { + + return toAjax(locationService.addBatchSave(prefix, Integer.parseInt(firstRow), Integer.parseInt(lastRow), + Integer.parseInt(firstColumn), Integer.parseInt(lastColumn), Integer.parseInt(firstLayer), Integer.parseInt(lastLayer), + Integer.parseInt(firstGrid), Integer.parseInt(lastGrid), roadway, status, zoneCode, locationType, high)); + } + + /** + * 修改库位 + */ + @GetMapping("/edit/{id}") + public String edit (@PathVariable("id") Integer id, ModelMap mmap) { + Location location = locationService.getById(id); + mmap.put("location", location); + return prefix + "/edit"; + } + + /** + * 修改物料 + */ + @GetMapping("/editBatch/{ids}") + public String editBatch (@PathVariable("ids") String ids, ModelMap mmap) { + mmap.put("ids", ids); + return prefix + "/editBatch"; + } + + /** + * 修改保存库位 + */ + @RequiresPermissions("config:location:edit") + @ApiOperation(value = "修改库位", notes = "批量修改库位", httpMethod = "POST") + @Log(title = "配置-库存资料-库位管理", operating = "修改库位", action = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave (Location location) { + String containerCode = location.getContainerCode(); + if (StringUtils.isNotEmpty(containerCode)) { + Container container = containerService.getContainerByCode(containerCode); + if (container == null) { + return AjaxResult.error("容器编码输入错误"); + } } - - - /** - * 批量新增保存库位 - */ - @RequiresPermissions("config:location:add") - @ApiOperation(value = "新增库位", notes = "批量新增库位", httpMethod = "POST") - @Log(title = "配置-库存资料-库位管理", operating = "新增库位", action = BusinessType.INSERT) - @PostMapping("/addBatchSave") - @ResponseBody - public AjaxResult addBatchSave(String prefix, String firstRow, String lastRow, String firstColumn, String lastColumn, String firstLayer, String lastLayer, - String firstGrid, String lastGrid, String roadway, String status, String zoneCode, String locationType, String high) { - - return toAjax(locationService.addBatchSave(prefix, Integer.parseInt(firstRow), Integer.parseInt(lastRow), - Integer.parseInt(firstColumn), Integer.parseInt(lastColumn), Integer.parseInt(firstLayer), Integer.parseInt(lastLayer), - Integer.parseInt(firstGrid), Integer.parseInt(lastGrid), roadway, status, zoneCode, locationType, high)); + location.setLastUpdatedBy(ShiroUtils.getName()); + return toAjax(locationService.updateById(location)); + } + + /** + * 修改保存物料 + */ + @ApiOperation(value = "批量修改库位", notes = "批量修改库位", httpMethod = "POST") + @RequiresPermissions("config:location:edit") + @Log(title = "通用-库位管理", operating = "批量修改库位", action = BusinessType.UPDATE) + @PostMapping("/editBatchSave") + @ResponseBody + public AjaxResult editBatchSave (String ids, String materialAreaCode, Integer high, String status) { + String[] idArray = Convert.toStrArray(ids); + LambdaUpdateWrapper<Location> wrapper = Wrappers.lambdaUpdate(); + wrapper.in(Location::getId, idArray) + .set(Location::getMaterialAreaCode, materialAreaCode) + .set(Location::getHigh, high) + .set(Location::getStatus, status); + return toAjax(locationService.update(wrapper)); + } + + /** + * 删除库位 + */ + @RequiresPermissions("config:location:remove") + @Log(title = "配置库存资料-库位管理", operating = "删除库位", action = BusinessType.DELETE) + @ApiOperation(value = "删除库位", notes = "批量删除库位", httpMethod = "POST") + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove (String ids) { + if(StringUtils.isEmpty(ids)) { + return AjaxResult.error("id不能为空"); } - - /** - * 修改库位 - */ - @GetMapping("/edit/{id}") - public String edit(@PathVariable("id") Integer id, ModelMap mmap) { - Location location = locationService.getById(id); - mmap.put("location", location); - return prefix + "/edit"; + for (Integer id : Convert.toIntArray(ids)) { + Location location = locationService.getById(id); + if(StringUtils.isEmpty(location.getContainerCode())) { + locationService.removeById(locationService.getById(id)); + } else { + return AjaxResult.error("库位(" + location.getCode() + ")不是空,或者有容器,不能删除成功!"); + } } - - /** - * 修改物料 - */ - @GetMapping("/editBatch/{ids}") - public String editBatch(@PathVariable("ids") String ids, ModelMap mmap) { - mmap.put("ids", ids); - return prefix + "/editBatch"; + return AjaxResult.success("删除成功!"); + } + + /** + * 查询库位列表 + */ + @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) + @PostMapping("/getLocationInfo") + @ResponseBody + public AjaxResult getLocationInfo (String type, String row, String line, String layer, String grid) { + if(StringUtils.isEmpty(type)) { + return AjaxResult.error("type不能为空"); } - /** - * 修改保存库位 - */ - @RequiresPermissions("config:location:edit") - @ApiOperation(value = "修改库位", notes = "批量修改库位", httpMethod = "POST") - @Log(title = "配置-库存资料-库位管理", operating = "修改库位", action = BusinessType.UPDATE) - @PostMapping("/edit") - @ResponseBody - public AjaxResult editSave(Location location) { - String containerCode = location.getContainerCode(); - if (StringUtils.isNotEmpty(containerCode)) { - Container container = containerService.getContainerByCode(containerCode); - if (container == null) { - return AjaxResult.error("容器编码输入错误"); - } + /* 查询库位信息*/ + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); + locationLambdaQueryWrapper.eq(StringUtils.isNotEmpty(row), Location::getIRow, row) + .eq(StringUtils.isNotEmpty(line), Location::getIColumn, line) + .eq(StringUtils.isNotEmpty(layer), Location::getILayer, layer) + .eq(Location::getIGrid, 1) // + .eq(StringUtils.isNotEmpty(type), Location::getLocationType, type) + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(StringUtils.isNotEmpty(type), Location::getZoneCode, type); + List<Location> locations = locationService.list(locationLambdaQueryWrapper); + List<Location> locationList = new ArrayList<>(); + + /* 查询库存明细*/ + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambda = Wrappers.lambdaQuery(); + inventoryDetailLambda.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambda); + + for (Location location1 : locations) { + InventoryDetail inventoryDetail = null; + String materialName = null; + for (InventoryDetail inventoryDetail2 : inventoryDetailList) { + if(location1.getCode().equals(inventoryDetail2.getLocationCode())) { + inventoryDetail = inventoryDetail2; } - location.setLastUpdatedBy(ShiroUtils.getName()); - return toAjax(locationService.updateById(location)); - } - - /** - * 修改保存物料 - */ - @ApiOperation(value = "批量修改库位", notes = "批量修改库位", httpMethod = "POST") - @RequiresPermissions("config:location:edit") - @Log(title = "通用-库位管理", operating = "批量修改库位", action = BusinessType.UPDATE) - @PostMapping("/editBatchSave") - @ResponseBody - public AjaxResult editBatchSave(String ids, String materialAreaCode, Integer high, String status) { - String[] idArray = Convert.toStrArray(ids); - LambdaUpdateWrapper<Location> wrapper = Wrappers.lambdaUpdate(); - wrapper.in(Location::getId, idArray) - .set(Location::getMaterialAreaCode, materialAreaCode) - .set(Location::getHigh, high) - .set(Location::getStatus, status); - return toAjax(locationService.update(wrapper)); - } - - /** - * 删除库位 - */ - @RequiresPermissions("config:location:remove") - @Log(title = "配置库存资料-库位管理", operating = "删除库位", action = BusinessType.DELETE) - @ApiOperation(value = "删除库位", notes = "批量删除库位", httpMethod = "POST") - @PostMapping("/remove") - @ResponseBody - public AjaxResult remove(String ids) { - if (StringUtils.isEmpty(ids)) { - return AjaxResult.error("id不能为空"); + } + List<InventoryDetail> inventoryDetails = inventoryDetailList.stream().filter(inventoryDetail1 -> + inventoryDetail1.getLocationCode().equals(location1.getCode())).collect(Collectors.toList()); + + int userDef3 = 0; + String status = location1.getStatus(); + String containerCode = location1.getContainerCode(); + List<String> materialNameList = inventoryDetails.stream().map(InventoryDetail::getMaterialName).collect(Collectors.toList()); + List<String> batchList = inventoryDetails.stream().map(InventoryDetail::getBatch).collect(Collectors.toList()); + List<String> materialCodeList = inventoryDetails.stream().map(InventoryDetail::getMaterialCode).collect(Collectors.toList()); + List<BigDecimal> qtyList = inventoryDetails.stream().map(InventoryDetail::getQty).collect(Collectors.toList()); + if(QuantityConstant.STATUS_LOCATION_EMPTY.equals(status)) { + if(StringUtils.isEmpty(containerCode)) { + userDef3 = LocationStatus.IDLE_EMPTY_LOCATION; + } else { + if(inventoryDetail == null) { + userDef3 = LocationStatus.IDLE_EMPTY_CONTAINER; + } else { + location1.setMaterialName(materialNameList); + location1.setMaterialCode(materialCodeList); + location1.setBatch(batchList); + location1.setQty(qtyList); + userDef3 = LocationStatus.IDLE_FULL_CONTAINER; + } } - for (Integer id : Convert.toIntArray(ids)) { - Location location = locationService.getById(id); - if (StringUtils.isEmpty(location.getContainerCode())) { - locationService.removeById(locationService.getById(id)); - } else { - return AjaxResult.error("库位(" + location.getCode() + ")不是空,或者有容器,不能删除成功!"); - } + } else if(QuantityConstant.STATUS_LOCATION_LOCK.equals(status)) { + if(StringUtils.isEmpty(containerCode)) { + userDef3 = LocationStatus.LOCK_EMPTY_LOCATION; + } else { + if(inventoryDetail == null) { + userDef3 = LocationStatus.LOCK_EMPTY_CONTAINER; + } else { + location1.setMaterialName(materialNameList); + location1.setMaterialCode(materialCodeList); + location1.setBatch(batchList); + location1.setQty(qtyList); + userDef3 = LocationStatus.LOCK_FULL_CONTAINER; + } } - return AjaxResult.success("删除成功!"); - } + } - /** - * 查询库位列表 - */ - @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) - @PostMapping("/getLocationInfo") - @ResponseBody - public AjaxResult getLocationInfo(String type, String row, String line, String layer, String grid) { - if (StringUtils.isEmpty(type)) { - return AjaxResult.error("type不能为空"); + if(location1.getDeleted()) { + if(StringUtils.isEmpty(containerCode)) { + userDef3 = LocationStatus.DISABLE_EMPTY_LOCATION; + } else { + if(inventoryDetail == null) { + userDef3 = LocationStatus.DISABLE_EMPTY_CONTAINER; + } else { + location1.setMaterialName(materialNameList); + location1.setMaterialCode(materialCodeList); + location1.setBatch(batchList); + location1.setQty(qtyList); + userDef3 = LocationStatus.DISABLE_FULL_CONTAINER; + } } + } - /* 查询库位信息*/ - LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); - locationLambdaQueryWrapper.eq(StringUtils.isNotEmpty(row), Location::getIRow, row) - .eq(StringUtils.isNotEmpty(line), Location::getIColumn, line) - .eq(StringUtils.isNotEmpty(layer), Location::getILayer, layer) - .eq(Location::getIGrid, 1) // - .eq(StringUtils.isNotEmpty(type), Location::getLocationType, type) - .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) - .eq(StringUtils.isNotEmpty(type), Location::getZoneCode, type); - List<Location> locations = locationService.list(locationLambdaQueryWrapper); - List<Location> locationList = new ArrayList<>(); - - /* 查询库存明细*/ - LambdaQueryWrapper<InventoryDetail> inventoryDetailLambda = Wrappers.lambdaQuery(); - inventoryDetailLambda.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); - List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambda); - - for (Location location1 : locations) { - InventoryDetail inventoryDetail = null; - String materialName = null; - for (InventoryDetail inventoryDetail2 : inventoryDetailList) { - if (location1.getCode().equals(inventoryDetail2.getLocationCode())) { - inventoryDetail = inventoryDetail2; - } - } - List<InventoryDetail> inventoryDetails = inventoryDetailList.stream().filter(inventoryDetail1 -> - inventoryDetail1.getLocationCode().equals(location1.getCode())).collect(Collectors.toList()); - - int userDef3 = 0; - String status = location1.getStatus(); - String containerCode = location1.getContainerCode(); - List<String> materialNameList = inventoryDetails.stream().map(InventoryDetail::getMaterialName).collect(Collectors.toList()); - List<String> batchList = inventoryDetails.stream().map(InventoryDetail::getBatch).collect(Collectors.toList()); - List<String> materialCodeList = inventoryDetails.stream().map(InventoryDetail::getMaterialCode).collect(Collectors.toList()); - List<BigDecimal> qtyList = inventoryDetails.stream().map(InventoryDetail::getQty).collect(Collectors.toList()); - if (QuantityConstant.STATUS_LOCATION_EMPTY.equals(status)) { - if (StringUtils.isEmpty(containerCode)) { - userDef3 = LocationStatus.IDLE_EMPTY_LOCATION; - } else { - if (inventoryDetail == null) { - userDef3 = LocationStatus.IDLE_EMPTY_CONTAINER; - } else { - location1.setMaterialName(materialNameList); - location1.setMaterialCode(materialCodeList); - location1.setBatch(batchList); - location1.setQty(qtyList); - userDef3 = LocationStatus.IDLE_FULL_CONTAINER; - } - } - } else if (QuantityConstant.STATUS_LOCATION_LOCK.equals(status)) { - if (StringUtils.isEmpty(containerCode)) { - userDef3 = LocationStatus.LOCK_EMPTY_LOCATION; - } else { - if (inventoryDetail == null) { - userDef3 = LocationStatus.LOCK_EMPTY_CONTAINER; - } else { - location1.setMaterialName(materialNameList); - location1.setMaterialCode(materialCodeList); - location1.setBatch(batchList); - location1.setQty(qtyList); - userDef3 = LocationStatus.LOCK_FULL_CONTAINER; - } - } - } - - if (location1.getDeleted()) { - if (StringUtils.isEmpty(containerCode)) { - userDef3 = LocationStatus.DISABLE_EMPTY_LOCATION; - } else { - if (inventoryDetail == null) { - userDef3 = LocationStatus.DISABLE_EMPTY_CONTAINER; - } else { - location1.setMaterialName(materialNameList); - location1.setMaterialCode(materialCodeList); - location1.setBatch(batchList); - location1.setQty(qtyList); - userDef3 = LocationStatus.DISABLE_FULL_CONTAINER; - } - } - } - - location1.setUserDef3(String.valueOf(userDef3)); - locationList.add(location1); - } - return AjaxResult.success(locations); + location1.setUserDef3(String.valueOf(userDef3)); + locationList.add(location1); } + return AjaxResult.success(locations); + } + + @Log(title = "配置-库存资料-库位条码", operating = "库位条码打印", action = BusinessType.OTHER) + // @ResponseBody // 错误1ajax是json数据而没有添加该注解返回值不为json所以不能够返回common.ajaxSetup.textStatus= "parsererror"报错 + @GetMapping("/print/{ids}") + public void print (@PathVariable("ids") Integer[] ids, ModelMap mmap) // arg1:物料id arg2:会话对象不需要直接返回 + { + print.jasperPrint(ids, prefix);// 不用返回json打印 + } - @Log(title = "配置-库存资料-库位条码", operating = "库位条码打印", action = BusinessType.OTHER) - // @ResponseBody // 错误1ajax是json数据而没有添加该注解返回值不为json所以不能够返回common.ajaxSetup.textStatus= "parsererror"报错 - @GetMapping("/print/{ids}") - public void print(@PathVariable("ids") Integer[] ids, ModelMap mmap) // arg1:物料id arg2:会话对象不需要直接返回 - { - print.jasperPrint(ids, prefix);// 不用返回json打印 + + @Log(title = "监控-库位空闲监控-库位管理", operating = "查看库位空闲结果", action = BusinessType.GRANT) + @PostMapping("/getIdleLocation") + @ResponseBody + public AjaxResult<?> getIdleLocation() { + return AjaxResult.success(locationService.getIdleLocation()); } } diff --git a/src/main/java/com/huaheng/pc/config/location/domain/bo/LocationIdleBO.java b/src/main/java/com/huaheng/pc/config/location/domain/bo/LocationIdleBO.java new file mode 100644 index 0000000..acbc7dd --- /dev/null +++ b/src/main/java/com/huaheng/pc/config/location/domain/bo/LocationIdleBO.java @@ -0,0 +1,25 @@ +package com.huaheng.pc.config.location.domain.bo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author puff + * @date 2023-06-21 + */ +@Data +@Builder +public class LocationIdleBO implements Serializable { + + @ApiModelProperty(value = "层级") + private String ilayer; + @ApiModelProperty(value = "巷道") + private String roadway; + @ApiModelProperty(value = "行数") + private Integer irow; + @ApiModelProperty(value = "空闲数") + private Integer idleCount; +} diff --git a/src/main/java/com/huaheng/pc/config/location/domain/vo/LocationIdleVO.java b/src/main/java/com/huaheng/pc/config/location/domain/vo/LocationIdleVO.java new file mode 100644 index 0000000..265a3ac --- /dev/null +++ b/src/main/java/com/huaheng/pc/config/location/domain/vo/LocationIdleVO.java @@ -0,0 +1,22 @@ +package com.huaheng.pc.config.location.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author puff + * @date 2023-06-21 + */ +@Data +public class LocationIdleVO implements Serializable { + + @ApiModelProperty(value = "巷道") + private String roadway; + @ApiModelProperty(value = "行数") + private Integer irow; + @ApiModelProperty(value = "空闲数") + private Integer idleCount; +} diff --git a/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java b/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java index c51b54b..6f0b2ab 100644 --- a/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java +++ b/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java @@ -2,6 +2,7 @@ package com.huaheng.pc.config.location.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.huaheng.pc.config.location.domain.Location; +import com.huaheng.pc.config.location.domain.bo.LocationIdleBO; import org.apache.ibatis.annotations.Param; import java.util.LinkedHashMap; @@ -33,4 +34,6 @@ public interface LocationMapper extends BaseMapper<Location> { int getLastRowOfZone(@Param("warehouseCode") String warehouseCode, @Param("locationType") String locationType); int updateStatusNew(@Param("code") String code, @Param("warehouseCode") String warehouseCode,@Param("status") String status, @Param("oldStatus") String oldStatus); + + List<LocationIdleBO> getIdleLocation(); } diff --git a/src/main/java/com/huaheng/pc/config/location/service/LocationService.java b/src/main/java/com/huaheng/pc/config/location/service/LocationService.java index 3a16daa..aec0de2 100644 --- a/src/main/java/com/huaheng/pc/config/location/service/LocationService.java +++ b/src/main/java/com/huaheng/pc/config/location/service/LocationService.java @@ -4,6 +4,7 @@ import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.location.domain.Location; import com.baomidou.mybatisplus.extension.service.IService; import com.huaheng.pc.config.location.domain.LocationInfo; +import com.huaheng.pc.config.location.domain.vo.LocationIdleVO; import java.util.LinkedHashMap; import java.util.List; @@ -118,4 +119,11 @@ public interface LocationService extends IService<Location>{ void upstatus(String code); int updateStatusNew(String locationCode, String warehouseCode, String status, String oldStatus); + + /** + * 查询空闲库位数量 + * @return + */ + List<LocationIdleVO> getIdleLocation(); + } diff --git a/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java b/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java index d136764..c42f641 100644 --- a/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java +++ b/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java @@ -12,17 +12,21 @@ import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.location.domain.Location; import com.huaheng.pc.config.location.domain.LocationInfo; +import com.huaheng.pc.config.location.domain.bo.LocationIdleBO; +import com.huaheng.pc.config.location.domain.vo.LocationIdleVO; import com.huaheng.pc.config.location.mapper.LocationMapper; import com.huaheng.pc.config.locationType.domain.LocationType; import com.huaheng.pc.config.locationType.service.LocationTypeService; import com.huaheng.pc.config.zone.domain.Zone; import com.huaheng.pc.config.zone.service.ZoneService; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import io.swagger.models.auth.In; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.MessageFormat; import java.util.*; +import java.util.stream.Collectors; @Service("LocationService") public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> implements LocationService { @@ -361,7 +365,7 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i } @Override - public void updateContainerCodeAndStatus(String locationCode, String containerCode, + public void updateContainerCodeAndStatus(String locationCode, String containerCode, String status, String warehouseCode) { if (StringUtils.isNotEmpty(locationCode) || StringUtils.isNotEmpty(containerCode)) { LambdaUpdateWrapper<Location> updateWrapper = Wrappers.lambdaUpdate(); @@ -371,7 +375,10 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i .eq(Location::getCode, locationCode); this.update(updateWrapper); } - } public LocationInfo getAllLocation(String type) { + } + + @Override + public LocationInfo getAllLocation(String type) { if (StringUtils.isNotEmpty(type)) { Location location = locationMapper.getAllLocation(ShiroUtils.getWarehouseCode(), type); LocationInfo locationInfo = new LocationInfo(); @@ -667,4 +674,26 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i } return 0; } + + @Override + public List<LocationIdleVO> getIdleLocation() { + List<LocationIdleBO> idleBOList = locationMapper.getIdleLocation(); + return idleBOList.stream() + .collect(Collectors.groupingBy(LocationIdleBO::getRoadway)) // 以巷道分组 + .entrySet().stream() + .flatMap(entry -> entry.getValue().stream() + .collect(Collectors.groupingBy(LocationIdleBO::getIrow)) // 获取当前巷道分组下的行级别数据 + .entrySet().stream() + .map(rowEntry -> { + Integer idleCount = rowEntry.getValue().stream() + .mapToInt(LocationIdleBO::getIdleCount) + .sum(); // 计算空闲库位数量 + LocationIdleVO idleInfo = new LocationIdleVO(); + idleInfo.setRoadway(entry.getKey()); + idleInfo.setIrow(rowEntry.getKey()); + idleInfo.setIdleCount(idleCount); + return idleInfo; + })) + .collect(Collectors.toList()); + } } diff --git a/src/main/resources/mybatis/config/LocationMapper.xml b/src/main/resources/mybatis/config/LocationMapper.xml index d43c89b..31b5bf4 100644 --- a/src/main/resources/mybatis/config/LocationMapper.xml +++ b/src/main/resources/mybatis/config/LocationMapper.xml @@ -32,6 +32,14 @@ <result column="systemCreated" jdbcType="INTEGER" property="systemCreated" /> <result column="deleted" jdbcType="BIT" property="deleted" /> </resultMap> + + <resultMap id="BaseResultLocationIdleBOMap" type="com.huaheng.pc.config.location.domain.bo.LocationIdleBO"> + <result column="ilayer" jdbcType="VARCHAR" property="ilayer" /> + <result column="roadway" jdbcType="VARCHAR" property="roadway" /> + <result column="irow" jdbcType="INTEGER" property="irow" /> + <result column="count" jdbcType="INTEGER" property="idleCount" /> + </resultMap> + <sql id="Base_Column_List"> <!--@mbg.generated--> id, code, warehouseCode, zoneCode, locationType, containerCode, iRow, iColumn, iLayer, @@ -47,6 +55,20 @@ select code from location where #{locatingRule} </select> + <select id="getIdleLocation" resultMap="BaseResultLocationIdleBOMap"> + select ilayer ,roadway, irow, COUNT(*) AS idleCount + FROM location + WHERE area = '1' -- 区域 + AND warehouseCode = 'CS0001' -- 仓库 + AND roadway IN ('1', '2', '3', '4') -- 巷道 + AND status = 'empty' -- 状态:锁定、禁用,空闲 + AND high IN (0, 1) -- 0 是低库位,1 是高库位 + AND locationType IN ('L') -- 货位类型 + AND containerCode = '' -- 容器编码 + GROUP BY ilayer, irow + ORDER BY ilayer, irow; + </select> + <insert id="addList" parameterType="com.huaheng.pc.config.location.domain.Location" keyProperty="id" useGeneratedKeys="true" > INSERT INTO location( code,