no message

main
bbl\baobl 2024-03-08 10:42:41 +08:00
parent ccb171e86c
commit 634de44a0b
23 changed files with 241 additions and 834 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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;

View File

@ -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`")

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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);
/**
* 线

View File

@ -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 "

View File

@ -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 IDTask
* @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);
/**
*

View File

@ -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);
}
}*/
}
/**

View File

@ -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());

View File

@ -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);
}
}

View File

@ -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);
/**

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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()){
//入库

View File

@ -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);

View File

@ -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";

View File

@ -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);

View File

@ -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());

View File

@ -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";
/**
*