no message

main
暴炳林 2024-07-11 21:11:16 +08:00
parent f3a9395e7f
commit aef1578bf1
27 changed files with 234 additions and 121 deletions

View File

@ -1,7 +1,7 @@
package com.youchain.utils; package com.youchain.utils;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.utils.IOUtils;
@ -62,31 +62,51 @@ public class HttpPostUtil {
System.out.println("token:"+token); System.out.println("token:"+token);
InputStream instr = null; InputStream instr = null;
String str = ""; String str = "";
try { int i=1;
URL url = new URL(api_url); boolean bit=false;
URLConnection urlCon = url.openConnection(); while (true) {
urlCon.setConnectTimeout(3000); try {
byte[] xmlData = request.getBytes(); URL url = new URL(api_url);
urlCon.setDoOutput(true); URLConnection urlCon = url.openConnection();
urlCon.setDoInput(true); urlCon.setConnectTimeout(3000);
urlCon.setUseCaches(false); byte[] xmlData = request.getBytes();
urlCon.setRequestProperty("token", token); urlCon.setDoOutput(true);
urlCon.setRequestProperty("content-Type", "application/json"); urlCon.setDoInput(true);
urlCon.setRequestProperty("charset", "UTF-8"); urlCon.setUseCaches(false);
urlCon.setRequestProperty("Content-length", String.valueOf(xmlData.length)); urlCon.setRequestProperty("token", token);
DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream()); urlCon.setRequestProperty("content-Type", "application/json");
printout.write(xmlData); urlCon.setRequestProperty("charset", "UTF-8");
printout.flush(); urlCon.setRequestProperty("Content-length", String.valueOf(xmlData.length));
printout.close(); DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());
instr = urlCon.getInputStream(); printout.write(xmlData);
byte[] bis = IOUtils.toByteArray(instr); printout.flush();
String ResponseString = new String(bis, "UTF-8"); printout.close();
if ((ResponseString == null) || ("".equals(ResponseString.trim()))) { instr = urlCon.getInputStream();
System.out.println("返回空"); byte[] bis = IOUtils.toByteArray(instr);
String ResponseString = new String(bis, "UTF-8");
if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
System.out.println("返回空");
}else {
JSONObject jsonObject=JSONObject.parseObject(ResponseString);
if (jsonObject.getString("code").equals("0")){
bit=true;
}
}
str = ResponseString;
} catch (Exception e) {
log.info(api_url + "接口异常");
} finally {
if (i>3||bit==true){
break;
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 跳出循环
i=i+1;
} }
str = ResponseString;
} catch (Exception e) {
log.info(api_url+"接口异常");
} }
return str; return str;
} }

View File

@ -15,6 +15,7 @@
*/ */
package com.youchain.rest; package com.youchain.rest;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.utils.SecurityUtils; import com.youchain.utils.SecurityUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -61,7 +62,7 @@ public class LogController {
} }
@GetMapping @GetMapping
@ApiOperation("日志查询") @ApiOperation("日志查询")
@PreAuthorize("@el.check()") @AnonymousAccess
public ResponseEntity<Object> queryLog(LogQueryCriteria criteria, Pageable pageable){ public ResponseEntity<Object> queryLog(LogQueryCriteria criteria, Pageable pageable){
criteria.setLogType("INFO"); criteria.setLogType("INFO");
return new ResponseEntity<>(logService.queryAll(criteria,pageable), HttpStatus.OK); return new ResponseEntity<>(logService.queryAll(criteria,pageable), HttpStatus.OK);
@ -77,7 +78,7 @@ public class LogController {
@GetMapping(value = "/error") @GetMapping(value = "/error")
@ApiOperation("错误日志查询") @ApiOperation("错误日志查询")
@PreAuthorize("@el.check()") @AnonymousAccess
public ResponseEntity<Object> queryErrorLog(LogQueryCriteria criteria, Pageable pageable){ public ResponseEntity<Object> queryErrorLog(LogQueryCriteria criteria, Pageable pageable){
criteria.setLogType("ERROR"); criteria.setLogType("ERROR");
return new ResponseEntity<>(logService.queryAll(criteria,pageable), HttpStatus.OK); return new ResponseEntity<>(logService.queryAll(criteria,pageable), HttpStatus.OK);

View File

@ -37,6 +37,8 @@ public class LogQueryCriteria {
@Query @Query
private String logType; private String logType;
@Query(type = Query.Type.RIGHT_LIKE)
private String description;
@Query(type = Query.Type.BETWEEN) @Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime; private List<Timestamp> createTime;

View File

@ -18,5 +18,5 @@ public class MissionStateCallback {
String missionStatus; String missionStatus;
/* 当前点位*/ /* 当前点位*/
@ApiModelProperty(value = "当前点位") @ApiModelProperty(value = "当前点位")
String slotCode; String slotCode="222";
} }

View File

@ -65,7 +65,7 @@ public interface PointRepository extends JpaRepository<Point, Long>, JpaSpecific
+" order by p.pos_x,p.pos_y asc " +" order by p.pos_x,p.pos_y asc "
+" LIMIT ?1,?2 ", nativeQuery = true) +" LIMIT ?1,?2 ", nativeQuery = true)
List<Map<String, Object>> getDataPointLimit(int currentPage, int pageSize); List<Map<String, Object>> getDataPointLimit(int currentPage, int pageSize);
@Query(value =" select p.`code` 'pointCode',i.`code` 'itemCode' from base_point p " @Query(value =" select p.`code` 'pointCode',i.`code` 'itemCode' from base_point p "
+" left join base_area a on p.area_id=a.id " +" left join base_area a on p.area_id=a.id "
+" left join data_inventory inv on inv.point_id=p.id " +" left join data_inventory inv on inv.point_id=p.id "
+" left join data_item_key ik on ik.id=inv.item_key_id " +" left join data_item_key ik on ik.id=inv.item_key_id "

View File

@ -44,4 +44,5 @@ public interface StockRepository extends JpaRepository<Stock, Long>, JpaSpecific
*/ */
@Query(value = "SELECT * FROM base_stock u WHERE u.code = ?1 ", nativeQuery = true) @Query(value = "SELECT * FROM base_stock u WHERE u.code = ?1 ", nativeQuery = true)
Stock getStockByCode(String code); Stock getStockByCode(String code);
Stock findFirstByStatus(String status);
} }

View File

@ -120,7 +120,7 @@ public class PointController {
ApiError apiError = ApiError.errorJosn(BAD_REQUEST.value(), "找不到库区" + areaCode); ApiError apiError = ApiError.errorJosn(BAD_REQUEST.value(), "找不到库区" + areaCode);
return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus())); return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus()));
} }
Point point = pointService.getPoint(code, null, null, null); Point point = pointRepository.findByCode(code);
if (point == null) { if (point == null) {
point = new Point(); point = new Point();
point.setCode(code); point.setCode(code);

View File

@ -97,7 +97,7 @@ public class StockController {
int j=0; int j=0;
String code=readAll.get(i).get("代码").toString().trim(); String code=readAll.get(i).get("代码").toString().trim();
String stockTypeCode=readAll.get(i).get("类型").toString().trim(); String stockTypeCode=readAll.get(i).get("类型").toString().trim();
String pointCode=readAll.get(i).get("点位").toString().trim(); // String pointCode=readAll.get(i).get("点位").toString().trim();
StockType st=stockTypeService.findByCode(stockTypeCode); StockType st=stockTypeService.findByCode(stockTypeCode);
if(code==null || code.length()<=0){ if(code==null || code.length()<=0){
break; break;
@ -112,19 +112,19 @@ public class StockController {
stock.setCode(code); stock.setCode(code);
stock.setName(code); stock.setName(code);
stock.setStatus(BaseStatus.FREE); stock.setStatus(BaseStatus.FREE);
if (ImportEntityUtils.stringFlag(pointCode)){ /*if (ImportEntityUtils.stringFlag(pointCode)){
Point point=pointRepository.findByCode(pointCode); Point point=pointRepository.findByCode(pointCode);
stock.setPoint(point); stock.setPoint(point);
} }*/
stock.setEnabled(true); stock.setEnabled(true);
stock.setStockType(st); stock.setStockType(st);
stock.setDept(UserUtils.getDept()); stock.setDept(UserUtils.getDept());
stockService.create(stock); stockService.create(stock);
}else{ }else{
if (ImportEntityUtils.stringFlag(pointCode)){ /*if (ImportEntityUtils.stringFlag(pointCode)){
Point point=pointRepository.findByCode(pointCode); Point point=pointRepository.findByCode(pointCode);
stock.setPoint(point); stock.setPoint(point);
} }*/
stock.setCode(code); stock.setCode(code);
stock.setName(code); stock.setName(code);
stock.setStockType(st); stock.setStockType(st);

View File

@ -112,7 +112,7 @@ public class AgvTaskController {
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@PostMapping("/closeAgvTask") @PostMapping("/closeAgvTask")
@Log("关闭agvTask") @Log("取消搬运任务")
@AnonymousAccess @AnonymousAccess
public ResponseEntity<Object> closeAgvTask(@RequestBody Long id) { public ResponseEntity<Object> closeAgvTask(@RequestBody Long id) {
agvTaskService.closeAgvTask(id); agvTaskService.closeAgvTask(id);

View File

@ -0,0 +1,82 @@
package com.youchain.businessdata.rest;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.annotation.Log;
import com.youchain.appupdate.inputJson.MissionStateCallback;
import com.youchain.businessdata.domain.AgvTask;
import com.youchain.businessdata.domain.ItemKey;
import com.youchain.businessdata.domain.Task;
import com.youchain.businessdata.inputJson.ReturnIssueInfo;
import com.youchain.businessdata.inputJson.ReturnIssueInfoParams;
import com.youchain.businessdata.inputJson.ReturnMoInfo;
import com.youchain.businessdata.inputJson.ReturnMoParams;
import com.youchain.businessdata.repository.AgvTaskRepository;
import com.youchain.businessdata.repository.InventoryRepository;
import com.youchain.businessdata.repository.TaskRepository;
import com.youchain.businessdata.service.AgvTaskService;
import com.youchain.businessdata.service.MlsService;
import com.youchain.businessdata.service.OrderService;
import com.youchain.businessdata.service.TaskService;
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.BizStatus;
import com.youchain.utils.UrlApi;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
@RestController
@RequiredArgsConstructor
@Api(tags = "KMReS")
@RequestMapping("/api/amr")
@Slf4j
public class KMReSAgvTaskController {
private final KMReSController kmReSController;
private final AgvTaskRepository agvTaskRepository;
@PostMapping("/cancelAgvTasks")
@Log("取消搬运任务")
@ApiOperation("取消搬运任务")
@AnonymousAccess
public ResponseEntity<Object> closeAgvTask(@RequestBody Long id) {
AgvTask agvTask=agvTaskRepository.getById(Math.toIntExact(id));
MissionStateCallback missionStateCallback=new MissionStateCallback();
missionStateCallback.setMissionStatus(BizStatus.CANCEL);
missionStateCallback.setMissionCode(agvTask.getJobForce());
missionStateCallback.setContainerCode(agvTask.getStockCode());
kmReSController.missionStateCallbackChild(missionStateCallback);
return new ResponseEntity<>(ApiResult.fail(200, "操作成功", null),HttpStatus.OK);
}
@PostMapping("/pickerSendAgvTasks")
@Log("完成搬运任务")
@ApiOperation("完成搬运任务")
@AnonymousAccess
public ResponseEntity<Object> pickerSendAgvTask(@RequestBody Long id) {
AgvTask agvTask=agvTaskRepository.getById(Math.toIntExact(id));
MissionStateCallback missionStateCallback=new MissionStateCallback();
missionStateCallback.setMissionStatus(BizStatus.PICKER_SEND);
missionStateCallback.setMissionCode(agvTask.getJobForce());
missionStateCallback.setContainerCode(agvTask.getStockCode());
missionStateCallback.setSlotCode(agvTask.getEndSlotCode());
kmReSController.missionStateCallbackChild(missionStateCallback);
return new ResponseEntity<>(ApiResult.fail(200, "操作成功", null),HttpStatus.OK);
}
}

View File

@ -4,6 +4,7 @@ import com.youchain.annotation.Log;
import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.AnonymousAccess;
import com.youchain.appupdate.inputJson.MissionStateCallback; import com.youchain.appupdate.inputJson.MissionStateCallback;
import com.youchain.businessdata.domain.AgvTask; import com.youchain.businessdata.domain.AgvTask;
import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.domain.ItemKey; import com.youchain.businessdata.domain.ItemKey;
import com.youchain.businessdata.domain.Task; import com.youchain.businessdata.domain.Task;
import com.youchain.businessdata.inputJson.ReturnIssueInfo; import com.youchain.businessdata.inputJson.ReturnIssueInfo;
@ -11,6 +12,7 @@ import com.youchain.businessdata.inputJson.ReturnIssueInfoParams;
import com.youchain.businessdata.inputJson.ReturnMoInfo; import com.youchain.businessdata.inputJson.ReturnMoInfo;
import com.youchain.businessdata.inputJson.ReturnMoParams; import com.youchain.businessdata.inputJson.ReturnMoParams;
import com.youchain.businessdata.repository.AgvTaskRepository; import com.youchain.businessdata.repository.AgvTaskRepository;
import com.youchain.businessdata.repository.InventoryRepository;
import com.youchain.businessdata.repository.TaskRepository; import com.youchain.businessdata.repository.TaskRepository;
import com.youchain.businessdata.service.AgvTaskService; import com.youchain.businessdata.service.AgvTaskService;
import com.youchain.businessdata.service.MlsService; import com.youchain.businessdata.service.MlsService;
@ -48,6 +50,7 @@ public class KMReSController {
private final AgvTaskService agvTaskService; private final AgvTaskService agvTaskService;
private final AgvTaskRepository agvTaskRepository; private final AgvTaskRepository agvTaskRepository;
private final TaskRepository taskRepository; private final TaskRepository taskRepository;
private final InventoryRepository inventoryRepository;
private final TaskService taskService; private final TaskService taskService;
private final OrderService orderService; private final OrderService orderService;
private final MlsService mlsService; private final MlsService mlsService;
@ -59,6 +62,11 @@ public class KMReSController {
@AnonymousAccess @AnonymousAccess
public ResponseEntity<Object> missionStateCallback(@RequestBody MissionStateCallback missionStateCallback) { public ResponseEntity<Object> missionStateCallback(@RequestBody MissionStateCallback missionStateCallback) {
System.out.println("接口任务回调:"+missionStateCallback.toString()); System.out.println("接口任务回调:"+missionStateCallback.toString());
missionStateCallbackChild(missionStateCallback);
return ResponseEntity.ok(ApiResult.success(HttpStatus.OK.value(), "", ""));
}
public void missionStateCallbackChild(MissionStateCallback missionStateCallback) {
String missionCode = missionStateCallback.getMissionCode(); // 作业 id String missionCode = missionStateCallback.getMissionCode(); // 作业 id
String containerCode = missionStateCallback.getContainerCode(); // 容器编号 String containerCode = missionStateCallback.getContainerCode(); // 容器编号
String missionStatus = missionStateCallback.getMissionStatus(); // 作业当前状态 String missionStatus = missionStateCallback.getMissionStatus(); // 作业当前状态
@ -74,7 +82,6 @@ public class KMReSController {
asnTask(id, missionStatus,slotCode); asnTask(id, missionStatus,slotCode);
} }
} }
return ResponseEntity.ok(ApiResult.success(HttpStatus.OK.value(), "", ""));
} }
public void asnTask(String id, String missionStatus, String slotCode) { public void asnTask(String id, String missionStatus, String slotCode) {
@ -82,12 +89,9 @@ public class KMReSController {
AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id)); AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id));
AgvTask agvTask = agvTaskService.toEntity(agvTaskDto); AgvTask agvTask = agvTaskService.toEntity(agvTaskDto);
Task task = getFirstTask(agvTask.getId()); Task task = getFirstTask(agvTask.getId());
/*if (agvTask.getEndSlotCode().equals(slotCode)){
missionStatus="PICKER_SEND";
}*/
agvTaskService.agvTaskCallback(agvTask, task, missionStatus); agvTaskService.agvTaskCallback(agvTask, task, missionStatus);
if (missionStatus.equals("PICKER_SEND")) { if (missionStatus.equals(BizStatus.PICKER_SEND)) {
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
returnMo(task.getBillCode());// 回传MO信息 returnMo(task.getBillCode());// 回传MO信息
}); });
@ -95,9 +99,9 @@ public class KMReSController {
} }
public void pickTask(String id, String containerCode, String missionStatus) { public void pickTask(String id, String containerCode, String missionStatus) {
if ("CANCELED".equals(missionStatus)) { if (BizStatus.CANCEL.equals(missionStatus)) {
cancelAgvTasks(id); cancelAgvTasks(id);
} else if ("PICKER_SEND".equals(missionStatus)){ } else if (BizStatus.PICKER_SEND.equals(missionStatus)){
AgvTask agvTask = agvTaskRepository.getById(Integer.valueOf(id)); AgvTask agvTask = agvTaskRepository.getById(Integer.valueOf(id));
Task task = getFirstTask(agvTask.getId()); Task task = getFirstTask(agvTask.getId());
agvTaskService.agvTaskCallback(agvTask, missionStatus, containerCode); agvTaskService.agvTaskCallback(agvTask, missionStatus, containerCode);
@ -110,13 +114,23 @@ public class KMReSController {
} }
public void cancelAgvTasks(String id) { public void cancelAgvTasks(String id) {
List<AgvTask> agvTaskList = agvTaskService.findByjobCode(id); AgvTask agvTask = agvTaskRepository.getById(Integer.valueOf(id));
for (AgvTask agvTask : agvTaskList) { if (!agvTask.getStatus().equals(BizStatus.FINISH)) {
if (!agvTask.getStatus().equals(BizStatus.FINISH)) { agvTask.setStatus(BizStatus.CANCEL);
agvTask.setStatus(BizStatus.CANCEL); agvTask.setEndTime(new Timestamp(new Date().getTime()));
agvTask.setEndTime(new Timestamp(new Date().getTime())); agvTaskService.update(agvTask);
agvTaskService.update(agvTask); /* 取消Task*//*
} List<Task> taskList=taskRepository.getAgvTaskList(agvTask.getId());
for (Task task:taskList){
task.setTaskStatus(BizStatus.CANCEL);
taskRepository.save(task);
if (task.getInvId()!=null) {
*//* 退回库存*//*
Inventory inventory = inventoryRepository.getById(task.getInvId());
inventory.setQueuedQty(0d);
inventoryRepository.save(inventory);
}
}*/
} }
} }

View File

@ -89,12 +89,12 @@ public class MlsController {
@AnonymousAccess @AnonymousAccess
@Log("叫料指令") @Log("叫料指令")
@ApiOperation("叫料指令") @ApiOperation("叫料指令")
public ResponseEntity<Object> getIssueInfo(@RequestBody IssueInfo issueInfo) { public synchronized ResponseEntity<Object> getIssueInfo(@RequestBody IssueInfo issueInfo) {
/*try { try {
mlsService.getIssueInfo(issueInfo);
} catch (Exception e) { } catch (Exception e) {
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), e.getMessage(), ""), HttpStatus.BAD_REQUEST); return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), e.getMessage(), ""), HttpStatus.BAD_REQUEST);
}*/ }
mlsService.getIssueInfo(issueInfo);
return new ResponseEntity<>(ApiResult.success(OK.value(), "", ""), HttpStatus.OK); return new ResponseEntity<>(ApiResult.success(OK.value(), "", ""), HttpStatus.OK);
} }

View File

@ -105,7 +105,7 @@ public interface TaskService {
* @param taskId * @param taskId
* @throws Exception * @throws Exception
*/ */
void pickConfirm(long taskId,double pickedQuantity) throws Exception; void pickConfirm(long taskId,double pickedQuantity);
/** /**
* 退 * 退

View File

@ -379,7 +379,7 @@ public class AgvTaskServiceImpl implements AgvTaskService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void agvTaskCallback(AgvTask agvTask, Task task, String status) { public void agvTaskCallback(AgvTask agvTask, Task task, String status) {
if (status.equals("PICKER_SEND")) { if (status.equals(BizStatus.PICKER_SEND)) {
//入库 //入库
if (agvTask.getType().equals(BizStatus.ASN)&&task!=null) { if (agvTask.getType().equals(BizStatus.ASN)&&task!=null) {
//增加库存 //增加库存
@ -420,10 +420,13 @@ public class AgvTaskServiceImpl implements AgvTaskService {
/* 解绑容器库位*/ /* 解绑容器库位*/
Stock stock=task.getSrcStock(); Stock stock=task.getSrcStock();
Point point=stock.getPoint(); Point point=stock.getPoint();
point.setStatus(BaseStatus.FREE); if (point!=null){
pointRepository.save(point); point.setStatus(BaseStatus.FREE);
pointRepository.save(point);
}
stock.setStatus(BaseStatus.FREE); stock.setStatus(BaseStatus.FREE);
stock.setPoint(null); stock.setPoint(null);
stock.setName(stock.getCode());
stockRepository.save(stock); stockRepository.save(stock);
/*关闭Task*/ /*关闭Task*/
task.setTaskStatus(BizStatus.CLOSE); task.setTaskStatus(BizStatus.CLOSE);
@ -441,17 +444,17 @@ public class AgvTaskServiceImpl implements AgvTaskService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void agvTaskCallback(AgvTask agvTask, String status, String containerCode) { public void agvTaskCallback(AgvTask agvTask, String status, String containerCode) {
if (status.equals("PICKER_SEND")) { if (status.equals(BizStatus.PICKER_SEND)) {
//小件AGV把料箱放到料箱车上扣减库存 //小件AGV把料箱放到料箱车上扣减库存
List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId()); List<Task> taskList = taskRepository.getAgvTaskList(agvTask.getId());
//扣除库存 //扣除库存
for (Task task : taskList) { for (Task task : taskList) {
try { taskService.pickConfirm(task.getId(), task.getPlanQty());
taskService.pickConfirm(task.getId(), task.getPlanQty()); /*try {
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e.getMessage()); throw new RuntimeException(e.getMessage());
} }*/
} }
agvTask.setStatus(BizStatus.FINISH); agvTask.setStatus(BizStatus.FINISH);

View File

@ -104,27 +104,15 @@ public class InventoryServiceImpl implements InventoryService {
List<Map<String, Object>> list = new ArrayList<>(); List<Map<String, Object>> list = new ArrayList<>();
for (InventoryDto inventory : all) { for (InventoryDto inventory : all) {
Map<String, Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
map.put("单据号", inventory.getBillCode()); map.put("工单编号", inventory.getBillCode());
map.put("物料属性", inventory.getItemKey()); map.put("MO票", inventory.getItemKey().getPropC1());
map.put("点位", inventory.getPoint()); map.put("物料编码", inventory.getItemKey().getItem().getCode());
map.put("点位号", inventory.getPointCode()); map.put("物料名称", inventory.getItemKey().getItem().getName());
map.put("容器", inventory.getStock()); map.put("库位号", inventory.getPointCode());
map.put("容器号", inventory.getStockCode()); map.put("容器号", inventory.getStockCode());
map.put("大容器", inventory.getBigStock());
map.put("数量", inventory.getQuantity()); map.put("数量", inventory.getQuantity());
map.put("分配数", inventory.getQueuedQty()); map.put("占用数", inventory.getQueuedQty());
map.put("重量", inventory.getWeight()); map.put("入库时间", inventory.getCreateTime());
map.put("体积", inventory.getVolume());
map.put("描述", inventory.getDescription());
map.put("是否锁定", inventory.getBeLock());
map.put("是否不良品", inventory.getBeReject());
map.put("状态", inventory.getStatus());
map.put("存货日期", inventory.getStorageDate());
map.put("仓库ID", inventory.getDept());
map.put("创建人", inventory.getCreateBy());
map.put("修改人", inventory.getUpdateBy());
map.put("创建时间", inventory.getCreateTime());
map.put("修改时间", inventory.getUpdateTime());
list.add(map); list.add(map);
} }
FileUtil.downloadExcel(list, response); FileUtil.downloadExcel(list, response);

View File

@ -197,7 +197,7 @@ public class MoServiceImpl implements MoService {
// 生成AGV任务和入库任务 // 生成AGV任务和入库任务
createTasks(item, stock, srcPoint, endPoint, moDto.getLabelNo(), moDto, orderDto); createTasks(item, stock, srcPoint, endPoint, moDto.getLabelNo(), moDto, orderDto);
stock.setName(labelNo);
// 更新容器状态和目标点位状态 // 更新容器状态和目标点位状态
updateStockAndEndPoint(stock, endPoint); updateStockAndEndPoint(stock, endPoint);

View File

@ -152,7 +152,7 @@ public class TaskServiceImpl implements TaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public synchronized void pickConfirm(long taskId, double pickedQuantity) throws Exception { public synchronized void pickConfirm(long taskId, double pickedQuantity) {
if (taskId > 0) { if (taskId > 0) {
TaskDto taskDto = findById(taskId); TaskDto taskDto = findById(taskId);
Task task = taskMapper.toEntity(taskDto);//Dto转实体 Task task = taskMapper.toEntity(taskDto);//Dto转实体
@ -172,6 +172,10 @@ public class TaskServiceImpl implements TaskService {
} }
Stock stock=inv.getStock(); Stock stock=inv.getStock();
Point point=stock.getPoint(); Point point=stock.getPoint();
/*重置料箱名称为料箱名称*/
if (stock.getName()!=stock.getCode()){
stock.setName(stock.getCode());
}
stock.setStatus(BaseStatus.FREE); stock.setStatus(BaseStatus.FREE);
stock.setPoint(null); stock.setPoint(null);
stockRepository.save(stock); stockRepository.save(stock);

View File

@ -16,6 +16,7 @@
package com.youchain.modules.quartz.rest; package com.youchain.modules.quartz.rest;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.annotation.Log; import com.youchain.annotation.Log;
import com.youchain.exception.BadRequestException; import com.youchain.exception.BadRequestException;
import com.youchain.modules.quartz.domain.QuartzJob; import com.youchain.modules.quartz.domain.QuartzJob;
@ -74,7 +75,7 @@ public class QuartzJobController {
@ApiOperation("查询任务执行日志") @ApiOperation("查询任务执行日志")
@GetMapping(value = "/logs") @GetMapping(value = "/logs")
@PreAuthorize("@el.check('timing:list')") @AnonymousAccess
public ResponseEntity<Object> queryQuartzJobLog(JobQueryCriteria criteria, Pageable pageable){ public ResponseEntity<Object> queryQuartzJobLog(JobQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(quartzJobService.queryAllLog(criteria,pageable), HttpStatus.OK); return new ResponseEntity<>(quartzJobService.queryAllLog(criteria,pageable), HttpStatus.OK);
} }

View File

@ -32,7 +32,8 @@ public class JobQueryCriteria {
@Query @Query
private Boolean isSuccess; private Boolean isSuccess;
@Query(propName="exceptionDetail",type = Query.Type.INNER_LIKE)
private String errorDialog;
@Query(type = Query.Type.BETWEEN) @Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime; private List<Timestamp> createTime;
} }

View File

@ -49,7 +49,7 @@ public class moTask {
mlsService.getMoInfo(resultJson); mlsService.getMoInfo(resultJson);
long time = System.currentTimeMillis() - startTime; long time = System.currentTimeMillis() - startTime;
// 保存日志 // 保存日志
logService.saveLogInfo(moInfo, UrlApi.publicApi, resultJson, "获取MO票信息", time, "INFO"); logService.saveLogInfo(moInfo, UrlApi.publicApi, null, "获取MO票信息", time, "INFO");
} }
} }
@Log("获取MLS Mo票数据") @Log("获取MLS Mo票数据")

View File

@ -51,7 +51,7 @@ public class orderTask {
mlsService.getOrderInfo(resultJson); mlsService.getOrderInfo(resultJson);
long time = System.currentTimeMillis() - startTime; long time = System.currentTimeMillis() - startTime;
// 保存日志 // 保存日志
logService.saveLogInfo(orderInfo, UrlApi.publicApi, resultJson, "获取送货单信息", time,"INFO"); logService.saveLogInfo(orderInfo, UrlApi.publicApi, null, "获取送货单信息", time,"INFO");
} }
} }
@Log("获取MLS送货单数据") @Log("获取MLS送货单数据")

View File

@ -32,23 +32,19 @@ public class pickTask {
private static final int MAX_TASK_COUNT = 5; private static final int MAX_TASK_COUNT = 5;
private static final long TIMEOUT_MS = 2*60*1000; private static final long TIMEOUT_MS = 2*60*1000;
private long lastTaskTime = System.currentTimeMillis();
public void pickTask() { public void pickTask() {
// 下发出库任务 // 下发出库任务
List<AgvTask> agvTaskList = agvTaskService.queryByAgvTask(BizStatus.OPEN,BizStatus.PICK); List<AgvTask> agvTaskList = agvTaskService.queryByAgvTask(BizStatus.OPEN,BizStatus.PICK);
if (agvTaskList.size() > 0) { if (agvTaskList.size() > 0) {
if ((agvTaskList.size() == MAX_TASK_COUNT)) { /* 第一个任务的创建视角*/
Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList)); long lastTaskTime = agvTaskList.get(0).getCreateTime().getTime();
lastTaskTime = System.currentTimeMillis(); 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 >=TIMEOUT_MS) ){ }else if((System.currentTimeMillis() - lastTaskTime >=TIMEOUT_MS) ){
if(agvTaskList.size()>MAX_TASK_COUNT){ Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList));
List<AgvTask> newAgvTask = agvTaskList.subList(0,MAX_TASK_COUNT);
Result(agvTaskService.sendAgvTaskLXImpl(newAgvTask));
}else{
Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList));
lastTaskTime = System.currentTimeMillis();
}
} else { } else {
throw new RuntimeException("出库料箱任务未满足条件(不满足五个料箱需等待2分钟)!"); throw new RuntimeException("出库料箱任务未满足条件(不满足五个料箱需等待2分钟)!");
} }

View File

@ -2,6 +2,8 @@ package com.youchain.modules.quartz.task;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.s7connector.api.S7Connector; import com.github.s7connector.api.S7Connector;
import com.youchain.basicdata.domain.Stock;
import com.youchain.basicdata.repository.StockRepository;
import com.youchain.businessdata.rest.MoController; import com.youchain.businessdata.rest.MoController;
import com.youchain.businessdata.rest.PlcController; import com.youchain.businessdata.rest.PlcController;
import com.youchain.businessdata.service.MoService; import com.youchain.businessdata.service.MoService;
@ -10,8 +12,7 @@ import com.youchain.exception.handler.ApiResult;
import com.youchain.modules.quartz.domain.QuartzLog; import com.youchain.modules.quartz.domain.QuartzLog;
import com.youchain.modules.quartz.repository.QuartzLogRepository; import com.youchain.modules.quartz.repository.QuartzLogRepository;
import com.youchain.service.LogService; import com.youchain.service.LogService;
import com.youchain.utils.S7ConnectorUtils; import com.youchain.utils.*;
import com.youchain.utils.UrlApi;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -30,14 +31,16 @@ public class plcTask {
private final PlcController plcController; private final PlcController plcController;
private final MoService moService; private final MoService moService;
private final TaskService taskService; private final TaskService taskService;
private final StockRepository stockRepository;
private final QuartzLogRepository quartzLogRepository; private final QuartzLogRepository quartzLogRepository;
public LogService logService; public LogService logService;
@Autowired @Autowired
public plcTask(PlcController plcController,MoService moService,TaskService taskService,QuartzLogRepository quartzLogRepository) { public plcTask(PlcController plcController,MoService moService,TaskService taskService,QuartzLogRepository quartzLogRepository,StockRepository stockRepository) {
this.plcController = plcController; this.plcController = plcController;
this.moService = moService; this.moService = moService;
this.taskService = taskService; this.taskService = taskService;
this.quartzLogRepository = quartzLogRepository; this.quartzLogRepository = quartzLogRepository;
this.stockRepository = stockRepository;
} }
public synchronized void plcTask() { public synchronized void plcTask() {
@ -47,9 +50,19 @@ public class plcTask {
// String mo="LB]A0006897]240625]12125300000145]200]240625104089]]"; // String mo="LB]A0006897]240625]12125300000145]200]240625104089]]";
// String lx="05010010"; // String lx="05010010";
// LB]A0006907]240522]12125300001741]50.00]240522554318]] // LB]A0006907]240522]12125300001741]50.00]240522554318]]
// LB]A0006897]240625]1212504010001300000145]200]240625104089]] // LB]A0006897]240625]12125300000145]200]240625104089]]
String mo = S7ConnectorUtils.readMo(S7ConnectorUtils.s7Connector,12); String mo = S7ConnectorUtils.readMo(S7ConnectorUtils.s7Connector,12);
String lx = S7ConnectorUtils.readMo(S7ConnectorUtils.s7Connector,0); String lx = S7ConnectorUtils.readMo(S7ConnectorUtils.s7Connector,0);
if(mo.length()>10){
if (!mo.substring(0, 2).equals("LB")){
/*MO票不全补全MO票获取料箱吗*/
mo=lx+mo;
Stock stock = stockRepository.findFirstByStatus(BaseStatus.FREE);
if (stock!=null){
lx=stock.getCode();
}
}
}
if (mo.length()>0&&lx.length()>0){ if (mo.length()>0&&lx.length()>0){
jsonObject.put("mo",mo); jsonObject.put("mo",mo);
jsonObject.put("lx",lx); jsonObject.put("lx",lx);
@ -89,20 +102,5 @@ public class plcTask {
}else { }else {
throw new RuntimeException("数据格式错误,MO票" + mo+",料箱码"+lx+",错误信息:"); throw new RuntimeException("数据格式错误,MO票" + mo+",料箱码"+lx+",错误信息:");
} }
/*try {
S7ConnectorUtils.connect();
JSONObject jsonObject=new JSONObject();
String mo = S7ConnectorUtils.readMo(S7ConnectorUtils.s7Connector,12);
String lx = S7ConnectorUtils.readMo(S7ConnectorUtils.s7Connector,0);
if (mo.length()>0&&lx.length()>0){
jsonObject.put("mo",mo);
jsonObject.put("lx",lx);
plcController.scanMo(jsonObject+"");
}else {
throw new RuntimeException("数据格式错误:"+mo+"|"+lx);
}
} catch (Exception e) {
throw new RuntimeException("异常信息" + e.getMessage());
}*/
} }
} }

View File

@ -29,6 +29,8 @@ public interface BizStatus {
* -||- * -||-
*/ */
public static String CANCEL = "CANCEL"; public static String CANCEL = "CANCEL";
/* 放料*/
public static String PICKER_SEND = "PICKER_SEND";
/** /**
* - * -
*/ */

View File

@ -15,9 +15,9 @@ spring:
db-type: com.alibaba.druid.pool.DruidDataSource db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
# url: jdbc:log4jdbc:mysql://${DB_HOST:47.100.54.81}:${DB_PORT:53306}/${DB_NAME:hefeihvac_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false # url: jdbc:log4jdbc:mysql://${DB_HOST:47.100.54.81}:${DB_PORT:53306}/${DB_NAME:hefeihvac_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
# url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hefeihvac_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hefeihvac_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
# url: jdbc:log4jdbc:mysql://${DB_HOST:10.175.163.49}:${DB_PORT:3306}/${DB_NAME:hefeihvac_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false # url: jdbc:log4jdbc:mysql://${DB_HOST:10.175.163.49}:${DB_PORT:3306}/${DB_NAME:hefeihvac_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
url: jdbc:log4jdbc:mysql://${DB_HOST:10.173.188.206}:${DB_PORT:53306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false # url: jdbc:log4jdbc:mysql://${DB_HOST:10.173.188.206}:${DB_PORT:53306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
username: ${DB_USER:root} username: ${DB_USER:root}
# password: ${DB_PWD:Youchain@56} # password: ${DB_PWD:Youchain@56}
password: ${DB_PWD:123456} password: ${DB_PWD:123456}

View File

@ -6,7 +6,7 @@ spring:
freemarker: freemarker:
check-template-location: false check-template-location: false
profiles: profiles:
active: dev active: prod
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
data: data: