package com.huaheng.pc.task.taskHeader.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.service.LocationService; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail; import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService; import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader; import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; import org.springframework.transaction.annotation.Transactional; @Service public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHeader> implements TaskHeaderService{ @Autowired private ShipmentContainerHeaderService shipmentContainerHeaderService; @Autowired private ShipmentContainerDetailService shipmentContainerDetailService; @Autowired private LocationService locationService; @Autowired private InventoryDetailService inventoryDetailService; @Autowired private TaskDetailService taskDetailService; /** * 生成出库任务 * @param shipmentTaskCreateModel * @return */ @Override @Transactional public AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel) { Integer shipmentContainerHeaderId = shipmentTaskCreateModel.getShipmentContainerHeaderIds(); //获取表头 ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeaderId); if(shipmentContainerHeader == null){ return AjaxResult.error("出库货箱" + shipmentContainerHeaderId + "未找到,操作中止"); } if(shipmentContainerHeader.getStatus() > 9){ return AjaxResult.error("出库货箱" + shipmentContainerHeader.getContainerCode() + "已经生成任务,请不要重复生成,操作中止"); } //获取所有子货箱 LambdaQueryWrapper<ShipmentContainerDetail> lambdaQueryWrapper= Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(ShipmentContainerDetail::getShippingContainerId,shipmentContainerHeader.getId()); List<ShipmentContainerDetail> shipmentContainerDetails = shipmentContainerDetailService.list(lambdaQueryWrapper); if(shipmentContainerDetails==null||shipmentContainerDetails.size()==0){ return AjaxResult.error("货箱" + shipmentContainerHeader.getContainerCode() + "没有子任务,操作中止"); } //检测库位 LambdaQueryWrapper<Location> locationLambdaQueryWrapper=Wrappers.lambdaQuery(); locationLambdaQueryWrapper.eq(Location::getCode,shipmentContainerHeader.getLocationCode()) .eq(Location::getWarehouseCode,ShiroUtils.getWarehouseCode()) .eq(Location::getDeleted,false); Location location = locationService.getOne(locationLambdaQueryWrapper); if (location == null) { return AjaxResult.error("库位禁用或不存在!"); } //创建任务头 TaskHeader task = new TaskHeader(); //分拣出库 task.setTaskType(400); task.setLocationCode(shipmentContainerHeader.getLocationCode()); //判断是否整出任务,钱柜和AGV不能整出 if(shipmentContainerHeader.getStatus().intValue() == 300){ //表示整出优先 //判断当前子货箱所有数量是否等于该托盘对应的所有库存的数量, //这里必须与库存的在库数量对比,后期可能存在一个配盘在执行任务,后一个配盘又在配这个的情况(这个时候不能整出) // 如果相等,则说明这个货箱包含了所有的数量,则可以整出,否则,创建拣选任务; //查询所有库存 InventoryDetail inventoryCondition = new InventoryDetail(); LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper=Wrappers.lambdaQuery(); inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode,shipmentContainerHeader.getLocationCode()) .eq(InventoryDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()); List<InventoryDetail> inventories = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); BigDecimal inventoryTotal=new BigDecimal("0"); for(InventoryDetail item : inventories){ inventoryTotal = inventoryTotal.add(item.getQty()); } BigDecimal containerTotal = new BigDecimal("0"); for(ShipmentContainerDetail item: shipmentContainerDetails){ containerTotal = containerTotal.add(item.getQty()); } if(inventoryTotal.compareTo(containerTotal) == 0){ task.setTaskType(300);//整盘出库 task.setLocationCode(""); } } task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); task.setCompanyCode(shipmentContainerHeader.getCompanyCode()); task.setInternalTaskType(""); task.setAssignedUser(ShiroUtils.getLoginName()); task.setConfirmedBy(ShiroUtils.getLoginName()); task.setStatus(1); task.setContainerCode(shipmentContainerHeader.getContainerCode()); task.setCreatedBy(ShiroUtils.getLoginName()); task.setCreated(new Date()); task.setLastUpdatedBy(ShiroUtils.getLoginName()); task.setLastUpdated(null); this.save(task); //遍历子货箱创建子任务 for(ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetails){ TaskDetail taskDetail = new TaskDetail(); taskDetail.setTaskId(task.getId()); taskDetail.setWarehouseCode(task.getWarehouseCode()); taskDetail.setCompanyCode(task.getCompanyCode()); taskDetail.setTaskType("s"); taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode()); taskDetail.setBillId(shipmentContainerDetail.getShipmentId()); taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId()); taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode()); taskDetail.setMaterialName(shipmentContainerDetail.getMaterialName()); taskDetail.setMaterialSpec(shipmentContainerDetail.getMaterialSpec()); taskDetail.setMaterialUnit(shipmentContainerDetail.getMaterialUnit()); taskDetail.setFromInventoryId(shipmentContainerDetail.getInventoryId()); taskDetail.setQty(shipmentContainerDetail.getQty()); taskDetail.setContainerCode(task.getContainerCode()); taskDetail.setFromLocation(task.getLocationCode()); taskDetail.setToLocation(task.getLocationCode()); taskDetail.setStatus(1); taskDetail.setTaskType("s"); taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); taskDetail.setLastUpdated(null); taskDetailService.save(taskDetail); } //更新货位状态 ShipmentContainerHeader record = new ShipmentContainerHeader(); record.setId(shipmentContainerHeaderId); record.setStatus(10); record.setStatus(task.getTaskType());//实际出库类型 shipmentContainerHeaderService.saveOrUpdate(record); return AjaxResult.success(task.getId()); } }