package com.huaheng.api.wcs.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huaheng.api.wcs.domain.ManyEmptyDomain; import com.huaheng.api.wcs.service.warecellAllocation.LocationAllocationService; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.framework.aspectj.lang.annotation.Log; import com.huaheng.framework.aspectj.lang.constant.BusinessType; import com.huaheng.framework.web.controller.BaseController; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.framework.web.service.ConfigService; import com.huaheng.pc.config.container.domain.Container; import com.huaheng.pc.config.container.service.ContainerService; import com.huaheng.pc.config.locationHigh.domain.LocationHigh; import com.huaheng.pc.config.locationHigh.service.LocationHighService; 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.inventory.inventoryHeader.domain.InventoryHeader; import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; import com.huaheng.pc.task.taskHeader.service.WorkTaskService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @RestController @RequestMapping("/API/WMS/v2") public class EmptyContainerController extends BaseController { @Resource private WorkTaskService workTaskService; @Resource private LocationAllocationService allocationService; @Resource private ConfigService configService; @Resource private ZoneService zoneService; @Resource private LocationTypeService locationTypeService; @Resource private LocationHighService locationHighService; @Resource private ContainerService containerService; /** * 生成空托盘入库任务 * @return */ @PostMapping("/manyEmptyIn") @Log(title = "任务-任务管理", operating = "生成空托盘组入库任务", action = BusinessType.INSERT) @ResponseBody @Transactional public AjaxResult manyEmptyIn(@RequestBody ManyEmptyDomain manyEmptyDomain) { if(manyEmptyDomain == null){ throw new ServiceException("空托盘组参数不对!"); } String containerCode = manyEmptyDomain.getContainerCode(); String warehouseCode = manyEmptyDomain.getWareohuseCode(); String area = manyEmptyDomain.getArea(); String roadWay = manyEmptyDomain.getRoadWay(); String[] idArray = Convert.toStrArray(roadWay); List<String> roadWays = Arrays.asList(idArray); String value = configService.getKey(QuantityConstant.RULE_ALLOCATION); String height = manyEmptyDomain.getHeight(); if (StringUtils.isEmpty(value)) { return AjaxResult.error("未绑定定位规则"); } int allocationRule = Integer.parseInt(value); LambdaQueryWrapper<Zone> zoneLambdaQueryWrapper = Wrappers.lambdaQuery(); zoneLambdaQueryWrapper.eq(Zone::getArea, area); Zone zone = zoneService.getOne(zoneLambdaQueryWrapper); if(zone == null) { return AjaxResult.error("分配库位时,没有找到库区"); } //查询满足条件的库位类型 LambdaQueryWrapper<LocationType> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(LocationType::getZoneCode, zone.getCode()) .eq(LocationType::getWarehouseCode, warehouseCode); List<LocationType> locationTypeList = locationTypeService.list(lambdaQueryWrapper); if(locationTypeList == null) { return AjaxResult.error("分配库位时,没有找到库位类型"); } List<String> locationTypeCodeList = locationTypeList.stream(). map(t -> t.getCode()).collect(Collectors.toList()); LambdaQueryWrapper<LocationHigh> locationHighLambdaQueryWrapper = Wrappers.lambdaQuery(); locationHighLambdaQueryWrapper.eq(LocationHigh::getHighLevel, Integer.parseInt(height)) .in(LocationHigh::getLocationTypeCode, locationTypeCodeList); LocationHigh locationHigh = locationHighService.getOne(locationHighLambdaQueryWrapper); int high = locationHigh.getHigh(); String locationCode = allocationService.allocation(allocationRule, locationTypeCodeList, high, area, roadWays, warehouseCode, containerCode, null); if(locationCode == null) { return AjaxResult.error("分配库位时,没有找到库位"); } return workTaskService.createManyEmptyIn(containerCode, locationCode, warehouseCode); } /** * 生成空托盘入库任务 * @return */ @PostMapping("/manyEmptyOut") @Log(title = "任务-任务管理", operating = "生成空托盘组出库任务", action = BusinessType.INSERT) @ResponseBody @Transactional public AjaxResult manyEmptyOut(@RequestBody ManyEmptyDomain manyEmptyDomain) { if(manyEmptyDomain == null){ throw new ServiceException("空托盘组参数不对!"); } String containerCode = manyEmptyDomain.getContainerCode(); if(StringUtils.isEmpty(containerCode)){ throw new ServiceException("托盘号为空“"); } Container container = containerService.getContainerByCode(containerCode); if(container == null){ throw new ServiceException("没有找到托盘“"); } return workTaskService.createManyEmptyOut(containerCode, "P1024"); } }