no message
parent
ccb171e86c
commit
634de44a0b
|
|
@ -0,0 +1,75 @@
|
|||
package com.youchain.test;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.youchain.annotation.AnonymousAccess;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import static org.springframework.http.HttpStatus.OK;
|
||||
|
||||
@RestController
|
||||
public class TestController {
|
||||
JSONObject jsonObject;
|
||||
JSONArray jsonArray;
|
||||
@PostMapping("/interfaces/api/amr/submitMission")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> submitMission(@RequestBody JSON resources){
|
||||
System.out.println("AGV接受报文:"+resources);
|
||||
jsonObject=new JSONObject();
|
||||
jsonArray=new JSONArray();
|
||||
jsonObject.put("code","0");
|
||||
jsonObject.put("message","");
|
||||
jsonObject.put("data","");
|
||||
jsonObject.put("success","false");
|
||||
return new ResponseEntity<>(jsonObject, OK);
|
||||
}
|
||||
@PostMapping ("/queryPoint")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> queryPoint(@RequestBody JSONObject json){
|
||||
System.out.println("光电点位状态查询 仿真测试:"+json);
|
||||
jsonObject=new JSONObject();
|
||||
jsonArray=new JSONArray();
|
||||
jsonObject.put("status","200");
|
||||
jsonObject.put("message","");
|
||||
String pointType=json.getString("pointType");
|
||||
JSONObject jsonObject1=new JSONObject();
|
||||
if (pointType.equals("1")){
|
||||
jsonObject1.put("pointCode",json.get("pointCode"));
|
||||
jsonObject1.put("pointStatus","0");
|
||||
}else if (pointType.equals("2")){
|
||||
jsonObject1.put("pointCode",json.get("pointCode"));
|
||||
jsonObject1.put("pointStatus","1");
|
||||
}else if (pointType.equals("3")){
|
||||
jsonObject1.put("pointCode",json.get("pointCode"));
|
||||
jsonObject1.put("pointStatus","0");
|
||||
}
|
||||
|
||||
jsonArray.add(jsonObject1);
|
||||
jsonObject.put("data",jsonArray);
|
||||
return new ResponseEntity<>(jsonObject, OK);
|
||||
}
|
||||
|
||||
@PostMapping ("/lineApply")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> lineApply(@RequestBody JSONObject json){
|
||||
System.out.println("输送线安全交互 仿真测试:"+json);
|
||||
jsonObject=new JSONObject();
|
||||
jsonArray=new JSONArray();
|
||||
jsonObject.put("status","200");
|
||||
jsonObject.put("message","");
|
||||
JSONObject jsonObject1=new JSONObject();
|
||||
jsonObject1.put("pointCode",json.get("lineCode"));
|
||||
jsonObject1.put("pointStatus","1");
|
||||
if (json.getString("type").equals("2")){
|
||||
jsonObject1.put("pointStatus","0");
|
||||
}
|
||||
jsonObject1.put("stockCode","AAA11");
|
||||
jsonArray.add(jsonObject1);
|
||||
jsonObject.put("data",jsonArray);
|
||||
return new ResponseEntity<>(jsonObject, OK);
|
||||
}
|
||||
}
|
||||
|
|
@ -132,58 +132,6 @@ public class SmallAppController {
|
|||
return new ResponseEntity<>(ApiResult.success(OK.value(), "绑定成功!", ""), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/unBindStock")
|
||||
@Log("料箱解绑-小件")
|
||||
@ApiOperation("料箱解绑-小件")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> unBindStock(@RequestBody Mo mo) {
|
||||
String stockCode = mo.getStockCode();//料箱号
|
||||
|
||||
Stock stock = stockService.findByCode(stockCode, null);
|
||||
if (stock == null) {
|
||||
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), stockCode + "容器不存在!", ""), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
//根据容器找到对应AGV任务
|
||||
AgvTask agvTask = agvTaskService.findByStockCode(stockCode, BizStatus.ASN, "PICKER_MOVE");
|
||||
if (agvTask != null) {
|
||||
List<Task> taskList = taskService.getAgvTaskList(agvTask.getId());
|
||||
for (Task task : taskList) {
|
||||
AsnDetail asnDetail = task.getAsnDetail();
|
||||
Long[] asnDetailIds = new Long[1];
|
||||
asnDetailIds[0] = asnDetail.getId();
|
||||
asnDetailService.deleteAll(asnDetailIds);
|
||||
Long[] taskIds = new Long[1];
|
||||
taskIds[0] = task.getId();
|
||||
taskService.deleteAll(taskIds);
|
||||
}
|
||||
Integer[] agvTaskIds = new Integer[1];
|
||||
agvTaskIds[0] = agvTask.getId();
|
||||
agvTaskService.deleteAll(agvTaskIds);
|
||||
}
|
||||
List<Inventory> inventoryList = inventoryService.queryInventory(stock);
|
||||
for (Inventory inventory : inventoryList) {
|
||||
inventory.setQuantity(0d);
|
||||
inventory.setQueuedQty(0d);
|
||||
inventoryService.update(inventory);
|
||||
if (inventory.getQuantity() <= 0) {
|
||||
Long[] ids = new Long[1];
|
||||
ids[0] = inventory.getId();
|
||||
inventoryService.deleteAll(ids);
|
||||
}
|
||||
}
|
||||
Point point = stock.getPoint();
|
||||
if (point != null) {
|
||||
point.setStatus(BaseStatus.FREE);
|
||||
pointService.update(point);
|
||||
}
|
||||
stock.setPoint(null);
|
||||
stock.setStatus(BaseStatus.FREE);
|
||||
stock.setLineSlotCode(null);
|
||||
stockService.update(stock);
|
||||
|
||||
return new ResponseEntity<>(ApiResult.success(OK.value(), "解绑成功!", ""), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/callStock")
|
||||
@Log("满料出库-小件")
|
||||
|
|
@ -269,86 +217,4 @@ public class SmallAppController {
|
|||
return new ResponseEntity<>(ApiResult.success(OK.value(), "呼叫成功!", ""), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/scanStock")
|
||||
@Log("输送线扫码-小件")
|
||||
@ApiOperation("输送线扫码-小件")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> scanStock(@RequestBody LineScanStock lineScanStock) {
|
||||
String stockCode = lineScanStock.getStockCode();//料箱号
|
||||
String taskCode = lineScanStock.getTaskCode();//输送线ID
|
||||
Stock stock = stockService.findByCode(stockCode, null);
|
||||
if (stock == null) {
|
||||
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), stockCode + "容器不存在!", ""), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
//9;入库输送线
|
||||
if (taskCode.equals("9")) {
|
||||
Point endPoint = pointService.getPointByFree("小件缓存区", null);
|
||||
if (endPoint == null) {
|
||||
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), " 小件缓存区没有空闲点位!", ""), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
//根据料箱查询料箱入库任务状态为待执行、执行中
|
||||
List<AgvTask> agvTaskList = agvTaskService.queryByAgvTask(stockCode, BizStatus.ASN,"PICKER_MOVE");
|
||||
if (agvTaskList.size() <= 0) {
|
||||
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), stockCode + "料箱识别失败,无任务!", ""), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
AgvTask agvTask = agvTaskList.get(0);
|
||||
if (agvTask.getBeScan() == 1) {
|
||||
return new ResponseEntity<>(ApiResult.success(OK.value(), stockCode + "料箱已扫描,请放入输送线!", ""), HttpStatus.OK);
|
||||
}else if(agvTask.getBeScan() == 0){
|
||||
endPoint.setStatus(BaseStatus.USED);
|
||||
pointService.update(endPoint);
|
||||
stock.setPoint(endPoint);
|
||||
stockService.update(stock);
|
||||
List<Task> taskList = taskService.getAgvTaskList(agvTask.getId());
|
||||
for (Task task : taskList) {
|
||||
task.setDstPointCode(endPoint.getCode());
|
||||
task.setDstPoint(endPoint);
|
||||
taskService.update(task);
|
||||
}
|
||||
agvTask.setBeScan(1);
|
||||
agvTask.setJobId(taskCode);
|
||||
agvTask.setEndSlotCode(endPoint.getCode());
|
||||
agvTask.setUpdateTime(new Timestamp(new Date().getTime()));
|
||||
agvTaskService.update(agvTask);
|
||||
}
|
||||
|
||||
} else if (taskCode.equals("6")) {
|
||||
//6;出库缓存输送线
|
||||
String lineSlotCode = stock.getLineSlotCode();//输送线线边点位
|
||||
if (lineSlotCode == null || lineSlotCode.length() <= 0) {
|
||||
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), stockCode + "料箱识别失败,无任务!", ""), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
Point endPoint = pointService.findByCode(lineSlotCode, null, null, null, null);
|
||||
if (endPoint == null) {
|
||||
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), lineSlotCode + "小件线边输送线点位不存在!", ""), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
//滚筒出库满箱任务的起点
|
||||
Point startPoint = pointService.getPoint("", BaseStatus.FREE, BaseStatus.BOX, "出库缓存滚筒输送线满箱接驳口");
|
||||
if (startPoint == null) {
|
||||
throw new RuntimeException("出库缓存滚筒输送线满箱接驳口点位没有维护!");
|
||||
}
|
||||
//生成滚筒AGV任务
|
||||
AgvTask agvTask = agvTaskService.findBycontainerCode(stockCode);
|
||||
if (agvTask == null) {
|
||||
AgvTask newAgvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "ROLLER_MOVE");
|
||||
newAgvTask.setBeScan(1);
|
||||
newAgvTask.setJobId(taskCode);
|
||||
newAgvTask.setUpdateTime(new Timestamp(new Date().getTime()));
|
||||
agvTaskService.create(newAgvTask);
|
||||
} else {
|
||||
agvTask.setBeScan(1);
|
||||
agvTask.setJobId(taskCode);
|
||||
agvTask.setUpdateTime(new Timestamp(new Date().getTime()));
|
||||
agvTaskService.update(agvTask);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(ApiResult.success(OK.value(), "扫描成功!", taskCode), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,9 +47,8 @@ public class AgvTask extends BaseEntity implements Serializable {
|
|||
@ApiModelProperty(value = "容器号")
|
||||
private String stockCode;
|
||||
|
||||
@Column(name = "`stock_type_code`",nullable = false)
|
||||
@NotBlank
|
||||
@ApiModelProperty(value = "")
|
||||
@Column(name = "`stock_type_code`")
|
||||
@ApiModelProperty(value = "容器类型")
|
||||
private String stockTypeCode;
|
||||
|
||||
@Column(name = "`start_slot_code`",nullable = false)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import javax.persistence.Table;
|
|||
import org.hibernate.annotations.*;
|
||||
import java.sql.Timestamp;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @website https://eladmin.vip
|
||||
|
|
@ -54,14 +55,12 @@ public class Inventory extends BaseEntity implements Serializable {
|
|||
private String billCode;
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "`item_key_id`",nullable = false)
|
||||
@NotNull
|
||||
@JoinColumn(name = "`item_key_id`")
|
||||
@ApiModelProperty(value = "物料属性")
|
||||
private ItemKey itemKey;
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "`point_id`",nullable = false)
|
||||
@NotNull
|
||||
@JoinColumn(name = "`point_id`")
|
||||
@ApiModelProperty(value = "点位")
|
||||
private Point point;
|
||||
|
||||
|
|
@ -71,8 +70,7 @@ public class Inventory extends BaseEntity implements Serializable {
|
|||
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "`stock_id`",nullable = false)
|
||||
@NotNull
|
||||
@JoinColumn(name = "`stock_id`")
|
||||
@ApiModelProperty(value = "容器")
|
||||
private Stock stock;
|
||||
|
||||
|
|
@ -82,8 +80,7 @@ public class Inventory extends BaseEntity implements Serializable {
|
|||
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "`big_stock_id`",nullable = true)
|
||||
@NotNull
|
||||
@JoinColumn(name = "`big_stock_id`")
|
||||
@ApiModelProperty(value = "大容器")
|
||||
private Stock bigStock;
|
||||
|
||||
|
|
@ -129,7 +126,8 @@ public class Inventory extends BaseEntity implements Serializable {
|
|||
@NotNull
|
||||
@ApiModelProperty(value = "仓库")
|
||||
private Dept dept;
|
||||
|
||||
@OneToMany
|
||||
private List<Task> tasks;
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public class InventoryLog extends BaseEntity implements Serializable {
|
|||
private String status;
|
||||
|
||||
@Column(name = "`ref_obj`")
|
||||
@ApiModelProperty(value = "引用对象")
|
||||
@ApiModelProperty(value = "流水号")
|
||||
private String refObj;
|
||||
|
||||
@Column(name = "`ref_obj_id`")
|
||||
|
|
|
|||
|
|
@ -90,8 +90,13 @@ public class ItemKey extends BaseEntity implements Serializable {
|
|||
@ApiModelProperty(value = "工单号")
|
||||
private String orderNumber;
|
||||
|
||||
public int getIntPropC5() {
|
||||
int decimalNumber = Integer.parseInt(propC5, 16);
|
||||
return decimalNumber;
|
||||
}
|
||||
|
||||
public void copy(ItemKey source){
|
||||
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -146,11 +146,10 @@ public class Task extends BaseEntity implements Serializable {
|
|||
@Column(name = "`put_code`")
|
||||
@ApiModelProperty(value = "流水号")
|
||||
private String putCode;
|
||||
|
||||
@Column(name = "`inv_id`")
|
||||
@JoinColumn(name="inv_id")
|
||||
@ApiModelProperty(value = "库存ID")
|
||||
private Long invId;
|
||||
|
||||
@ManyToOne
|
||||
private Inventory inventory;
|
||||
@OneToOne
|
||||
@JoinColumn(name = "dept_id")
|
||||
@ApiModelProperty(value = "仓库ID")
|
||||
|
|
@ -212,7 +211,6 @@ public class Task extends BaseEntity implements Serializable {
|
|||
this.taskStatus = taskStatus;
|
||||
this.planQty = planQty;
|
||||
this.putCode = putCode;
|
||||
this.invId = invId;
|
||||
this.dept = dept;
|
||||
this.agvTask = agvTask;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@ public interface AgvTaskRepository extends JpaRepository<AgvTask, Integer>, JpaS
|
|||
*/
|
||||
@Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER') AND a.end_slot_code = ?1", nativeQuery = true)
|
||||
List<AgvTask> findEndTask(String endPoint);
|
||||
/** 查询重复任务*/
|
||||
@Query(value = "select a FROM AgvTask a where a.status in ('ATCALL','ATWORK','OPEN') AND a.startSlotCode = ?1 and a.endSlotCode=?2")
|
||||
List<AgvTask> findByRptAgvTask(String startPoint,String endPoint);
|
||||
|
||||
/**
|
||||
* 根据线边分组
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import java.util.Map;
|
|||
public interface AsnDetailRepository extends JpaRepository<AsnDetail, Long>, JpaSpecificationExecutor<AsnDetail> {
|
||||
@Query("select d from AsnDetail d where d.asn.id=?1 and d.lineNo=?2")
|
||||
List<AsnDetail> findByLineNo(Long id, Long lineNo);
|
||||
@Query(value = " select i.id,sum(ad.order_qty) from data_asn_detail ad "
|
||||
@Query(value = " select i.id itemId,sum(ad.order_qty) qty from data_asn_detail ad "
|
||||
+" left join data_asn a on ad.asn_id=a.id "
|
||||
+" left join base_bill_type bt on bt.id=a.bill_type_id "
|
||||
+" left join base_item i on ad.item_id=i.id "
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ import java.util.Map;
|
|||
public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificationExecutor<Task> {
|
||||
@Query(value = "SELECT u.id FROM data_task u WHERE u.asn_detail_id=?1", nativeQuery = true)
|
||||
public List<Map<String,String>> getAsnTask(Long id);
|
||||
@Query(value = " select sum(move_qty) qty,GROUP_CONCAT(id) taskIds,item_key_id ikID,dst_point_id pointId from data_task where agv_task_id=?1 and task_type='ASN' and task_status='RECEIVING' group by item_key_id ",nativeQuery = true)
|
||||
List<Map<String,Object>> findByAgvTask(Integer agvTaskId);
|
||||
|
||||
/**
|
||||
* 根据出库单明细查询未完成的Task集合
|
||||
|
|
@ -52,11 +54,10 @@ public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificat
|
|||
|
||||
/**
|
||||
* 根据AGV ID查询对应Task集合
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@Query(value = "SELECT * FROM data_task t WHERE t.agv_task_id=?1 ", nativeQuery = true)
|
||||
List<Task> getAgvTaskList(Integer id);
|
||||
@Query(value = "SELECT t FROM Task t WHERE t.agvTask.id=?1 and t.taskStatus=?2")
|
||||
List<Task> getAgvTaskList(Integer agvTaskId,String taskStatus);
|
||||
|
||||
/**
|
||||
* 根据 收货明细序号 进行删除数据
|
||||
|
|
|
|||
|
|
@ -101,21 +101,23 @@ public class AgvTaskController {
|
|||
@ApiOperation("AGV搬运任务回调接口")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> agvTaskCallback(@RequestBody String json){
|
||||
System.out.println("json:"+json);
|
||||
JSONObject jsonObject = JSON.parseObject(json);
|
||||
String taskCode = jsonObject.getString("taskCode")==null?"":jsonObject.getString("taskCode");//任务编号
|
||||
String podCode = jsonObject.getString("podCode")==null?"":jsonObject.getString("podCode");//容器编号
|
||||
String currentNodeCode = jsonObject.getString("currentNodeCode")==null?"":jsonObject.getString("currentNodeCode");//当前位置
|
||||
String missionStatus = jsonObject.getString("missionStatus")==null?"":jsonObject.getString("missionStatus");//作业当前状态
|
||||
agvTaskService.agvTaskCallback(taskCode,missionStatus);
|
||||
return new ResponseEntity<>(ApiResult.success("",""),HttpStatus.OK);
|
||||
//查询对应BOX
|
||||
try {
|
||||
/*AgvTaskDto dto= agvTaskService.findById(Integer.parseInt(taskCode));
|
||||
/*try {
|
||||
AgvTaskDto dto= agvTaskService.findById(Integer.parseInt(taskCode));
|
||||
AgvTask agvTask=agvTaskService.toEntity(dto);
|
||||
agvTaskService.agvTaskCallback(agvTask,missionStatus,"");*/
|
||||
agvTaskService.agvTaskCallback(taskCode,missionStatus);
|
||||
return new ResponseEntity<>(ApiResult.success("",""),HttpStatus.OK);
|
||||
agvTaskService.agvTaskCallback(agvTask,missionStatus,"");
|
||||
|
||||
} catch (Exception e) {
|
||||
return new ResponseEntity<>(ApiResult.fail(400,e.getMessage(),""),HttpStatus.OK);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ public class AsnDetailController {
|
|||
pointService.update(dstPoint);
|
||||
double srcQty=0d;
|
||||
Inventory inv=invService.getInventory(ik,dstPoint,d.getStock(),d.getDept(),BizStatus.RECEIVING_UP);
|
||||
t.setInvId(inv.getId());
|
||||
t.setInventory(inv);
|
||||
taskService.update(t);
|
||||
srcQty=inv.getQuantity();
|
||||
inv.addQty(inv,d.getOrderQty());
|
||||
|
|
|
|||
|
|
@ -53,68 +53,4 @@ public class KMReSController {
|
|||
|
||||
private final StockRepository stockRepository;
|
||||
|
||||
@PostMapping("/missionStateCallback")
|
||||
@Log("KMReS接口回调")
|
||||
@ApiOperation("KMReS接口回调")
|
||||
@AnonymousAccess
|
||||
public ResponseEntity<Object> missionStateCallback(@RequestBody MissionStateCallback missionStateCallback) {
|
||||
String id = missionStateCallback.getMissionCode();//作业 id
|
||||
String containerCode = missionStateCallback.getContainerCode();//容器编号
|
||||
String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态
|
||||
//小件任务
|
||||
if(id.indexOf("XJ")!=-1){
|
||||
if(missionStatus.equals("COMPLETED")){
|
||||
|
||||
}else if(missionStatus.equals("CANCELED")){
|
||||
List<AgvTask> agvTaskList= agvTaskService.findByjobCode(id);
|
||||
for(AgvTask agvTask:agvTaskList){
|
||||
if(!agvTask.getStatus().equals(BizStatus.FINISH)){
|
||||
agvTask.setStatus(BizStatus.CANCEL);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
agvTaskService.update(agvTask);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
AgvTask agvTask= agvTaskService.findByjobCode(id,containerCode);
|
||||
agvTaskService.agvTaskCallback(agvTask,missionStatus,containerCode);
|
||||
}
|
||||
|
||||
}else if(id.indexOf("GT")!=-1){
|
||||
//滚筒任务
|
||||
if(missionStatus.equals("COMPLETED")){
|
||||
List<AgvTask> agvTaskList= agvTaskService.findByjobCode(id);
|
||||
for(AgvTask agvTask:agvTaskList){
|
||||
//完成线边点位释放;容器清空线边点位。
|
||||
Point endPoint = pointService.findByCode(agvTask.getEndSlotCode(), null, null, null, null);
|
||||
endPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(endPoint);
|
||||
Stock stock = stockRepository.getStockByCode(agvTask.getStockCode());
|
||||
if (stock != null) {
|
||||
stock.setLineSlotCode(null);
|
||||
stockRepository.save(stock);
|
||||
}
|
||||
|
||||
agvTask.setStatus(BizStatus.FINISH);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
agvTaskService.update(agvTask);
|
||||
}
|
||||
}else if(missionStatus.equals("CANCELED")){
|
||||
List<AgvTask> agvTaskList= agvTaskService.findByjobCode(id);
|
||||
for(AgvTask agvTask:agvTaskList){
|
||||
if(!agvTask.getStatus().equals(BizStatus.FINISH)){
|
||||
agvTask.setStatus(BizStatus.CANCEL);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
agvTaskService.update(agvTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
//货架任务
|
||||
AgvTaskDto agvTaskDto=agvTaskService.findById(Integer.parseInt(id));
|
||||
AgvTask agvTask=agvTaskService.toEntity(agvTaskDto);//转实体
|
||||
agvTaskService.agvTaskCallback(agvTask,missionStatus,containerCode);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(ApiResult.success(OK.value(), "", ""), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,11 +150,8 @@ public interface AgvTaskService {
|
|||
|
||||
/**
|
||||
* 任务回报更新状态
|
||||
* @param agvTask
|
||||
* @param status
|
||||
* @param containerCode
|
||||
*/
|
||||
void agvTaskCallback(AgvTask agvTask,String status,String containerCode);
|
||||
void agvTaskCallback(String taskCode,String status);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -84,5 +84,23 @@ public interface InventoryLogService {
|
|||
*/
|
||||
void download(List<InventoryLogDto> all, HttpServletResponse response) throws IOException;
|
||||
|
||||
/**
|
||||
* 添加库存日志
|
||||
* @param logType
|
||||
* @param incDec
|
||||
* @param relatedBill
|
||||
* @param itemKey
|
||||
* @param srcPoint
|
||||
* @param dstPoint
|
||||
* @param srcStock
|
||||
* @param dstStock
|
||||
* @param srcQty
|
||||
* @param occurQty
|
||||
* @param refObj
|
||||
* @param refObjId
|
||||
* @param invId
|
||||
* @param description
|
||||
* @return
|
||||
*/
|
||||
InventoryLog storeInventoryLog(String logType, int incDec, String relatedBill, ItemKey itemKey, Point srcPoint, Point dstPoint, Stock srcStock, Stock dstStock, Double srcQty, Double occurQty, String refObj, Long refObjId, Long invId,String description);
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ import com.youchain.basicdata.domain.Point;
|
|||
import com.youchain.basicdata.domain.Stock;
|
||||
import com.youchain.businessdata.domain.Inventory;
|
||||
import com.youchain.businessdata.domain.ItemKey;
|
||||
import com.youchain.businessdata.domain.Task;
|
||||
import com.youchain.businessdata.service.dto.InvQueryCriteria;
|
||||
import com.youchain.businessdata.service.dto.InventoryDto;
|
||||
import com.youchain.businessdata.service.dto.InventoryQueryCriteria;
|
||||
|
|
@ -96,4 +97,11 @@ public interface InventoryService {
|
|||
List<Inventory> queryInventory(Stock stock);
|
||||
|
||||
List<Inventory> getInvForPlan(String type,Long areaId,Long itemId,Long deptId);
|
||||
|
||||
/**
|
||||
* 入库生成库存
|
||||
* @param taskListMap 收货任务总结
|
||||
* @return
|
||||
*/
|
||||
Inventory asnAddInventory(List<Map<String,Object>> taskListMap);
|
||||
}
|
||||
|
|
@ -127,8 +127,6 @@ public interface TaskService {
|
|||
*/
|
||||
List<RPTaskList> queryTaskApp(IPTask t);
|
||||
|
||||
List<Task> getAgvTaskList(Integer id);
|
||||
|
||||
List<Task> findByPointCode(Long boxId);
|
||||
|
||||
ApiResult readRfid(String rfid);
|
||||
|
|
|
|||
|
|
@ -164,72 +164,12 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
|||
*/
|
||||
@Override
|
||||
public synchronized String sendAgvTaskImpl(AgvTask agvTasks) {
|
||||
|
||||
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
||||
|
||||
Map<String, Object> objMap = new LinkedHashMap<>();
|
||||
objMap.put("orgId", agvTasks.getId());//库存组织 ID
|
||||
objMap.put("requestId", agvTasks.getId());//请求 id
|
||||
objMap.put("missionCode", agvTasks.getId());//任务编号
|
||||
|
||||
objMap.put("missionType", agvTasks.getJobType());//货 架 ( 托 盘 ) 移动 RACK_MOVE
|
||||
String viewBoardType = "";
|
||||
Point point = pointService.findByCode(agvTasks.getStartSlotCode(), null, null, null, null);
|
||||
//到达上视自动识别
|
||||
if (point.getArea().getName().equals("前桶预装满车区") || point.getArea().getName().equals("后桶预装满车区") || point.getArea().getName().equals("前桶部装空车区") || point.getArea().getName().equals("后桶部装空车区")) {
|
||||
viewBoardType = "IDENTIFY_REQUIRE";
|
||||
}
|
||||
objMap.put("viewBoardType", viewBoardType);//上视识别类型;需要 IDENTIFY_REQUIRE 不需要NORMAL
|
||||
objMap.put("robotType", "LIFT");//机器人功能类型
|
||||
JSONArray robotModels = new JSONArray();
|
||||
objMap.put("robotModels", robotModels);//机器人具体型号
|
||||
JSONArray robotIds = new JSONArray();
|
||||
objMap.put("robotIds", robotIds);//机器人编号
|
||||
String priority="1";
|
||||
if (point.getArea().getName().equals("前桶预装满车区") || point.getArea().getName().equals("后桶预装满车区") ) {
|
||||
priority = "2";
|
||||
}
|
||||
objMap.put("priority", priority);//数值越小,优先级越高,默认是 1
|
||||
objMap.put("containerModelCode", "");//容器模型编码
|
||||
objMap.put("containerCode", agvTasks.getStockCode() == null ? "" : agvTasks.getStockCode());//容器编号
|
||||
objMap.put("templateCode", "");//作业流程模板编号
|
||||
objMap.put("lockRobotAfterFinish", false);//是否需要流程结束后机器人保持任务锁定状态
|
||||
objMap.put("unlockRobotId", "");//解锁当前小车的在上个任务的锁定状态
|
||||
objMap.put("unlockMissionCode", "");//当前小车的上一个任务
|
||||
objMap.put("idleNode", "");//作业流程完成后,指定机器人停放区域/点
|
||||
JSONArray missionDataArray = new JSONArray();
|
||||
JSONObject missionDataObj = new JSONObject(new LinkedHashMap<>());
|
||||
Map<String, Object> missionDataMap = new LinkedHashMap<>();
|
||||
missionDataMap.put("sequence", 1);//序号
|
||||
missionDataMap.put("position", agvTasks.getStartSlotCode());//起始点
|
||||
missionDataMap.put("type", "NODE_POINT");//作业位置类型:点位:NODE_POINT
|
||||
missionDataMap.put("putDown", false);//作业点位是否需要放下货架
|
||||
missionDataMap.put("passStrategy", "AUTO");//当前任务点结束后放行策略
|
||||
missionDataMap.put("waitingMillis", "0");//自动触发离开当前任务节点的时间,默认单位:毫秒
|
||||
missionDataObj.putAll(missionDataMap);
|
||||
missionDataArray.add(missionDataObj);
|
||||
|
||||
JSONObject missionDataObj2 = new JSONObject(new LinkedHashMap<>());
|
||||
Map<String, Object> missionDataMap2 = new LinkedHashMap<>();
|
||||
missionDataMap2.put("sequence", 2);//序号
|
||||
missionDataMap2.put("position", agvTasks.getEndSlotCode());//目标点
|
||||
missionDataMap2.put("type", "NODE_POINT");//作业位置类型:点位:NODE_POINT
|
||||
missionDataMap2.put("putDown", true);//作业点位是否需要放下货架
|
||||
missionDataMap2.put("passStrategy", "AUTO");//当前任务点结束后放行策略
|
||||
missionDataMap2.put("waitingMillis", "0");//自动触发离开当前任务节点的时间,默认单位:毫秒
|
||||
missionDataObj2.putAll(missionDataMap2);
|
||||
missionDataArray.add(missionDataObj2);
|
||||
|
||||
|
||||
objMap.put("missionData", missionDataArray);
|
||||
jsonObject.putAll(objMap);
|
||||
System.out.println(jsonObject.toString());
|
||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());//返回ResponseJson*/
|
||||
JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
String code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
if (code.equals("0")) {
|
||||
agvTasks.setJobForce(agvTasks.getId().toString());//任务组
|
||||
agvTasks.setJobForceAsc((1));
|
||||
agvTasks.setStatus(BizStatus.ATCALL);
|
||||
agvTasks.setJobMessage(resultJson);
|
||||
agvTasks.setReqMessage(jsonObject.toString());
|
||||
|
|
@ -497,519 +437,13 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
|||
return agvTaskMapper.toEntity(agvTaskDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void agvTaskCallback(AgvTask agvTask, String status, String containerCode) {
|
||||
String agv_on_off = "OFF";
|
||||
agv_on_off = dictService.getDictDescription("agv_on_off") == null ? "OFF" : dictService.getDictDescription("agv_on_off").getDescription();
|
||||
String code = "0";
|
||||
if (status.equals("ARRIVED")) {
|
||||
|
||||
} else if (status.equals("PICKER_RECEIVE")) {
|
||||
//小件:AGV把料箱放到料箱车上扣减库存;点位释放
|
||||
|
||||
Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null);
|
||||
String srcAreaName = startPoint.getArea().getName();
|
||||
if (srcAreaName.equals(AreaNameDic.XJHCQ)) {
|
||||
Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
if (stock == null) {
|
||||
throw new RuntimeException(containerCode + "容器不存在! 请维护");
|
||||
}
|
||||
List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
//扣除库存
|
||||
for (Task task : taskList) {
|
||||
try {
|
||||
taskService.pickConfirm(task.getId(), task.getPlanQty());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
//点位释放
|
||||
startPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(startPoint);
|
||||
stock.setPoint(null);
|
||||
stockRepository.save(stock);
|
||||
agvTask.setStatus(BizStatus.FINISH);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
this.update(agvTask);
|
||||
} else if (srcAreaName.equals("出库缓存输送线空箱接驳口")) {
|
||||
agvTask.setStatus(BizStatus.FINISH);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
this.update(agvTask);
|
||||
}
|
||||
|
||||
|
||||
} else if (status.equals("PICKER_SEND")) {
|
||||
//小件:AGV把料箱放到立库架子上生成库存
|
||||
|
||||
List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
Point endPoint = pointService.findByCode(agvTask.getEndSlotCode(), null, null, null, null);
|
||||
String endAreaName = endPoint.getArea().getName();
|
||||
if (endAreaName.equals(AreaNameDic.XJHCQ)) {
|
||||
Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
if (stock == null) {
|
||||
throw new RuntimeException(containerCode + "容器不存在! 请维护");
|
||||
}
|
||||
for (Task task : taskList) {
|
||||
AsnDetail ad = task.getAsnDetail();
|
||||
ad.setReceivedQty(ad.getOrderQty());
|
||||
ad.setStatus(BizStatus.RECEIVED);
|
||||
ad.setStock(stock);
|
||||
asnDetailRepository.save(ad);
|
||||
task.setTaskStatus(BizStatus.FINISH);
|
||||
task.setMoveQty(task.getPlanQty());
|
||||
task.setSrcStock(stock);
|
||||
if (stock != null) {
|
||||
task.setSrcStockCode(stock.getCode());
|
||||
task.setDstStockCode(stock.getCode());
|
||||
List<Inventory> inventoryList = inventoryService.queryInventory(stock);
|
||||
for (Inventory inventory : inventoryList) {
|
||||
inventory.setQuantity(0d);
|
||||
inventory.setQueuedQty(0d);
|
||||
inventoryService.update(inventory);
|
||||
if (inventory.getQuantity() <= 0) {
|
||||
Long[] ids = new Long[1];
|
||||
ids[0] = inventory.getId();
|
||||
inventoryService.deleteAll(ids);
|
||||
}
|
||||
}
|
||||
}
|
||||
task.setDstStock(stock);
|
||||
taskService.update(task);
|
||||
|
||||
|
||||
//生成库存
|
||||
Inventory inventory = inventoryService.getInventory(task.getItemKey(), task.getDstPoint(), stock, task.getDept(), BizStatus.RECEIVING_UP);
|
||||
double srcQty = inventory.getQuantity();
|
||||
inventory.addQty(inventory, task.getPlanQty());
|
||||
inventoryService.update(inventory);
|
||||
stock.setStatus(BaseStatus.USED);
|
||||
stock.setPoint(inventory.getPoint());
|
||||
stockRepository.save(stock);
|
||||
inventoryLogService.storeInventoryLog(BizStatus.RECEIVING_UP, BizStatus.ADD, null, task.getItemKey(), task.getSrcPoint(), task.getDstPoint(),
|
||||
task.getSrcStock(), task.getSrcStock(), srcQty, task.getPlanQty(), BizStatus.ASN, ad.getId(), inventory.getId(), ad.getRemark());
|
||||
}
|
||||
agvTask.setStatus(BizStatus.FINISH);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
this.update(agvTask);
|
||||
}
|
||||
|
||||
|
||||
} else if (status.equals("UP_CONTAINER")) {
|
||||
Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null);
|
||||
String srcAreaName = startPoint.getArea().getName();
|
||||
//顶升释放起点位置状态及容器绑定的起点位置
|
||||
startPoint.setStatus(BaseStatus.FREE);
|
||||
if (srcAreaName.equals("轴承座机械臂工位")) {//顶升时空车返回,清空物料数据
|
||||
startPoint.setItemCode(null);
|
||||
}
|
||||
pointService.update(startPoint);
|
||||
|
||||
if (srcAreaName.equals("前桶预装满车区") || srcAreaName.equals("后桶预装满车区") || srcAreaName.equals("前桶部装空车区") || srcAreaName.equals("后桶部装空车区") || srcAreaName.equals("轴承座翻包区") || srcAreaName.equals("轴承座满车库") || srcAreaName.equals("轴承座机械臂工位")) {
|
||||
BoxServiceImpl bsi = SpringContextHolder.getBean(BoxServiceImpl.class);
|
||||
Box box = bsi.getBoxByPointCode(startPoint.getCode());
|
||||
if (box != null) {
|
||||
box.setLampStatus("0");
|
||||
bsi.update(box);
|
||||
}
|
||||
}
|
||||
|
||||
agvTask.setStockCode(containerCode);
|
||||
agvTask.setStatus(BizStatus.UP_CONTAINER);
|
||||
this.update(agvTask);
|
||||
|
||||
} else if (status.equals("COMPLETED")) {//完成
|
||||
//任务完成;根据AGV任务的目标点位走对应流程
|
||||
Point endPoint = pointService.findByCode(agvTask.getEndSlotCode(), null, null, null, null);
|
||||
String endAreaName = endPoint.getArea().getName();
|
||||
if (endPoint != null) {
|
||||
Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
if (stock == null) {
|
||||
throw new RuntimeException(containerCode + "容器不存在! 请维护");
|
||||
}
|
||||
List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
if (endAreaName.equals(AreaNameDic.QTYK) || endAreaName.equals(AreaNameDic.HTYK) || endAreaName.equals(AreaNameDic.QTBZM) || endAreaName.equals(AreaNameDic.HTBZM)) {
|
||||
//目标点位容器都由人为拉走,调用容器出场,按钮盒自动灭灯
|
||||
String jsonObject = this.containerOut(containerCode);
|
||||
if (agv_on_off.equals("ON")) {
|
||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.containerOut, jsonObject.toString());
|
||||
JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
}
|
||||
if (code.equals("0")) {
|
||||
stock.setPoint(null);
|
||||
stock.setStatus(BaseStatus.FREE);
|
||||
stockRepository.save(stock);
|
||||
}
|
||||
//按钮盒点位释放
|
||||
endPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(endPoint);
|
||||
}
|
||||
//处理实际逻辑
|
||||
if (endAreaName.equals(AreaNameDic.QTYK) || endAreaName.equals(AreaNameDic.HTYK)) {
|
||||
for (Task task : taskList) {
|
||||
task.setTaskStatus(BizStatus.ATWORK);
|
||||
taskService.update(task);
|
||||
}
|
||||
} else if (endAreaName.equals(AreaNameDic.QHTBZK) || endAreaName.equals(AreaNameDic.QHTK) || endAreaName.equals(AreaNameDic.ZCFB) || endAreaName.equals(AreaNameDic.ZCK)) {
|
||||
stock.setPoint(endPoint);
|
||||
stock.setStatus(BaseStatus.FREE);
|
||||
stockRepository.save(stock);
|
||||
endPoint.setStatus(BaseStatus.USED);
|
||||
pointService.update(endPoint);
|
||||
} else if (endAreaName.equals(AreaNameDic.QTBZM) || endAreaName.equals(AreaNameDic.HTBZM) || endAreaName.equals(AreaNameDic.ZCJXB)) {
|
||||
String itemCode = null;
|
||||
//扣除库存
|
||||
for (Task task : taskList) {
|
||||
try {
|
||||
taskService.pickConfirm(task.getId(), task.getPlanQty());
|
||||
itemCode = task.getItemKey().getItem().getCode();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
//轴承座机械臂点位容器位置不变,空满切换
|
||||
if (endAreaName.equals(AreaNameDic.ZCJXB)) {
|
||||
stock.setPoint(endPoint);
|
||||
stockRepository.save(stock);
|
||||
endPoint.setItemCode(itemCode);
|
||||
endPoint.setStatus(BaseStatus.USED);
|
||||
pointService.update(endPoint);
|
||||
}
|
||||
} else if (endAreaName.equals(AreaNameDic.QHTL) || endAreaName.equals(AreaNameDic.ZCM)) {
|
||||
//增加库存
|
||||
if (endAreaName.equals(AreaNameDic.QHTL) || endAreaName.equals(AreaNameDic.ZCM)) {
|
||||
for (Task task : taskList) {
|
||||
AsnDetail ad = task.getAsnDetail();
|
||||
ad.setReceivedQty(ad.getOrderQty());
|
||||
ad.setStatus(BizStatus.RECEIVED);
|
||||
ad.setStock(stock);
|
||||
asnDetailRepository.save(ad);
|
||||
task.setTaskStatus(BizStatus.FINISH);
|
||||
task.setMoveQty(task.getPlanQty());
|
||||
task.setSrcStock(stock);
|
||||
if (stock != null) {
|
||||
task.setSrcStockCode(stock.getCode());
|
||||
task.setDstStockCode(stock.getCode());
|
||||
List<Inventory> inventoryList = inventoryService.queryInventory(stock);
|
||||
for (Inventory inventory : inventoryList) {
|
||||
inventory.setQuantity(0d);
|
||||
inventory.setQueuedQty(0d);
|
||||
inventoryService.update(inventory);
|
||||
if (inventory.getQuantity() <= 0) {
|
||||
Long[] ids = new Long[1];
|
||||
ids[0] = inventory.getId();
|
||||
inventoryService.deleteAll(ids);
|
||||
}
|
||||
}
|
||||
}
|
||||
task.setDstStock(stock);
|
||||
taskService.update(task);
|
||||
|
||||
|
||||
//生成库存
|
||||
Inventory inventory = inventoryService.getInventory(task.getItemKey(), task.getDstPoint(), stock, task.getDept(), BizStatus.RECEIVING_UP);
|
||||
double srcQty = inventory.getQuantity();
|
||||
inventory.addQty(inventory, task.getPlanQty());
|
||||
inventoryService.update(inventory);
|
||||
stock.setStatus(BaseStatus.USED);
|
||||
stock.setPoint(inventory.getPoint());
|
||||
stockRepository.save(stock);
|
||||
inventoryLogService.storeInventoryLog(BizStatus.RECEIVING_UP, BizStatus.ADD, null, task.getItemKey(), task.getSrcPoint(), task.getDstPoint(),
|
||||
task.getSrcStock(), task.getSrcStock(), srcQty, task.getPlanQty(), BizStatus.ASN, ad.getId(), inventory.getId(), ad.getRemark());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (endPoint != null) {
|
||||
// if (endPoint.getType().equals(BaseStatus.BOX)||endAreaName.equals(AreaNameDic.ZCFB)) {
|
||||
// //容器到达前桶后桶预装空车区,自动解绑容器
|
||||
// if (endAreaName.equals(AreaNameDic.QTYK) ||endAreaName.equals(AreaNameDic.HTYK)) {
|
||||
// //容器出场
|
||||
// String jsonObject = this.containerOut(containerCode);
|
||||
// if(agv_on_off.equals("ON")) {
|
||||
// String resultJson = HttpPostUtil.sendPostReq(UrlApi.containerOut, jsonObject.toString());
|
||||
// JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
// code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
// }
|
||||
// if (code.equals("0")) {
|
||||
// Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
// stock.setPoint(null);
|
||||
// stock.setStatus(BaseStatus.FREE);
|
||||
// stockRepository.save(stock);
|
||||
// }
|
||||
// //按钮盒点位释放
|
||||
// endPoint.setStatus(BaseStatus.FREE);
|
||||
// pointService.update(endPoint);
|
||||
//
|
||||
// List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
// for (Task task : taskList) {
|
||||
// task.setTaskStatus(BizStatus.ATWORK);
|
||||
// taskService.update(task);
|
||||
// }
|
||||
// } else if (endAreaName.equals(AreaNameDic.QTBZM) || endAreaName.equals(AreaNameDic.HTBZM)) {
|
||||
// //到达部装满车区,扣减库存,自动解绑容器
|
||||
// String jsonObject = this.containerOut(containerCode);
|
||||
// if(agv_on_off.equals("ON")) {
|
||||
// String resultJson = HttpPostUtil.sendPostReq(UrlApi.containerOut, jsonObject.toString());
|
||||
// JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
// code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
// }
|
||||
// if (code.equals("0")) {
|
||||
// Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
// stock.setPoint(null);
|
||||
// stock.setStatus(BaseStatus.FREE);
|
||||
// if(endAreaName.equals(AreaNameDic.ZCJXB)){
|
||||
// stock.setPoint(endPoint);
|
||||
// }
|
||||
// stockRepository.save(stock);
|
||||
// }
|
||||
// //点位释放
|
||||
// if(!endAreaName.equals(AreaNameDic.ZCJXB)) {
|
||||
// endPoint.setStatus(BaseStatus.FREE);
|
||||
// }
|
||||
// pointService.update(endPoint);
|
||||
// List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
// for (Task task : taskList) {
|
||||
// try {
|
||||
// taskService.pickConfirm(task.getId(), task.getPlanQty());
|
||||
// } catch (Exception e) {
|
||||
// throw new RuntimeException(e.getMessage());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// } else {
|
||||
// //存储点位,生成库存调用
|
||||
// if (endAreaName.equals(AreaNameDic.QHTL)||endAreaName.equals(AreaNameDic.ZCM)) {
|
||||
// Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
// List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
// for (Task task : taskList) {
|
||||
// AsnDetail ad = task.getAsnDetail();
|
||||
// ad.setReceivedQty(ad.getOrderQty());
|
||||
// ad.setStatus(BizStatus.RECEIVED);
|
||||
// ad.setStock(stock);
|
||||
// asnDetailRepository.save(ad);
|
||||
// task.setTaskStatus(BizStatus.FINISH);
|
||||
// task.setMoveQty(task.getPlanQty());
|
||||
// task.setSrcStock(stock);
|
||||
// if(stock!=null){
|
||||
// task.setSrcStockCode(stock.getCode());
|
||||
// task.setDstStockCode(stock.getCode());
|
||||
// }
|
||||
// task.setDstStock(stock);
|
||||
// taskService.update(task);
|
||||
// //生成库存
|
||||
// Inventory inventory = inventoryService.getInventory(task.getItemKey(), task.getDstPoint(), task.getSrcStock(), task.getDept(), BizStatus.RECEIVING_UP);
|
||||
// double srcQty=inventory.getQuantity();
|
||||
// inventory.addQty(inventory, task.getPlanQty());
|
||||
// inventoryService.update(inventory);
|
||||
// stock.setStatus(BaseStatus.USED);
|
||||
// stock.setPoint(inventory.getPoint());
|
||||
// stockRepository.save(stock);
|
||||
// inventoryLogService.storeInventoryLog(BizStatus.RECEIVING_UP,BizStatus.ADD,null,task.getItemKey(),task.getSrcPoint(),task.getDstPoint(),
|
||||
// task.getSrcStock(),task.getSrcStock(),srcQty,task.getPlanQty(), BizStatus.ASN,ad.getId(),inventory.getId(),ad.getRemark());
|
||||
// }
|
||||
// }else if(endAreaName.equals(AreaNameDic.QHTBZK)||endAreaName.equals(AreaNameDic.QHTK)){
|
||||
// Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
// stock.setPoint(endPoint);
|
||||
// stock.setStatus(BaseStatus.FREE);
|
||||
// stockRepository.save(stock);
|
||||
// }else if (endAreaName.equals(AreaNameDic.QTBZM) || endAreaName.equals(AreaNameDic.HTBZM)||endAreaName.equals(AreaNameDic.ZCJXB)) {
|
||||
// //到达部装满车区,扣减库存,自动解绑容器
|
||||
// String jsonObject = this.containerOut(containerCode);
|
||||
// if(agv_on_off.equals("ON")) {
|
||||
// String resultJson = HttpPostUtil.sendPostReq(UrlApi.containerOut, jsonObject.toString());
|
||||
// JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
// code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
// }
|
||||
// if (code.equals("0")) {
|
||||
// Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
// stock.setPoint(null);
|
||||
// stock.setStatus(BaseStatus.FREE);
|
||||
// stockRepository.save(stock);
|
||||
// }
|
||||
// //点位释放
|
||||
// endPoint.setStatus(BaseStatus.FREE);
|
||||
// pointService.update(endPoint);
|
||||
// List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
// for (Task task : taskList) {
|
||||
// try {
|
||||
// taskService.pickConfirm(task.getId(), task.getPlanQty());
|
||||
// } catch (Exception e) {
|
||||
// throw new RuntimeException(e.getMessage());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//任务完成
|
||||
agvTask.setStatus(BizStatus.FINISH);
|
||||
agvTask.setStockCode(containerCode);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
this.update(agvTask);
|
||||
if (endAreaName.equals(AreaNameDic.QTYK) || endAreaName.equals(AreaNameDic.HTYK) || endAreaName.equals(AreaNameDic.QTBZM) || endAreaName.equals(AreaNameDic.HTBZM)) {
|
||||
BoxServiceImpl bsi = SpringContextHolder.getBean(BoxServiceImpl.class);
|
||||
Box box = bsi.getBoxByPointCode(agvTask.getEndSlotCode());
|
||||
if (box != null) {
|
||||
box.setLampStatus("0");
|
||||
bsi.update(box);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (status.equals("CANCELED")) {
|
||||
//任务取消完成
|
||||
Point endPoint = pointService.findByCode(agvTask.getEndSlotCode(), null, null, null, null);
|
||||
if (endPoint != null) {
|
||||
String endAreaName = endPoint.getArea().getName();
|
||||
if (endPoint.getType().equals(BaseStatus.BOX)) {
|
||||
//呼叫空车时异常,容器不出场,按钮盒点位释放
|
||||
if (endPoint.getArea().getName().equals(AreaNameDic.QTYK) || endPoint.getArea().getName().equals(AreaNameDic.HTYK) || endPoint.getArea().getName().equals(AreaNameDic.ZCK)) {
|
||||
|
||||
//按钮盒点位释放
|
||||
endPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(endPoint);
|
||||
|
||||
//查询容器状态
|
||||
String jsonObject = this.containerQuery(containerCode);
|
||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.containerQuery, jsonObject.toString());
|
||||
JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
System.out.println("查询容状态:" + resulObject);
|
||||
code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
if (code.equals("0")) {
|
||||
String data1 = resulObject.getString("data") == null ? "" : resulObject.getString("data");
|
||||
JSONArray jsonArray = JSON.parseArray(data1);
|
||||
JSONObject dataObject = JSON.parseObject(jsonArray.get(0).toString());
|
||||
String isCarry = dataObject.getString("isCarry") == null ? "" : dataObject.getString("isCarry");
|
||||
if (isCarry.equals("0")) {
|
||||
System.out.println(agvTask.getId() + "任务的容器未移动!");
|
||||
} else {
|
||||
//空车点位释放
|
||||
Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null);
|
||||
startPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(startPoint);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else if (endPoint.getArea().getName().equals(AreaNameDic.QTBZM) || endPoint.getArea().getName().equals(AreaNameDic.HTBZM) || endPoint.getArea().getName().equals(AreaNameDic.ZCJXB)) {
|
||||
|
||||
//呼叫满车车时异常,容器不出场,按钮盒点位释放
|
||||
|
||||
//按钮盒点位释放
|
||||
endPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(endPoint);
|
||||
|
||||
//查询容器状态
|
||||
String jsonObject = this.containerQuery(containerCode);
|
||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.containerQuery, jsonObject.toString());
|
||||
JSONObject resulObject = JSON.parseObject(resultJson);
|
||||
System.out.println("查询容状态:" + resulObject);
|
||||
code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||
if (code.equals("0")) {
|
||||
String data1 = resulObject.getString("data") == null ? "" : resulObject.getString("data");
|
||||
JSONArray jsonArray = JSON.parseArray(data1);
|
||||
JSONObject dataObject = JSON.parseObject(jsonArray.get(0).toString());
|
||||
String isCarry = dataObject.getString("isCarry") == null ? "" : dataObject.getString("isCarry");
|
||||
if (isCarry.equals("0")) {
|
||||
//任务取消库存咱用数还原
|
||||
Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
if (stock != null) {
|
||||
List<Inventory> inventoryList = inventoryService.queryInventory(stock);
|
||||
for (Inventory inventory : inventoryList) {
|
||||
inventory.setQueuedQty(0d);
|
||||
inventoryService.update(inventory);
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println(agvTask.getId() + "任务的容器未移动,不扣减库信息!");
|
||||
} else {
|
||||
//缓存点位释放
|
||||
Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null);
|
||||
startPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(startPoint);
|
||||
|
||||
List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
for (Task task : taskList) {
|
||||
try {
|
||||
taskService.pickConfirm(task.getId(), task.getPlanQty());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
//回冷却区取消任务,不生成库存 入库任务取消即可
|
||||
if (endPoint.getArea().getName().equals(AreaNameDic.QHTL) || endPoint.getArea().getName().equals(AreaNameDic.ZCM)) {
|
||||
Stock stock = stockRepository.getStockByCode(containerCode);
|
||||
List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
|
||||
for (Task task : taskList) {
|
||||
AsnDetail ad = task.getAsnDetail();
|
||||
ad.setStatus(BizStatus.CANCEL);
|
||||
ad.setStock(stock);
|
||||
asnDetailRepository.save(ad);
|
||||
task.setTaskStatus(BizStatus.CANCEL);
|
||||
task.setSrcStock(stock);
|
||||
if (stock != null) {
|
||||
task.setSrcStockCode(stock.getCode());
|
||||
task.setDstStockCode(stock.getCode());
|
||||
}
|
||||
task.setDstStock(stock);
|
||||
taskService.update(task);
|
||||
}
|
||||
//未入库成功将点位释放
|
||||
endPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(endPoint);
|
||||
// 前后桶预装满车区按钮盒点位释放
|
||||
Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null);
|
||||
startPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(startPoint);
|
||||
} else if (endPoint.getArea().getName().equals(AreaNameDic.QHTBZK) || endPoint.getArea().getName().equals(AreaNameDic.QHTK) || endPoint.getArea().getName().equals(AreaNameDic.ZCK)) {
|
||||
//回空车取消任务,不做出场
|
||||
endPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(endPoint);
|
||||
// 前后桶部装空车区按钮盒点位释放
|
||||
Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null);
|
||||
startPoint.setStatus(BaseStatus.FREE);
|
||||
pointService.update(startPoint);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
agvTask.setStatus(BizStatus.CANCEL);
|
||||
agvTask.setStockCode(containerCode);
|
||||
agvTask.setEndTime(new Timestamp(new Date().getTime()));
|
||||
this.update(agvTask);
|
||||
if (endAreaName.equals(AreaNameDic.QTYK) || endAreaName.equals(AreaNameDic.HTYK) || endAreaName.equals(AreaNameDic.QTBZM) || endAreaName.equals(AreaNameDic.HTBZM)) {
|
||||
BoxServiceImpl bsi = SpringContextHolder.getBean(BoxServiceImpl.class);
|
||||
Box box = bsi.getBoxByPointCode(agvTask.getEndSlotCode());
|
||||
if (box != null) {
|
||||
box.setLampStatus("0");
|
||||
bsi.update(box);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void agvTaskCallback(String taskCode, String status) {
|
||||
// agvTask搬运任务
|
||||
AgvTask agvTask=agvTaskRepository.getById(Integer.valueOf(taskCode));
|
||||
// task库存任务
|
||||
List<Task> tasks=taskRepository.getAgvTaskList(agvTask.getId());
|
||||
// List<Task> tasks=taskRepository.getAgvTaskList(agvTask.getId(),BizStatus.ASN);
|
||||
List<Map<String,Object>> taskMapList=taskRepository.findByAgvTask(agvTask.getId());
|
||||
Point startPoint=null;
|
||||
Point endPoint=null;
|
||||
if (status.equals("1")){
|
||||
|
|
@ -1029,6 +463,11 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
|||
pointRepository.save(endPoint);
|
||||
agvTask.setStatus(BizStatus.FINISH);
|
||||
agvTask.setEndTime(new Timestamp((new Date()).getTime()));
|
||||
|
||||
if (taskMapList.size()>0){
|
||||
// 生成库存
|
||||
Inventory inventory = inventoryService.asnAddInventory(taskMapList);
|
||||
}
|
||||
} else if (status.equals("4")) {
|
||||
// 取消任务
|
||||
}
|
||||
|
|
@ -1134,14 +573,32 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
|||
|
||||
@Override
|
||||
public AgvTask addAgvTask(String type, String stockTypeCode, String startSlotCode, String endSlotCode, String status, String jobType) {
|
||||
AgvTask agvTask= new AgvTask();
|
||||
AgvTask agvTask = new AgvTask();
|
||||
List<AgvTask> agvTaskList=agvTaskRepository.findByRptAgvTask(startSlotCode,endSlotCode);
|
||||
if (agvTaskList.size()>0){
|
||||
return agvTaskList.get(0);
|
||||
}
|
||||
agvTask.setType(type);
|
||||
agvTask.setStockTypeCode(stockTypeCode);
|
||||
agvTask.setStartSlotCode(startSlotCode);
|
||||
agvTask.setEndSlotCode(endSlotCode);
|
||||
agvTask.setStatus(status);
|
||||
agvTask.setJobType(jobType);
|
||||
return agvTaskRepository.save(agvTask);
|
||||
AgvTask agv=agvTaskRepository.save(agvTask);
|
||||
// 生成任务占用库位
|
||||
Point startPoint=pointRepository.findByCode(startSlotCode);
|
||||
Point endPoint=pointRepository.findByCode(endSlotCode);
|
||||
if (startPoint.getType().equals("STORAGE")){
|
||||
startPoint.setStatus(BaseStatus.USED);
|
||||
pointRepository.save(startPoint);
|
||||
}
|
||||
if (startPoint.getType().equals("STORAGE")){
|
||||
endPoint.setStatus(BaseStatus.USED);
|
||||
endPoint.setStorageType(startPoint.getStorageType());
|
||||
pointRepository.save(endPoint);
|
||||
}
|
||||
|
||||
return agv;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -1156,11 +613,6 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
|||
return endPoint.getCode()+":被任务占用";
|
||||
}
|
||||
AgvTask agvTask = addAgvTask(BizStatus.AGV_F, startPoint.getStorageType(), startPoint.getCode(),endPoint.getCode() , BizStatus.OPEN, BizStatus.ASN);
|
||||
startPoint.setStatus(BaseStatus.USED);
|
||||
pointRepository.save(startPoint);
|
||||
endPoint.setStatus(BaseStatus.USED);
|
||||
endPoint.setStorageType(startPoint.getStorageType());
|
||||
pointRepository.save(endPoint);
|
||||
}else {
|
||||
return pointEndCode+":目标点错误";
|
||||
}
|
||||
|
|
@ -1187,6 +639,14 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
|||
Map<String,Object> objectMap=taskSumQty.get(0);
|
||||
Long itemId=Long.valueOf(objectMap.get("itemId")+"");
|
||||
Double taskQty=Double.valueOf(objectMap.get("taskQty")+"");
|
||||
for (int i = 0; i < asnDetailSumQty.size(); i++) {
|
||||
Map<String,Object> sumQty=asnDetailSumQty.get(i);
|
||||
if (Long.valueOf(sumQty.get("itemId")+"")==itemId){
|
||||
if (taskQty>Double.valueOf(sumQty.get("qty")+"")){
|
||||
return ApiResult.success(500, "任务异常:RFID读取到的物料数量大于入库单中的数量", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
Item item=itemService.findByItemId(itemId);
|
||||
if (taskQty>=item.getExtendD1()){
|
||||
//入库
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ public class AsnDetailServiceImpl implements AsnDetailService {
|
|||
if (asnDetail.getOrderQty()<=asnDetail.getReceivedQty()){
|
||||
asnDetail.setStatus(BizStatus.RECEIVED);
|
||||
List<AsnDetail> asnDetailList=asnDetailRepository.findByAsnId(asnDetail.getAsn().getId(),BizStatus.RECEIVING);
|
||||
if (asnDetailList.size()<1){
|
||||
if (asnDetailList.size()<2){
|
||||
Asn asn=asnDetail.getAsn();
|
||||
asn.setStatus(BizStatus.RECEIVED);
|
||||
asnRepository.save(asn);
|
||||
|
|
|
|||
|
|
@ -19,10 +19,11 @@ import com.sun.jna.platform.win32.WinDef;
|
|||
import com.youchain.basicdata.domain.Item;
|
||||
import com.youchain.basicdata.domain.Point;
|
||||
import com.youchain.basicdata.domain.Stock;
|
||||
import com.youchain.businessdata.domain.CountDetail;
|
||||
import com.youchain.businessdata.domain.Inventory;
|
||||
import com.youchain.businessdata.domain.InventoryLog;
|
||||
import com.youchain.businessdata.domain.ItemKey;
|
||||
import com.youchain.basicdata.repository.PointRepository;
|
||||
import com.youchain.businessdata.domain.*;
|
||||
import com.youchain.businessdata.repository.ItemKeyRepository;
|
||||
import com.youchain.businessdata.repository.TaskRepository;
|
||||
import com.youchain.businessdata.service.InventoryLogService;
|
||||
import com.youchain.businessdata.service.dto.*;
|
||||
import com.youchain.modules.system.domain.Dept;
|
||||
import com.youchain.utils.*;
|
||||
|
|
@ -58,8 +59,12 @@ import java.util.LinkedHashMap;
|
|||
public class InventoryServiceImpl implements InventoryService {
|
||||
|
||||
private final InventoryRepository inventoryRepository;
|
||||
private final InventoryLogService inventoryLogService;
|
||||
private final InventoryMapper inventoryMapper;
|
||||
private final EntityManager entityManager;
|
||||
private final ItemKeyRepository itemKeyRepository;
|
||||
private final TaskRepository taskRepository;
|
||||
private final PointRepository pointRepository;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> queryAll(InventoryQueryCriteria criteria, Pageable pageable) {
|
||||
|
|
@ -206,6 +211,39 @@ public class InventoryServiceImpl implements InventoryService {
|
|||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Inventory asnAddInventory(List<Map<String,Object>> taskListMap) {
|
||||
for (int i = 0; i < taskListMap.size(); i++) {
|
||||
Map<String,Object> taskMap=taskListMap.get(i);
|
||||
Double qty=Double.valueOf( taskMap.get("qty")+"");
|
||||
String taskIds=taskMap.get("taskIds")+"";
|
||||
Long ikID=Long.valueOf(taskMap.get("ikID")+"");
|
||||
Long pointId=Long.valueOf(taskMap.get("pointId")+"");
|
||||
Inventory inventory =new Inventory();
|
||||
inventory.setQuantity(qty);
|
||||
ItemKey itemKey=itemKeyRepository.getById(ikID);
|
||||
inventory.setItemKey(itemKey);
|
||||
Point point=pointRepository.getById(pointId);
|
||||
inventory.setPoint(point);
|
||||
inventory.setDept(UserUtils.getDept());
|
||||
inventory.setStatus(BizStatus.OPEN);
|
||||
inventoryRepository.save(inventory);
|
||||
//添加库存日志
|
||||
inventoryLogService.storeInventoryLog(BizStatus.RECEIVING_UP,BizStatus.ADD,itemKey.getPropC3(),itemKey,null,inventory.getPoint(),null,null,0d,inventory.getQuantity(), itemKey.getPropC6(),null,inventory.getId(),"");
|
||||
|
||||
String[] arrTaskIds=taskIds.split(",");
|
||||
for (int j = 0; j < arrTaskIds.length; j++) {
|
||||
Long taskId=Long.valueOf(arrTaskIds[j]+"");
|
||||
Task task =taskRepository.getById(taskId);
|
||||
task.setTaskStatus(BizStatus.RECEIVED);
|
||||
task.setInventory(inventory);
|
||||
taskRepository.save(task);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<Object[]> queryItemStock(){
|
||||
String hql = "select inv.itemKey.item.code,max(inv.itemKey.item.name),count(inv.id) " +
|
||||
" from Inventory inv where 1=1 and inv.quantity>0 group by inv.itemKey.item.code order by inv.itemKey.item.code";
|
||||
|
|
|
|||
|
|
@ -196,7 +196,6 @@ public class PickDetailServiceImpl implements PickDetailService {
|
|||
task.setInvStatus(inv.getStatus());
|
||||
task.setTaskStatus(BizStatus.OPEN);
|
||||
task.setPlanQty(allocateQty);
|
||||
task.setInvId(inv.getId());
|
||||
task.setDept(dept);
|
||||
task.setAgvTask(agvTask);
|
||||
taskRepository.save(task);
|
||||
|
|
@ -269,7 +268,6 @@ public class PickDetailServiceImpl implements PickDetailService {
|
|||
task.setInvStatus(inv.getStatus());
|
||||
task.setTaskStatus(BizStatus.OPEN);
|
||||
task.setPlanQty(inv.getQuantity());
|
||||
task.setInvId(inv.getId());
|
||||
task.setDept(dept);
|
||||
task.setAgvTask(agvTask);
|
||||
task.setTaskType(BizStatus.PICK);
|
||||
|
|
@ -335,7 +333,6 @@ public class PickDetailServiceImpl implements PickDetailService {
|
|||
task.setInvStatus(inv.getStatus());
|
||||
task.setTaskStatus(BizStatus.OPEN);
|
||||
task.setPlanQty(inv.getQuantity());
|
||||
task.setInvId(inv.getId());
|
||||
task.setDept(dept);
|
||||
task.setAgvTask(agvTask);
|
||||
task.setTaskType(BizStatus.PICK);
|
||||
|
|
@ -353,7 +350,7 @@ public class PickDetailServiceImpl implements PickDetailService {
|
|||
List<Task> Tasks = taskRepository.getPickNotAllTask(id);
|
||||
for (Task task : Tasks) {
|
||||
//根据Taskz找到对应的库存
|
||||
Inventory inv = inventoryRepository.findById(task.getInvId()).get();
|
||||
Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get();
|
||||
inv.setQueuedQty(inv.getQueuedQty() - pd.getAllocatedQty());
|
||||
inventoryRepository.save(inv);
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
|
||||
import java.security.PrivateKey;
|
||||
import java.util.*;
|
||||
|
|
@ -172,7 +173,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
task.setMoveQty(pickedQuantity);
|
||||
task.setTaskStatus(BizStatus.FINISH);
|
||||
taskRepository.save(task);
|
||||
Inventory inv = inventoryRepository.findById(task.getInvId()).get();
|
||||
Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get();
|
||||
if (inv != null) {
|
||||
ItemKey itemKey = inv.getItemKey();
|
||||
Item item = itemKey.getItem();
|
||||
|
|
@ -216,7 +217,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
TaskDto taskDto = findById(taskId);
|
||||
Task task = taskMapper.toEntity(taskDto);//Dto转实体
|
||||
PickDetail pickDetail = task.getPickDetail();
|
||||
Inventory inv = inventoryRepository.findById(task.getInvId()).get();
|
||||
Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get();
|
||||
if (inv != null) {
|
||||
//退回库存
|
||||
double srcQty=inv.getQueuedQty();
|
||||
|
|
@ -267,11 +268,6 @@ public class TaskServiceImpl implements TaskService {
|
|||
return l;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Task> getAgvTaskList(Integer id) {
|
||||
return taskRepository.getAgvTaskList(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Task> findByPointCode(Long pointId) {
|
||||
String hql=" from Task t where t.dstPoint.id="+pointId+" and t.moveQty=0 ";
|
||||
|
|
@ -281,6 +277,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ApiResult readRfid(String rfid) {
|
||||
String[] rfids=rfid.split("\\|");
|
||||
String itemCode=rfids[0]+"";
|
||||
|
|
@ -288,19 +285,24 @@ public class TaskServiceImpl implements TaskService {
|
|||
String propC2=rfids[2]+"";
|
||||
String propC3=rfids[3]+"";
|
||||
String propC4=rfids[4]+"";
|
||||
String propC5=rfids[5]+"";
|
||||
String propC5=rfids[5]+"";//16进制
|
||||
StringBuffer propC6=new StringBuffer();
|
||||
for (int i = 6; i < rfids.length; i++) {
|
||||
if (propC6.length()<1){
|
||||
propC6.append(rfids[i]);
|
||||
int decimalNumber = Integer.parseInt(rfids[i], 16);
|
||||
int decimalMin = Integer.parseInt("0001", 16);
|
||||
int decimalMax = Integer.parseInt("EA60", 16);
|
||||
if (decimalNumber>=decimalMin&&decimalNumber<=decimalMax){
|
||||
if (propC6.length()<1){
|
||||
propC6.append(rfids[i]);
|
||||
}else {
|
||||
propC6.append(",");
|
||||
propC6.append(rfids[i]);
|
||||
}
|
||||
}else {
|
||||
propC6.append(",");
|
||||
propC6.append(rfids[i]);
|
||||
System.out.println("无效RFID:"+rfids[i]);
|
||||
}
|
||||
}
|
||||
if (rfids.length-6!=Integer.valueOf(propC5)){
|
||||
return ApiResult.result(500, "流水号数量和供货数量不一致", "");
|
||||
}
|
||||
|
||||
Item item=itemRepository.findByCode(itemCode);
|
||||
if (item==null){
|
||||
return ApiResult.result(500, "没有物料", "");
|
||||
|
|
@ -318,14 +320,20 @@ public class TaskServiceImpl implements TaskService {
|
|||
};
|
||||
|
||||
ItemKey itemKey=itemKeyService.getItemKey(item, propC1, propC2,propC3,propC4,propC5,propC6.toString());
|
||||
for (int i = 6; i < rfids.length; i++) {
|
||||
//获取流水号
|
||||
String[] lsh=itemKey.getPropC6().split(",");
|
||||
if (lsh.length!=itemKey.getIntPropC5()){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return ApiResult.result(500, "流水号数量和供货数量不一致", "");
|
||||
}
|
||||
for (int i = 0; i < lsh.length; i++) {
|
||||
Task task=new Task();
|
||||
task.setItemKey(itemKey);
|
||||
task.setPlanQty(1d);
|
||||
task.setDept(UserUtils.getDept());
|
||||
task.setTaskStatus(BizStatus.RECEIVING);
|
||||
task.setBeSkip(1);
|
||||
task.setPutCode(rfids[i]);
|
||||
task.setPutCode(lsh[i]);
|
||||
task.setBillCode(propC3);
|
||||
task.setTaskType(BizStatus.ASN);
|
||||
Point startPoint=pointRepository.findByTypeAndArea(BaseStatus.PLATFORM,item.getGoodType());
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ public class UrlApi {
|
|||
/**
|
||||
* 料箱任务下发
|
||||
*/
|
||||
public static String submitMission = "http://10.177.202.230:10870/interfaces/api/amr/submitMission";
|
||||
public static String submitMission = "http://localhost:8000/interfaces/api/amr/submitMission";
|
||||
|
||||
/**
|
||||
* 容器入场
|
||||
|
|
|
|||
Loading…
Reference in New Issue