diff --git a/youchain-common/src/main/java/com/youchain/test/TestController.java b/youchain-common/src/main/java/com/youchain/test/TestController.java new file mode 100644 index 0000000..213a163 --- /dev/null +++ b/youchain-common/src/main/java/com/youchain/test/TestController.java @@ -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 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 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 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); + } +} diff --git a/youchain-system/src/main/java/com/youchain/appupdate/rest/SmallAppController.java b/youchain-system/src/main/java/com/youchain/appupdate/rest/SmallAppController.java index b37c9f8..6c88934 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/rest/SmallAppController.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/rest/SmallAppController.java @@ -132,58 +132,6 @@ public class SmallAppController { return new ResponseEntity<>(ApiResult.success(OK.value(), "绑定成功!", ""), HttpStatus.OK); } - @PostMapping("/unBindStock") - @Log("料箱解绑-小件") - @ApiOperation("料箱解绑-小件") - @AnonymousAccess - public ResponseEntity 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 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 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 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 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 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); - } - - } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/AgvTask.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/AgvTask.java index b560a08..c7d0fe5 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/AgvTask.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/AgvTask.java @@ -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) diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/Inventory.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/Inventory.java index a15084d..df98bc2 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/Inventory.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/Inventory.java @@ -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 tasks; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java index b915558..2cc489c 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java @@ -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`") diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java index 4408cd7..2007276 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java @@ -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)); } + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java index d56b843..7f99fed 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java @@ -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; } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java index 9bae964..1f242d7 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java @@ -67,6 +67,9 @@ public interface AgvTaskRepository extends JpaRepository, 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 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 findByRptAgvTask(String startPoint,String endPoint); /** * 根据线边分组 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/AsnDetailRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/AsnDetailRepository.java index df4ac20..8629117 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/AsnDetailRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/AsnDetailRepository.java @@ -31,7 +31,7 @@ import java.util.Map; public interface AsnDetailRepository extends JpaRepository, JpaSpecificationExecutor { @Query("select d from AsnDetail d where d.asn.id=?1 and d.lineNo=?2") List 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 " diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java index fd1f405..276cacc 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java @@ -32,6 +32,8 @@ import java.util.Map; public interface TaskRepository extends JpaRepository, JpaSpecificationExecutor { @Query(value = "SELECT u.id FROM data_task u WHERE u.asn_detail_id=?1", nativeQuery = true) public List> 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> findByAgvTask(Integer agvTaskId); /** * 根据出库单明细查询未完成的Task集合 @@ -52,11 +54,10 @@ public interface TaskRepository extends JpaRepository, JpaSpecificat /** * 根据AGV ID查询对应Task集合 - * @param id * @return */ - @Query(value = "SELECT * FROM data_task t WHERE t.agv_task_id=?1 ", nativeQuery = true) - List getAgvTaskList(Integer id); + @Query(value = "SELECT t FROM Task t WHERE t.agvTask.id=?1 and t.taskStatus=?2") + List getAgvTaskList(Integer agvTaskId,String taskStatus); /** * 根据 收货明细序号 进行删除数据 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/AgvTaskController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/AgvTaskController.java index 5d0be04..3b907e1 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/AgvTaskController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/AgvTaskController.java @@ -101,21 +101,23 @@ public class AgvTaskController { @ApiOperation("AGV搬运任务回调接口") @AnonymousAccess public ResponseEntity 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); - } + }*/ } /** diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java index 793a71f..72753b3 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java @@ -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()); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java index 3aa7767..3d4f5da 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java @@ -53,68 +53,4 @@ public class KMReSController { private final StockRepository stockRepository; - @PostMapping("/missionStateCallback") - @Log("KMReS接口回调") - @ApiOperation("KMReS接口回调") - @AnonymousAccess - public ResponseEntity 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 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 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 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); - } } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index 7a74308..a68ac09 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -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); /** diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryLogService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryLogService.java index 1189f7f..4a0953a 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryLogService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryLogService.java @@ -84,5 +84,23 @@ public interface InventoryLogService { */ void download(List 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); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryService.java index 805de33..9478ce0 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/InventoryService.java @@ -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 queryInventory(Stock stock); List getInvForPlan(String type,Long areaId,Long itemId,Long deptId); + + /** + * 入库生成库存 + * @param taskListMap 收货任务总结 + * @return + */ + Inventory asnAddInventory(List> taskListMap); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java index 668af69..b27e4a3 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java @@ -127,8 +127,6 @@ public interface TaskService { */ List queryTaskApp(IPTask t); - List getAgvTaskList(Integer id); - List findByPointCode(Long boxId); ApiResult readRfid(String rfid); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index e28d704..4feaddf 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -164,72 +164,12 @@ public class AgvTaskServiceImpl implements AgvTaskService { */ @Override public synchronized String sendAgvTaskImpl(AgvTask agvTasks) { - JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - Map 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 tasks=taskRepository.getAgvTaskList(agvTask.getId()); +// List tasks=taskRepository.getAgvTaskList(agvTask.getId(),BizStatus.ASN); + List> 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 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 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 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()){ //入库 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AsnDetailServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AsnDetailServiceImpl.java index 1d2c8f1..f5df4ca 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AsnDetailServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AsnDetailServiceImpl.java @@ -270,7 +270,7 @@ public class AsnDetailServiceImpl implements AsnDetailService { if (asnDetail.getOrderQty()<=asnDetail.getReceivedQty()){ asnDetail.setStatus(BizStatus.RECEIVED); List 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); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java index b73e1fc..6a683db 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java @@ -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 queryAll(InventoryQueryCriteria criteria, Pageable pageable) { @@ -206,6 +211,39 @@ public class InventoryServiceImpl implements InventoryService { return list; } + @Override + @Transactional + public Inventory asnAddInventory(List> taskListMap) { + for (int i = 0; i < taskListMap.size(); i++) { + Map 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 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"; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java index 4f49036..fe37e40 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java @@ -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 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); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java index 69b4d5c..eb52b88 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java @@ -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 getAgvTaskList(Integer id) { - return taskRepository.getAgvTaskList(id); - } - @Override public List 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()); diff --git a/youchain-system/src/main/java/com/youchain/utils/UrlApi.java b/youchain-system/src/main/java/com/youchain/utils/UrlApi.java index f47d4f9..3bcdd73 100644 --- a/youchain-system/src/main/java/com/youchain/utils/UrlApi.java +++ b/youchain-system/src/main/java/com/youchain/utils/UrlApi.java @@ -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"; /** * 容器入场