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