Compare commits
	
		
			No commits in common. "e931cb13e569084d44298d53683f71a19038e7a0" and "2862fdef4fc6a380e172207a3f52d1d79b23f0d4" have entirely different histories. 
		
	
	
		
			e931cb13e5
			...
			2862fdef4f
		
	
		| 
						 | 
				
			
			@ -7,7 +7,6 @@ import org.springframework.http.HttpStatus;
 | 
			
		|||
public class ApiResult {
 | 
			
		||||
    private Object data;//数据
 | 
			
		||||
    private String msg;//内容
 | 
			
		||||
    private String notify;//样式
 | 
			
		||||
    private int code;//编码
 | 
			
		||||
 | 
			
		||||
    public static ApiResult fail() {
 | 
			
		||||
| 
						 | 
				
			
			@ -37,11 +36,6 @@ public class ApiResult {
 | 
			
		|||
 | 
			
		||||
    public static ApiResult result(int code, String msg, Object data) {
 | 
			
		||||
        ApiResult rs = new ApiResult();
 | 
			
		||||
        if (code==200){
 | 
			
		||||
            rs.setNotify("success");
 | 
			
		||||
        }else {
 | 
			
		||||
            rs.setNotify("error");
 | 
			
		||||
        }
 | 
			
		||||
        rs.setCode(code);
 | 
			
		||||
        rs.setMsg(msg);
 | 
			
		||||
        rs.setData(data);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,10 +0,0 @@
 | 
			
		|||
package com.youchain.Netty.model;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
public class Jb {
 | 
			
		||||
    @ApiModelProperty(value = "点位编码")
 | 
			
		||||
    String pointCode;//点位编码
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,77 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 *  Copyright 2019-2020 Zheng Jie
 | 
			
		||||
 *
 | 
			
		||||
 *  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 *  you may not use this file except in compliance with the License.
 | 
			
		||||
 *  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *  http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 *  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 *  See the License for the specific language governing permissions and
 | 
			
		||||
 *  limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.youchain.Netty.rest;
 | 
			
		||||
 | 
			
		||||
import com.youchain.Netty.model.Jb;
 | 
			
		||||
import com.youchain.annotation.AnonymousAccess;
 | 
			
		||||
import com.youchain.annotation.Log;
 | 
			
		||||
import com.youchain.basicdata.domain.Point;
 | 
			
		||||
import com.youchain.basicdata.repository.PointRepository;
 | 
			
		||||
import com.youchain.exception.handler.ApiResult;
 | 
			
		||||
import com.youchain.modules.mnt.domain.App;
 | 
			
		||||
import com.youchain.modules.mnt.service.AppService;
 | 
			
		||||
import com.youchain.modules.mnt.service.dto.AppQueryCriteria;
 | 
			
		||||
import com.youchain.utils.BaseStatus;
 | 
			
		||||
import com.youchain.utils.BizStatus;
 | 
			
		||||
import io.swagger.annotations.Api;
 | 
			
		||||
import io.swagger.annotations.ApiOperation;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import org.springframework.data.domain.Pageable;
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @author zhanghouying
 | 
			
		||||
* @date 2019-08-24
 | 
			
		||||
*/
 | 
			
		||||
@RestController
 | 
			
		||||
@RequiredArgsConstructor
 | 
			
		||||
@Api(tags = "合肥暖通PDA")
 | 
			
		||||
@RequestMapping("/api/pdaHvac")
 | 
			
		||||
public class PdaHvacController {
 | 
			
		||||
    private final PointRepository pointRepository;
 | 
			
		||||
    @Log("解绑备货位")
 | 
			
		||||
    @ApiOperation("解绑备货位")
 | 
			
		||||
    @PostMapping(value = "/jb")
 | 
			
		||||
    @AnonymousAccess
 | 
			
		||||
    public ResponseEntity<Object> Jb(@RequestBody Jb jb){
 | 
			
		||||
        ApiResult apiResult=ApiResult.fail(200,"解绑成功",null);
 | 
			
		||||
        Point point = pointRepository.findByCode(jb.getPointCode());
 | 
			
		||||
        if (point!=null){
 | 
			
		||||
            if (!point.getStatus().equals(BaseStatus.USED)) {
 | 
			
		||||
                apiResult=ApiResult.fail(400,"库位未占用",null);
 | 
			
		||||
            }
 | 
			
		||||
            else if (!point.getArea().getCode().equals("出库接驳口")){
 | 
			
		||||
                apiResult=ApiResult.fail(400,"库位不在出库接驳点",null);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                point.setStatus(BaseStatus.FREE);
 | 
			
		||||
                pointRepository.save(point);
 | 
			
		||||
            }
 | 
			
		||||
        }else {
 | 
			
		||||
            apiResult=ApiResult.fail(400,"未查询到库位",null);
 | 
			
		||||
        }
 | 
			
		||||
        return new ResponseEntity<>(apiResult,apiResult.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
package com.youchain.basicdata.model;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
public class YhWcModel {
 | 
			
		||||
    @ApiModelProperty(value = "工单编码")
 | 
			
		||||
    String gdCode;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ public interface PointRepository extends JpaRepository<Point, Long>, JpaSpecific
 | 
			
		|||
    public List<Map<String, String>> getKyPointList();
 | 
			
		||||
    @Query(value = "SELECT p FROM Point p WHERE p.code=?1", nativeQuery = false)
 | 
			
		||||
    Point findByCode(String code);
 | 
			
		||||
    @Query(value = "SELECT p FROM Point p WHERE p.area.name=?1 and p.status=?2 and p.enabled=true", nativeQuery = false)
 | 
			
		||||
    @Query(value = "SELECT p FROM Point p WHERE p.area.name=?1 and p.status=?2 and p.enabled=1", nativeQuery = false)
 | 
			
		||||
    List<Point> findByAreaAndStatus(String areaName,String status);
 | 
			
		||||
 | 
			
		||||
    /** 库位信息化看板*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -185,20 +185,6 @@ public class PointController {
 | 
			
		|||
    public ResponseEntity<Object> queryPoint(PointQueryCriteria criteria, Pageable pageable) {
 | 
			
		||||
        return new ResponseEntity<>(pointService.queryAll(criteria, pageable), HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
    @PostMapping("/clearCk")
 | 
			
		||||
    @ApiOperation("清空备货位")
 | 
			
		||||
    @AnonymousAccess
 | 
			
		||||
    public ResponseEntity<Object> clearCk() {
 | 
			
		||||
        /* 清空出库接驳口*/
 | 
			
		||||
        List<Point> pointList = pointRepository.findByAreaAndStatus("出库接驳口", BaseStatus.USED);
 | 
			
		||||
        for (Point p : pointList) {
 | 
			
		||||
            p.setStatus(BaseStatus.FREE);
 | 
			
		||||
            pointRepository.save(p);
 | 
			
		||||
        }
 | 
			
		||||
        ApiResult apiResult=ApiResult.fail(200,"操作成功",null);
 | 
			
		||||
        return new ResponseEntity<>(apiResult, apiResult.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @GetMapping(value = "/queryPointList")
 | 
			
		||||
    @ApiOperation("下拉查询点位")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -146,13 +146,6 @@ public class PointServiceImpl implements PointService {
 | 
			
		|||
            map.put("外部编码", point.getCode());
 | 
			
		||||
            map.put("名称", point.getName());
 | 
			
		||||
            map.put("状态", point.getStatus());
 | 
			
		||||
            String types="";
 | 
			
		||||
            if (point.getType().equals(BaseStatus.STORAGE)) {
 | 
			
		||||
                types = "存储点";
 | 
			
		||||
            } else if (point.getType().equals(BaseStatus.BOX)) {
 | 
			
		||||
                types = "线边点位";
 | 
			
		||||
            }
 | 
			
		||||
            map.put("存储类型", types);
 | 
			
		||||
            map.put("描述", point.getDescription());
 | 
			
		||||
            map.put("库区", point.getArea().getName());
 | 
			
		||||
            map.put("地标码", point.getBeatCode());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,8 +108,8 @@ public class Inventory  extends BaseEntity implements Serializable {
 | 
			
		|||
    private String description;
 | 
			
		||||
 | 
			
		||||
    @Column(name = "`be_lock`")
 | 
			
		||||
    @ApiModelProperty(value = "检验")
 | 
			
		||||
    private Boolean beLock=true;
 | 
			
		||||
    @ApiModelProperty(value = "是否锁定")
 | 
			
		||||
    private Boolean beLock=false;
 | 
			
		||||
 | 
			
		||||
    @Column(name = "`be_reject`")
 | 
			
		||||
    @ApiModelProperty(value = "是否不良品")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,5 @@ import java.util.List;
 | 
			
		|||
 * @date 2023-08-22
 | 
			
		||||
 **/
 | 
			
		||||
public interface InventoryRepository extends JpaRepository<Inventory, Long>, JpaSpecificationExecutor<Inventory> {
 | 
			
		||||
    @Query(value = "select inv from Inventory inv where inv.billCode=?1 ")
 | 
			
		||||
    List<Inventory> findByBillCode(String billCode);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,6 +80,4 @@ public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificat
 | 
			
		|||
     */
 | 
			
		||||
    @Query(value = "select * from data_task a where a.dst_point_code like 'MA1151-QHL%' and  a.create_time > :time", nativeQuery = true)
 | 
			
		||||
    List<Task> queryInQHALLData(String time);
 | 
			
		||||
 | 
			
		||||
    List<Task> findByTaskStatus(String inspect);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -3,8 +3,6 @@ package com.youchain.businessdata.rest;
 | 
			
		|||
import com.youchain.annotation.Log;
 | 
			
		||||
import com.youchain.annotation.AnonymousAccess;
 | 
			
		||||
import com.youchain.appupdate.inputJson.MissionStateCallback;
 | 
			
		||||
import com.youchain.basicdata.domain.Point;
 | 
			
		||||
import com.youchain.basicdata.repository.PointRepository;
 | 
			
		||||
import com.youchain.businessdata.domain.AgvTask;
 | 
			
		||||
import com.youchain.businessdata.domain.Inventory;
 | 
			
		||||
import com.youchain.businessdata.domain.ItemKey;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +22,6 @@ import com.youchain.businessdata.service.dto.AgvTaskDto;
 | 
			
		|||
import com.youchain.businessdata.service.dto.OrderDto;
 | 
			
		||||
import com.youchain.exception.handler.ApiResult;
 | 
			
		||||
import com.youchain.service.LogService;
 | 
			
		||||
import com.youchain.utils.BaseStatus;
 | 
			
		||||
import com.youchain.utils.BizStatus;
 | 
			
		||||
import com.youchain.utils.UrlApi;
 | 
			
		||||
import io.swagger.annotations.Api;
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +49,6 @@ public class KMReSController {
 | 
			
		|||
 | 
			
		||||
    private final AgvTaskService agvTaskService;
 | 
			
		||||
    private final AgvTaskRepository agvTaskRepository;
 | 
			
		||||
    private final PointRepository pointRepository;
 | 
			
		||||
    private final TaskRepository taskRepository;
 | 
			
		||||
    private final InventoryRepository inventoryRepository;
 | 
			
		||||
    private final TaskService taskService;
 | 
			
		||||
| 
						 | 
				
			
			@ -84,55 +80,10 @@ public class KMReSController {
 | 
			
		|||
            } else if (agvTask.getType().equals(BizStatus.ASN)) {
 | 
			
		||||
                //入库
 | 
			
		||||
                asnTask(id, missionStatus,slotCode);
 | 
			
		||||
            } else if (agvTask.getType().equals(BizStatus.INV)) {
 | 
			
		||||
                invTask(id, missionStatus,slotCode);
 | 
			
		||||
            } else if (agvTask.getType().equals(BizStatus.INV_BACK)) {
 | 
			
		||||
                invBackTask(id, missionStatus,slotCode);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* 验货 返空任务完成*/
 | 
			
		||||
    private void invBackTask(String id, String missionStatus, String slotCode) {
 | 
			
		||||
        if (missionStatus.equals(BizStatus.PICKER_RECEIVE)) {
 | 
			
		||||
            /* 清空起点*/
 | 
			
		||||
            Point point=pointRepository.findByCode(slotCode);
 | 
			
		||||
            point.setStatus(BaseStatus.FREE);
 | 
			
		||||
            pointRepository.save(point);
 | 
			
		||||
        }else
 | 
			
		||||
        if (missionStatus.equals(BizStatus.PICKER_SEND)) {
 | 
			
		||||
            AgvTask agvTask=agvTaskRepository.getById(Integer.valueOf(id));
 | 
			
		||||
            Point point=pointRepository.findByCode(slotCode);
 | 
			
		||||
            if (point!=null){
 | 
			
		||||
                /* 修改任务状态*/
 | 
			
		||||
                Task task = getFirstTask(agvTask.getId());
 | 
			
		||||
                task.setTaskStatus(BizStatus.FINISH);
 | 
			
		||||
                taskRepository.save(task);
 | 
			
		||||
                /* 清除库存占用*/
 | 
			
		||||
                Inventory inventory=inventoryRepository.getById(task.getInvId());
 | 
			
		||||
                inventory.setQueuedQty(0d);
 | 
			
		||||
                inventoryRepository.save(inventory);
 | 
			
		||||
            }
 | 
			
		||||
            agvTask.setStatus(BizStatus.FINISH);
 | 
			
		||||
            agvTaskRepository.save(agvTask);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void invTask(String id, String missionStatus, String slotCode) {
 | 
			
		||||
        if (missionStatus.equals(BizStatus.PICKER_SEND)) {
 | 
			
		||||
            AgvTask agvTask=agvTaskRepository.getById(Integer.valueOf(id));
 | 
			
		||||
            Point point=pointRepository.findByCode(slotCode);
 | 
			
		||||
            if (point!=null){
 | 
			
		||||
                Task task = getFirstTask(agvTask.getId());
 | 
			
		||||
                task.setTaskStatus(BizStatus.INSPECT);
 | 
			
		||||
                task.setMoveQty(task.getPlanQty());
 | 
			
		||||
                taskRepository.save(task);
 | 
			
		||||
            }
 | 
			
		||||
            agvTask.setStatus(BizStatus.FINISH);
 | 
			
		||||
            agvTaskRepository.save(agvTask);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void asnTask(String id, String missionStatus, String slotCode) {
 | 
			
		||||
        //执行第一个任务后 可以继续执行第二个任务 并携带第一个任务的返回值 第二个任务执行完没有返回值
 | 
			
		||||
        AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,29 +22,22 @@ import com.youchain.annotation.AnonymousAccess;
 | 
			
		|||
import com.youchain.annotation.Log;
 | 
			
		||||
import com.youchain.basicdata.domain.Box;
 | 
			
		||||
import com.youchain.basicdata.domain.Item;
 | 
			
		||||
import com.youchain.basicdata.domain.Point;
 | 
			
		||||
import com.youchain.basicdata.model.YhWcModel;
 | 
			
		||||
import com.youchain.basicdata.repository.PointRepository;
 | 
			
		||||
import com.youchain.basicdata.service.ItemService;
 | 
			
		||||
import com.youchain.businessdata.ReturnJson.RPTaskList;
 | 
			
		||||
import com.youchain.businessdata.domain.AgvTask;
 | 
			
		||||
import com.youchain.businessdata.domain.Inventory;
 | 
			
		||||
import com.youchain.businessdata.domain.PickDetail;
 | 
			
		||||
import com.youchain.businessdata.domain.Task;
 | 
			
		||||
import com.youchain.businessdata.inputJson.IPPickDetail;
 | 
			
		||||
import com.youchain.businessdata.inputJson.IScanPut;
 | 
			
		||||
import com.youchain.businessdata.repository.AgvTaskRepository;
 | 
			
		||||
import com.youchain.businessdata.repository.InventoryRepository;
 | 
			
		||||
import com.youchain.businessdata.repository.TaskRepository;
 | 
			
		||||
import com.youchain.businessdata.service.*;
 | 
			
		||||
import com.youchain.businessdata.service.InventoryLogService;
 | 
			
		||||
import com.youchain.businessdata.service.PickDetailService;
 | 
			
		||||
import com.youchain.businessdata.service.TaskService;
 | 
			
		||||
import com.youchain.businessdata.service.dto.PickDetailDto;
 | 
			
		||||
import com.youchain.businessdata.service.dto.PickDetailQueryCriteria;
 | 
			
		||||
import com.youchain.businessdata.service.dto.TaskDto;
 | 
			
		||||
import com.youchain.businessdata.service.dto.TaskQueryCriteria;
 | 
			
		||||
import com.youchain.exception.BadRequestException;
 | 
			
		||||
import com.youchain.exception.handler.ApiError;
 | 
			
		||||
import com.youchain.exception.handler.ApiResult;
 | 
			
		||||
import com.youchain.utils.BaseStatus;
 | 
			
		||||
import com.youchain.utils.BizStatus;
 | 
			
		||||
import com.youchain.utils.HttpUtils;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
| 
						 | 
				
			
			@ -82,11 +75,6 @@ public class PickDetailController {
 | 
			
		|||
 | 
			
		||||
    private final PickDetailService pickDetailService;
 | 
			
		||||
    private final TaskService taskService;
 | 
			
		||||
    private final TaskRepository taskRepository;
 | 
			
		||||
    private final AgvTaskService agvTaskService;
 | 
			
		||||
    private final AgvTaskRepository agvTaskRepository;
 | 
			
		||||
    private final PointRepository pointRepository;
 | 
			
		||||
    private final InventoryRepository inventoryRepository;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Log("导出数据")
 | 
			
		||||
| 
						 | 
				
			
			@ -184,83 +172,6 @@ public class PickDetailController {
 | 
			
		|||
        List<RPTaskList> t=taskService.queryTaskApp(null);
 | 
			
		||||
        return new ResponseEntity<>(t,HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
    @PostMapping("/yhWc")
 | 
			
		||||
    @Log("验货完成")
 | 
			
		||||
    @ApiOperation("验货完成")
 | 
			
		||||
    @AnonymousAccess
 | 
			
		||||
    public ResponseEntity<Object>  yhWc(@RequestBody YhWcModel yhWcModel){
 | 
			
		||||
        List<Inventory> inventoryList=inventoryRepository.findByBillCode(yhWcModel.getGdCode());
 | 
			
		||||
        if (inventoryList.size()<1){
 | 
			
		||||
            throw new BadRequestException(HttpStatus.INTERNAL_SERVER_ERROR, "工单号错误,未查询到库存");
 | 
			
		||||
        }else {
 | 
			
		||||
            /* 更新检验状态*/
 | 
			
		||||
            for (Inventory inventory:inventoryList){
 | 
			
		||||
                if (inventory.getBeLock()==true){
 | 
			
		||||
                    inventory.setBeLock(false);
 | 
			
		||||
                    inventoryRepository.save(inventory);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            /* 验货返空*/
 | 
			
		||||
            List<Task> taskList=taskRepository.findByTaskStatus(BizStatus.INSPECT);
 | 
			
		||||
            for (Task task:taskList){
 | 
			
		||||
                /* 生成搬运任务*/
 | 
			
		||||
                AgvTask agvTask = new AgvTask(BizStatus.INV_BACK, task.getSrcStock().getCode(), task.getDstPoint().getCode(), task.getSrcPoint().getCode(), BizStatus.OPEN, "PICKER_MOVE");
 | 
			
		||||
                agvTaskRepository.save(agvTask);
 | 
			
		||||
                /* 修改Task状态*/
 | 
			
		||||
                task.setTaskStatus(BizStatus.RETURN);
 | 
			
		||||
                task.setAgvTask(agvTask);
 | 
			
		||||
                taskRepository.save(task);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /* 检测验货中的物料-确认返空*/
 | 
			
		||||
        ApiResult apiResult=ApiResult.fail(200,"验货完成",null);
 | 
			
		||||
        return new ResponseEntity<>(apiResult,apiResult.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
    @PostMapping("/yhFk")
 | 
			
		||||
    @Log("验货-返空")
 | 
			
		||||
    @ApiOperation("验货-返空")
 | 
			
		||||
    @AnonymousAccess
 | 
			
		||||
    public ResponseEntity<Object>  fk(@RequestBody YhWcModel yhWcModel){
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        ApiResult apiResult=ApiResult.fail(200,"验货完成",null);
 | 
			
		||||
        return new ResponseEntity<>(apiResult,apiResult.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
    @PostMapping("/hjYh")
 | 
			
		||||
    @Log("呼叫验货")
 | 
			
		||||
    @ApiOperation("呼叫验货")
 | 
			
		||||
    @AnonymousAccess
 | 
			
		||||
    public ResponseEntity<Object>  hjYh(@RequestBody Long[] ids){
 | 
			
		||||
        int a=0;
 | 
			
		||||
        List<Point> pointList = pointRepository.findByAreaAndStatus("验货货架", BaseStatus.FREE);
 | 
			
		||||
        if (ids.length>pointList.size()){
 | 
			
		||||
            throw new BadRequestException(HttpStatus.INTERNAL_SERVER_ERROR, "验货货架,没有库位");
 | 
			
		||||
        }
 | 
			
		||||
        for (Long id:ids){
 | 
			
		||||
            Inventory inventory=inventoryRepository.getById(id);
 | 
			
		||||
            if (inventory.getBeLock()==true&&inventory.getQueuedQty()==0){
 | 
			
		||||
                Point endPoint=pointList.get(a);
 | 
			
		||||
                /* 生成搬运任务*/
 | 
			
		||||
                AgvTask agvTask = new AgvTask(BizStatus.INV, inventory.getStock().getCode(), inventory.getPoint().getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE");
 | 
			
		||||
                agvTaskRepository.save(agvTask);
 | 
			
		||||
                /* 占用库存*/
 | 
			
		||||
                inventory.setQueuedQty(inventory.getQuantity());
 | 
			
		||||
                inventoryRepository.save(inventory);
 | 
			
		||||
                /* 生成Task任务*/
 | 
			
		||||
                Task task = new Task(inventory.getItemKey().getItem(), inventory.getItemKey(), inventory.getBillCode(), BizStatus.INV, null, null, null, null, inventory.getStock()
 | 
			
		||||
                        , inventory.getStock(), inventory.getPoint(), endPoint, inventory.getStock().getCode(), inventory.getStock().getCode(),
 | 
			
		||||
                        inventory.getPoint().getCode(), endPoint.getCode(), null, BizStatus.OPEN, inventory.getQuantity(), null, inventory.getId(), inventory.getDept(), agvTask);
 | 
			
		||||
                taskService.create(task);
 | 
			
		||||
                System.out.println("id:"+id);
 | 
			
		||||
                /* 锁定目标位*/
 | 
			
		||||
                endPoint.setStatus(BaseStatus.USED);
 | 
			
		||||
                pointRepository.save(endPoint);
 | 
			
		||||
                a=a+1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        ApiResult apiResult=ApiResult.fail(200,"呼叫成功,新增"+a+"条搬运任务",null);
 | 
			
		||||
        return new ResponseEntity<>(apiResult,apiResult.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/pickingApp")
 | 
			
		||||
    @Log("APP拣货确认")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,9 +58,7 @@ public class InventoryQueryCriteria{
 | 
			
		|||
    // NOT_EQUAL 不等于
 | 
			
		||||
    @Query(type = Query.Type.NOT_EQUAL)
 | 
			
		||||
    private Double quantity;
 | 
			
		||||
    /** 是否检验*/
 | 
			
		||||
    @Query(type = Query.Type.EQUAL)
 | 
			
		||||
    private Boolean beLock;
 | 
			
		||||
 | 
			
		||||
    @Query(joinName = "stock", propName="code",type = Query.Type.INNER_LIKE)
 | 
			
		||||
    private String stockCode;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -287,14 +287,14 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
			
		|||
 | 
			
		||||
        objMap.put("missionData", missionDataArray);
 | 
			
		||||
        jsonObject.putAll(objMap);
 | 
			
		||||
        String resultJson = "{\n" +
 | 
			
		||||
        /*String resultJson = "{\n" +
 | 
			
		||||
                " \"data\": null,\n" +
 | 
			
		||||
                " \"code\": \"0\",\n" +
 | 
			
		||||
                " \"message\": null,\n" +
 | 
			
		||||
                " \"success\": true\n" +
 | 
			
		||||
                "}";
 | 
			
		||||
//        String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());
 | 
			
		||||
        if (resultJson== null) {
 | 
			
		||||
                "}";*/
 | 
			
		||||
        String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());
 | 
			
		||||
        if (resultJson == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        JSONObject resulObject = JSON.parseObject(resultJson);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -212,7 +212,7 @@ public class InventoryServiceImpl implements InventoryService {
 | 
			
		|||
        if (billCode.isEmpty()) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        String hql = " from Inventory inv where 1=1 and inv.billCode in (:billCode) ";
 | 
			
		||||
        String hql = " from Inventory inv where 1=1 and inv.billCode in (:billCode) and inv.quantity-inv.queuedQty>0 ";
 | 
			
		||||
        Query query = entityManager.createQuery(hql);
 | 
			
		||||
        query.setParameter("billCode", billCode);
 | 
			
		||||
        List<Inventory> list = query.getResultList();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -427,108 +427,97 @@ public class MlsServiceImpl implements MlsService {
 | 
			
		|||
        if (inventoryListFuture.join().isEmpty()) {
 | 
			
		||||
            throw new RuntimeException("无库存信息!");
 | 
			
		||||
        }
 | 
			
		||||
        List<String> errorMsgList = new ArrayList<>();
 | 
			
		||||
        inventoryListFuture.thenAccept((result) -> {
 | 
			
		||||
            //目标点
 | 
			
		||||
        try {
 | 
			
		||||
            inventoryListFuture.thenAccept((result) -> {
 | 
			
		||||
                //目标点
 | 
			
		||||
            /*Point endPoint = redisObjectUtils.getObjectFromCache("ckjbk", () -> pointService.findByCode(null, BaseStatus.FREE, null, "出库接驳口", null),
 | 
			
		||||
                    "系统无此点位!");*/
 | 
			
		||||
 | 
			
		||||
            List<Inventory> inventoryToUpdate = new ArrayList<>();
 | 
			
		||||
            List<PickDetail> pickDetailToCreate = new ArrayList<>();
 | 
			
		||||
            List<AgvTask> agvTaskToCreate = new ArrayList<>();
 | 
			
		||||
            List<Task> taskToCreate = new ArrayList<>();
 | 
			
		||||
            for (Inventory inv : result) {
 | 
			
		||||
                /* 按顺序获取出库接驳点*/
 | 
			
		||||
                Point endPoint;
 | 
			
		||||
                List<Point> pointList = pointRepository.findByAreaAndStatus("出库接驳口", BaseStatus.FREE);
 | 
			
		||||
                if (pointList.size() < 1) {
 | 
			
		||||
                    errorMsgList.add(inv.getItemKey().getPropC1() + "标签分配无空闲备货位!");
 | 
			
		||||
                    continue;
 | 
			
		||||
                    /* 出库接驳口无空闲库位,更新状态重新分配*/
 | 
			
		||||
                List<Inventory> inventoryToUpdate = new ArrayList<>();
 | 
			
		||||
                List<PickDetail> pickDetailToCreate = new ArrayList<>();
 | 
			
		||||
                List<AgvTask> agvTaskToCreate = new ArrayList<>();
 | 
			
		||||
                List<Task> taskToCreate = new ArrayList<>();
 | 
			
		||||
                for (Inventory inv : result) {
 | 
			
		||||
                    /* 按顺序获取出库接驳点*/
 | 
			
		||||
                    Point endPoint;
 | 
			
		||||
                    List<Point> pointList = pointRepository.findByAreaAndStatus("出库接驳口", BaseStatus.FREE);
 | 
			
		||||
                    if (pointList.size() < 1) {
 | 
			
		||||
                        throw new RuntimeException("无空闲出库接驳口!");
 | 
			
		||||
                        /* 出库接驳口无空闲库位,更新状态重新分配*/
 | 
			
		||||
                    /*pointList = pointRepository.findByAreaAndStatus("出库接驳口", BaseStatus.USED);
 | 
			
		||||
                    for (Point p : pointList) {
 | 
			
		||||
                        p.setStatus(BaseStatus.FREE);
 | 
			
		||||
                        pointRepository.save(p);
 | 
			
		||||
                    }*/
 | 
			
		||||
                }
 | 
			
		||||
                if (inv.getBeLock()==true&&BaseCode.PICK_YH_QR.equals("1")){
 | 
			
		||||
                    errorMsgList.add(inv.getItemKey().getPropC1() + "库存未验货!");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (inv.getQueuedQty()>0){
 | 
			
		||||
                    errorMsgList.add(inv.getItemKey().getPropC1() + "库存已被占用!");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                endPoint = pointList.get(0);
 | 
			
		||||
                endPoint.setStatus(BaseStatus.USED);
 | 
			
		||||
                pointRepository.save(endPoint);
 | 
			
		||||
                    }
 | 
			
		||||
                    endPoint = pointList.get(0);
 | 
			
		||||
                    endPoint.setStatus(BaseStatus.USED);
 | 
			
		||||
                    pointRepository.save(endPoint);
 | 
			
		||||
 | 
			
		||||
                //根据库存信息生成叫料任务
 | 
			
		||||
                Stock stock = inv.getStock();//容器
 | 
			
		||||
                Point startPoint = inv.getPoint();//起始点位
 | 
			
		||||
                ItemKey itemKey = inv.getItemKey();
 | 
			
		||||
                Item item = inv.getItemKey().getItem();
 | 
			
		||||
                    //根据库存信息生成叫料任务
 | 
			
		||||
                    Stock stock = inv.getStock();//容器
 | 
			
		||||
                    Point startPoint = inv.getPoint();//起始点位
 | 
			
		||||
                    ItemKey itemKey = inv.getItemKey();
 | 
			
		||||
                    Item item = inv.getItemKey().getItem();
 | 
			
		||||
 | 
			
		||||
                //更新库存信息
 | 
			
		||||
                inventoryToUpdate.add(updateInventory(inv));
 | 
			
		||||
                    //更新库存信息
 | 
			
		||||
                    inventoryToUpdate.add(updateInventory(inv));
 | 
			
		||||
 | 
			
		||||
                //生成出库明细
 | 
			
		||||
                PickDetail pd = createPickDetail(item, inv.getBillCode(), itemKey.getPropC1(), inv.getQuantity(), issueInfo.getTaskNumber());
 | 
			
		||||
                pickDetailToCreate.add(pd);
 | 
			
		||||
                    //生成出库明细
 | 
			
		||||
                    PickDetail pd = createPickDetail(item, inv.getBillCode(), itemKey.getPropC1(), inv.getQuantity(), issueInfo.getTaskNumber());
 | 
			
		||||
                    pickDetailToCreate.add(pd);
 | 
			
		||||
 | 
			
		||||
                //生成搬运任务
 | 
			
		||||
                AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE");
 | 
			
		||||
                agvTaskToCreate.add(agvTask);
 | 
			
		||||
                    //生成搬运任务
 | 
			
		||||
                    AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE");
 | 
			
		||||
                    agvTaskToCreate.add(agvTask);
 | 
			
		||||
 | 
			
		||||
                //生成Task
 | 
			
		||||
                Task task = createTask(item, itemKey, pd, inv.getBillCode(), stock, startPoint, endPoint, agvTask, inv);
 | 
			
		||||
                taskToCreate.add(task);
 | 
			
		||||
            }
 | 
			
		||||
            if (!errorMsgList.isEmpty()) {
 | 
			
		||||
                throw new RuntimeException(errorMsgList.toString());
 | 
			
		||||
            }
 | 
			
		||||
            ExecutorService executor = ThreadPoolExecutorUtil.getPoll("getIssueInfo-job");
 | 
			
		||||
 | 
			
		||||
            // 批量更新库存信息
 | 
			
		||||
            CompletableFuture<Void> inventoryFuture = CompletableFuture.runAsync(() -> {
 | 
			
		||||
                //批量更新库存信息
 | 
			
		||||
                if (!inventoryToUpdate.isEmpty()) {
 | 
			
		||||
                    batchCreateOrUpdate.batchUpdate(inventoryToUpdate);
 | 
			
		||||
                    //生成Task
 | 
			
		||||
                    Task task = createTask(item, itemKey, pd, inv.getBillCode(), stock, startPoint, endPoint, agvTask, inv);
 | 
			
		||||
                    taskToCreate.add(task);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }, executor);
 | 
			
		||||
                ExecutorService executor = ThreadPoolExecutorUtil.getPoll("getIssueInfo-job");
 | 
			
		||||
 | 
			
		||||
                // 批量更新库存信息
 | 
			
		||||
                CompletableFuture<Void> inventoryFuture = CompletableFuture.runAsync(() -> {
 | 
			
		||||
                    //批量更新库存信息
 | 
			
		||||
                    if (!inventoryToUpdate.isEmpty()) {
 | 
			
		||||
                        batchCreateOrUpdate.batchUpdate(inventoryToUpdate);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }, executor);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            CompletableFuture<Void> pickDetailFuture = inventoryFuture.thenRunAsync(() -> {
 | 
			
		||||
                //批量生成叫料明细
 | 
			
		||||
                if (!pickDetailToCreate.isEmpty()) {
 | 
			
		||||
                    batchCreateOrUpdate.batchCreate(pickDetailToCreate);
 | 
			
		||||
                }
 | 
			
		||||
                CompletableFuture<Void> pickDetailFuture = inventoryFuture.thenRunAsync(() -> {
 | 
			
		||||
                    //批量生成叫料明细
 | 
			
		||||
                    if (!pickDetailToCreate.isEmpty()) {
 | 
			
		||||
                        batchCreateOrUpdate.batchCreate(pickDetailToCreate);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
            }, executor);
 | 
			
		||||
                }, executor);
 | 
			
		||||
 | 
			
		||||
            CompletableFuture<Void> agvTaskFuture = pickDetailFuture.thenRunAsync(() -> {
 | 
			
		||||
                // 批量生成agv任务
 | 
			
		||||
                if (!agvTaskToCreate.isEmpty()) {
 | 
			
		||||
                    batchCreateOrUpdate.batchCreate(agvTaskToCreate);
 | 
			
		||||
                }
 | 
			
		||||
                CompletableFuture<Void> agvTaskFuture = pickDetailFuture.thenRunAsync(() -> {
 | 
			
		||||
                    // 批量生成agv任务
 | 
			
		||||
                    if (!agvTaskToCreate.isEmpty()) {
 | 
			
		||||
                        batchCreateOrUpdate.batchCreate(agvTaskToCreate);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
            }, executor);
 | 
			
		||||
                }, executor);
 | 
			
		||||
 | 
			
		||||
            CompletableFuture<Void> taskFuture = agvTaskFuture.thenRunAsync(() -> {
 | 
			
		||||
                // 批量生成任务
 | 
			
		||||
                if (!taskToCreate.isEmpty()) {
 | 
			
		||||
                    batchCreateOrUpdate.batchCreate(taskToCreate);
 | 
			
		||||
                CompletableFuture<Void> taskFuture = agvTaskFuture.thenRunAsync(() -> {
 | 
			
		||||
                    // 批量生成任务
 | 
			
		||||
                    if (!taskToCreate.isEmpty()) {
 | 
			
		||||
                        batchCreateOrUpdate.batchCreate(taskToCreate);
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
            }, executor);
 | 
			
		||||
            taskFuture.join();
 | 
			
		||||
                }, executor);
 | 
			
		||||
                taskFuture.join();
 | 
			
		||||
 | 
			
		||||
            executor.shutdown();
 | 
			
		||||
        });
 | 
			
		||||
        if (!errorMsgList.isEmpty()) {
 | 
			
		||||
            throw new RuntimeException(errorMsgList.toString());
 | 
			
		||||
                executor.shutdown();
 | 
			
		||||
            }).join();
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw new RuntimeException(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,5 @@ public class configTask {
 | 
			
		|||
        BaseCode.MLS_IP=body.getString("MLS_IP");
 | 
			
		||||
        BaseCode.PLC_PORT=body.getIntValue("PLC_PORT");
 | 
			
		||||
        BaseCode.PLC_IP=body.getString("PLC_IP");
 | 
			
		||||
        BaseCode.PICK_YH_QR=body.getString("PICK_YH_QR");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,34 +54,6 @@ public class pickTask {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    public void yhTask() {
 | 
			
		||||
        /* 发送验货任务*/
 | 
			
		||||
        pickTaskByType(BizStatus.INV);
 | 
			
		||||
        /* 发送验货返库任务*/
 | 
			
		||||
        pickTaskByType(BizStatus.INV_BACK);
 | 
			
		||||
        System.out.println("发送验货任务");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void pickTaskByType(String agvType) {
 | 
			
		||||
        // 下发验货任务
 | 
			
		||||
        List<AgvTask> agvTaskList = agvTaskService.queryByAgvTask(BizStatus.OPEN, agvType);
 | 
			
		||||
        if (agvTaskList.size() > 0) {
 | 
			
		||||
            /* 第一个任务的创建视角*/
 | 
			
		||||
            long lastTaskTime = agvTaskList.get(0).getCreateTime().getTime();
 | 
			
		||||
            if ((agvTaskList.size() >= MAX_TASK_COUNT)) {
 | 
			
		||||
                /* 数量大于等于5时*/
 | 
			
		||||
                // 取集合中的前五个任务合并发送
 | 
			
		||||
                List<AgvTask> agvTasks=agvTaskList.subList(0, MAX_TASK_COUNT);
 | 
			
		||||
                Result(agvTaskService.sendAgvTaskLXImpl(agvTasks));
 | 
			
		||||
            }else if((System.currentTimeMillis() - lastTaskTime >=1*60*1000) ){
 | 
			
		||||
                Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList));
 | 
			
		||||
            } else {
 | 
			
		||||
//                throw new RuntimeException("出库料箱任务未满足条件(不满足五个料箱需等待2分钟)!");
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
//            throw new RuntimeException("无出库料箱任务!");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void Result(String result) {
 | 
			
		||||
        if(result==null ||result.length()==0){
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ import javax.annotation.PostConstruct;
 | 
			
		|||
 **/
 | 
			
		||||
@Component
 | 
			
		||||
public class BaseCode {
 | 
			
		||||
    public static String PICK_YH_QR="0";
 | 
			
		||||
    /** PLC IP*/
 | 
			
		||||
    public static String PLC_IP = "10.173.188.201";
 | 
			
		||||
    /** PLC 端口号*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,8 +31,6 @@ public  interface  BizStatus {
 | 
			
		|||
    public static String CANCEL = "CANCEL";
 | 
			
		||||
    /* 放料*/
 | 
			
		||||
    public static String PICKER_SEND = "PICKER_SEND";
 | 
			
		||||
    /** 取料*/
 | 
			
		||||
    public static String PICKER_RECEIVE = "PICKER_RECEIVE";
 | 
			
		||||
    /**
 | 
			
		||||
     * 出入库状态-已关闭
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -62,8 +60,6 @@ public  interface  BizStatus {
 | 
			
		|||
     * 任务状态-执行中
 | 
			
		||||
     */
 | 
			
		||||
    public static String ATCALL  = "ATCALL";
 | 
			
		||||
    /** 任务状态-验货中*/
 | 
			
		||||
    public static String INSPECT  = "INSPECT";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 任务状态-工作中
 | 
			
		||||
| 
						 | 
				
			
			@ -97,11 +93,9 @@ public  interface  BizStatus {
 | 
			
		|||
    public static String PICK = "PICK";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 验货任务
 | 
			
		||||
     * 盘点任务
 | 
			
		||||
     */
 | 
			
		||||
    public static String INV = "INV";
 | 
			
		||||
    /** 验货返库*/
 | 
			
		||||
    public static String INV_BACK = "INV_BACK";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 库存日志-移位
 | 
			
		||||
| 
						 | 
				
			
			@ -213,4 +207,5 @@ public  interface  BizStatus {
 | 
			
		|||
     * 空车出库/空箱出库
 | 
			
		||||
     */
 | 
			
		||||
    public static String EMPTY_OUT = "EMPTY_OUT";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue