开发出库分配,取消分配

main
bbl\baobl 2024-03-12 16:06:37 +08:00
parent 12803c1095
commit 75b38e7a54
3 changed files with 66 additions and 92 deletions

View File

@ -137,24 +137,10 @@ public class PickDetailController {
@PostMapping("/cancelAllocate")
@Log("取消分配")
@ApiOperation("取消分配")
@AnonymousAccess
public synchronized ResponseEntity<Object> cancelAllocate(@RequestBody Long[] ids) throws Exception {
List<Long> pickDetailIds = Arrays.asList(ids);
if (pickDetailIds.size() > 0) {
try {
for (Long id : pickDetailIds) {
PickDetailDto pickDetailDto = pickDetailService.findById(id);
pickDetailService.cancelAllocate(id, pickDetailDto.getAllocatedQty());
}
} catch (Exception e) {
return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), e.getMessage(), ""), HttpStatus.BAD_REQUEST);
}
} else {
return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), "参数错误或者为null", ""), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.OK);
ApiResult apiResult = pickDetailService.cancelAllocate(ids);
return new ResponseEntity<>(apiResult, HttpStatus.valueOf(apiResult.getStatus()));
}
@PostMapping("/queryTaskApp")

View File

@ -16,10 +16,8 @@
package com.youchain.businessdata.service;
import com.alibaba.fastjson.JSONObject;
import com.youchain.basicdata.domain.Box;
import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.service.dto.BoxDto;
import com.youchain.businessdata.domain.PickDetail;
import com.youchain.businessdata.service.dto.PickDetailDto;
import com.youchain.businessdata.service.dto.PickDetailQueryCriteria;
@ -105,7 +103,8 @@ public interface PickDetailService {
/**
*
*/
void cancelAllocate(long id,double quantity) throws Exception;
void cancelAllocate(long id,double quantity) ;
ApiResult cancelAllocate(Long[] ids);
/**
*

View File

@ -18,10 +18,7 @@ package com.youchain.businessdata.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.youchain.basicdata.domain.*;
import com.youchain.basicdata.repository.BillTypeRepository;
import com.youchain.basicdata.repository.BoxRepository;
import com.youchain.basicdata.repository.ItemRepository;
import com.youchain.basicdata.repository.StockRepository;
import com.youchain.basicdata.repository.*;
import com.youchain.basicdata.service.ItemService;
import com.youchain.basicdata.service.PointService;
import com.youchain.basicdata.service.dto.ItemDto;
@ -35,8 +32,6 @@ import com.youchain.businessdata.service.PickDetailService;
import com.youchain.businessdata.service.dto.PickDetailDto;
import com.youchain.businessdata.service.dto.PickDetailQueryCriteria;
import com.youchain.businessdata.service.mapstruct.PickDetailMapper;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page;
@ -50,8 +45,6 @@ import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
/**
* @author huojin
* @website https://eladmin.vip
@ -64,6 +57,7 @@ import static org.springframework.http.HttpStatus.BAD_REQUEST;
public class PickDetailServiceImpl implements PickDetailService {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
private final PickDetailRepository pickDetailRepository;
private final PointRepository pointRepository;
private final PickRepository pickRepository;
private final PickDetailMapper pickDetailMapper;
private final BillTypeRepository billTypeRepository;
@ -146,72 +140,58 @@ public class PickDetailServiceImpl implements PickDetailService {
for (int i = 0; i < ids.length; i++) {
Long id=ids[i];
PickDetail pickDetail=pickDetailRepository.getById(id);
if (pickDetail.getPropC4().equals(BizStatus.AGV_PT)){
//AGV出库
}
Double quantity=pickDetail.getOrderQty();
PickDetail pd = pickDetailRepository.getById(id);//Dto转实体
Item item = pd.getItem();
Item item = pickDetail.getItem();
Dept dept = item.getDept();//仓库
Box box = boxRepository.getBoxByItem(item.getId());
Point endPoint = box.getPoint();//目标点位
if (pd.getOrderQty() > pd.getAllocatedQty()) {
List<Inventory> Inventorys = inventoryRepository.queryInventory(item.getId());
if (Inventorys.size() > 0) {
double allocateQty = 0;
double unQty = quantity;//未分配数量
for (Inventory inv : Inventorys) {
Stock stock = inv.getStock();//容器
Point startPoint = inv.getPoint();//起始点位
if (unQty == 0) {
break;
Double quantity=pickDetail.getOrderQty()-pickDetail.getAllocatedQty();//未分配数量
Point endPoint;//目标点位
if (pickDetail.getPropC4().equals(BizStatus.AGV_PT)){
/**AGV出库分配*/
//获取目标点位
endPoint = pointRepository.findByCode(pickDetail.getPropC5());
if (pickDetail.getOrderQty() > pickDetail.getAllocatedQty()) {
List<Inventory> inventoryList = inventoryRepository.queryInventory(item.getId());
if (inventoryList.size() > 0) {
double allocateQty = 0;//分配数量
double unQty = quantity;//订单数量
for (Inventory inv : inventoryList) {
Point startPoint = inv.getPoint();//原库位
if (unQty == 0) {
break;
}
//整托分配
allocateQty = inv.getQuantity();
if (unQty < allocateQty) {
return ApiResult.fail(201,"剩余订单数量不足一托","");
}
//更新库存
inv.setQueuedQty(allocateQty);
inventoryRepository.save(inv);
unQty = unQty-allocateQty;
//更新出库单
pickDetail.setAllocatedQty(pickDetail.getAllocatedQty() + allocateQty);
pickDetail.setStatus(BizStatus.ALLOCATE);
pickDetailRepository.save(pickDetail);
//生成Task任务
Task task = new Task();
task.setItemKey(inv.getItemKey());
task.setPickDetail(pickDetail);
task.setBillCode(pickDetail.getPick().getRelatedBill1());
task.setSrcPoint(startPoint);
task.setDstPoint(endPoint);
task.setTaskType(BizStatus.PICK);
task.setTaskStatus(BizStatus.ALLOCATE);
task.setBeSkip(1);//是否AGV出库
task.setPlanQty(allocateQty);
task.setDept(dept);
task.setInventory(inv);
taskRepository.save(task);
}
allocateQty = inv.getQuantity() - inv.getQueuedQty();//库存可用数量
if (allocateQty <= 0) {
continue;
}
if (unQty < allocateQty) {
allocateQty = unQty;
}
inv.setQueuedQty(inv.getQueuedQty() + allocateQty);
inventoryRepository.save(inv);
unQty -= allocateQty;
pd.setAllocatedQty(pd.getAllocatedQty() + allocateQty);
if (pd.getOrderQty().equals(pd.getAllocatedQty())) {
pd.setStatus(BizStatus.ALLOCATE);
}
pickDetailRepository.save(pd);
//生成搬运任务
AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "01");
agvTaskRepository.save(agvTask);
//生成Task
Task task = new Task();
task.setItem(item);
task.setItemKey(inv.getItemKey());
task.setPickDetail(pd);
task.setBillCode(pd.getPo());
task.setSrcStock(inv.getStock());
task.setDstStock(inv.getStock());
task.setSrcPoint(startPoint);
task.setDstPoint(endPoint);
task.setSrcStockCode(inv.getStock().getCode());
task.setSrcPointCode(startPoint.getCode());
task.setDstPointCode(endPoint.getCode());
task.setInvStatus(inv.getStatus());
task.setTaskStatus(BizStatus.OPEN);
task.setPlanQty(allocateQty);
task.setDept(dept);
task.setAgvTask(agvTask);
taskRepository.save(task);
}else {
return ApiResult.fail(500, item.getCode()+"料号,无库存", "");
}
}else {
return ApiResult.fail(500, "已分配", "");
}
} else {
throw new RuntimeException("已分配,请勿重复操作!");
}
}
return ApiResult.fail(200,"操作成功",null);
@ -352,7 +332,7 @@ public class PickDetailServiceImpl implements PickDetailService {
@Override
@Transactional(rollbackFor = Exception.class)
public synchronized void cancelAllocate(long id, double quantity) throws Exception {
public void cancelAllocate(long id, double quantity){
PickDetailDto pickDetailDto = findById(id);
PickDetail pd = toEntity(pickDetailDto);
@ -360,13 +340,13 @@ public class PickDetailServiceImpl implements PickDetailService {
for (Task task : Tasks) {
//根据Taskz找到对应的库存
Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get();
inv.setQueuedQty(inv.getQueuedQty() - pd.getAllocatedQty());
inv.setQueuedQty(inv.getQueuedQty() - task.getPlanQty());
inventoryRepository.save(inv);
//删除Task
taskRepository.delete(task);
pd.setAllocatedQty(pd.getAllocatedQty() - quantity);
pd.setAllocatedQty(pd.getAllocatedQty() - task.getPlanQty());
if (pd.getAllocatedQty() == 0) {
pd.setStatus(BizStatus.OPEN);
}
@ -376,6 +356,15 @@ public class PickDetailServiceImpl implements PickDetailService {
}
@Override
public ApiResult cancelAllocate(Long[] ids) {
for (int i = 0; i < ids.length; i++) {
PickDetail pickDetail=pickDetailRepository.getById(ids[i]);
cancelAllocate(pickDetail.getId(), pickDetail.getOrderQty());
}
return ApiResult.fail(200, "操作成功", "");
}
@Override
public long count() {
return pickDetailRepository.count();