Merge branch 'phyzwms2' into phyzasrs-erp
| | |
| | | } |
| | | |
| | | agvWrkMast.setWrkSts(206L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | |
| | | return R.ok("货架离场成功"); |
| | |
| | | } |
| | | |
| | | agvWrkMast.setWrkSts(208L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | |
| | | return R.ok("货架离场成功"); |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.lang.reflect.InvocationTargetException; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Date; |
| | | import java.util.EnumSet; |
| | | import java.util.Map; |
| | | |
| | |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | agvWrkMast.setWrkSts(206L); |
| | | } |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | } |
| | | }, |
| | |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | //修改AGV工作档的工作状态为203.任务开始 |
| | | agvWrkMast.setWrkSts(203L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | } |
| | | }, |
| | |
| | | @Transactional |
| | | public R formModify(@RequestBody OrderDomainParam param){ |
| | | Order order = orderService.selectById(param.getOrderId()); |
| | | int docType = param.getDocType().intValue(); |
| | | if (order == null || order.getStatus() == 0) { |
| | | return R.error("订单不存在"); |
| | | } |
| | |
| | | // 2.重组数据 |
| | | List<DetlDto> list = new ArrayList<>(); |
| | | for (OrderDetl orderDetl : param.getOrderDetlList()) { |
| | | DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch()); |
| | | DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getAnfme(), orderDetl.getProcessSts()); |
| | | if (DetlDto.has(list, dto)) { |
| | | OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getThreeCode(),orderDetl.getDeadTime()); |
| | | item.setAnfme(item.getAnfme() + orderDetl.getAnfme()); |
| | |
| | | throw new CoolException("保存订单明细档失败"); |
| | | } |
| | | } else { |
| | | if (docType == 35 && orderDetl.getProcessSts() == 1) { |
| | | List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>() |
| | | .eq("matnr", orderDetl.getMatnr()) |
| | | .eq("order_no", orderDetl.getOrderNo()) |
| | | .eq("process_sts", 3)); |
| | | for (AgvLocDetl agvLocDetl : agvLocDetls) { |
| | | agvLocDetl.setProcessSts(1); |
| | | agvLocDetlService.updateById(agvLocDetl); |
| | | } |
| | | } |
| | | list.add(dto); |
| | | orderDetl.setOrderId(order.getId()); |
| | | orderDetl.setOrderNo(order.getOrderNo()); |
| | | orderDetl.setSource(param.getDocType().intValue()); |
| | | orderDetl.setSource(docType); |
| | | orderDetl.setCreateBy(getUserId()); |
| | | orderDetl.setCreateTime(now); |
| | | orderDetl.setUpdateBy(getUserId()); |
| | |
| | | proSts = 3; |
| | | } |
| | | |
| | | |
| | | String odNo = uuid; |
| | | if(docType.getPakin() == 1){ |
| | | uuid += "_I"; |
| | | odNo += "_I"; |
| | | }else { |
| | | uuid += "_O"; |
| | | odNo += "_O"; |
| | | } |
| | | |
| | | Order order = orderService.selectByNo(uuid); |
| | | Order order = orderService.selectByNo(odNo); |
| | | if (null == order) { |
| | | order = new Order( |
| | | String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] |
| | | uuid, // 订单编号 |
| | | odNo, // 订单编号 |
| | | null, // 单据日期 |
| | | docType.getDocId(), // 单据类型 |
| | | null, // 项目编号 |
| | |
| | | throw new CoolException("生成单据主档失败,请重新导入!"); |
| | | } |
| | | }else { |
| | | // 有原订单在的情况 |
| | | DocType orderType = docTypeService.selectById(order.getDocType()); |
| | | if (!orderType.getDocName().equals(docName)) { |
| | | throw new CoolException("新订单:" + uuid + " 与系统内的订单号相同,单据类型不同。请确认新订单单据类型!"); |
| | | } |
| | | order.setSettle(order.getSettle() == 1L ? 1L : 2L ); |
| | | orderService.updateById(order); |
| | | } |
| | |
| | | throw new CoolException("生成单据明细失败,请重新导入!"); |
| | | } |
| | | } else { |
| | | if (anfme < 0) { |
| | | throw new CoolException("订单数量不允许为负数!"); |
| | | } |
| | | if(!orderDetlService.increaseAnfme(order.getId(), matnr, null, anfme,csocode,isocode)) { |
| | | throw new CoolException("生成单据明细失败,请重新导入!"); |
| | | } |
| | | } |
| | | // 生成调拨单 |
| | | if (docType.getDocId().intValue() == 32) { |
| | | String dbUuid = "DB" + uuid; |
| | | String dbUuid = "DB" + odNo; |
| | | Order order2 = orderService.selectByNo(dbUuid); |
| | | if (null == order2) { |
| | | order2 = new Order( |
| | |
| | | // 工序为1:待加工 生成加工单 |
| | | if (proSts == 1) { |
| | | if (docType.getDocId().intValue() == 32) { |
| | | String dbUuid = "JG" + uuid; |
| | | String dbUuid = "JG" + odNo; |
| | | Order order3 = orderService.selectByNo(dbUuid); |
| | | if (null == order3) { |
| | | order3 = new Order( |
| | |
| | | import com.zy.asrs.entity.OrderDetl; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.web.BaseController; |
| | | import lombok.Synchronized; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.StopWatch; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.ArrayList; |
| | |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetl/pakout/list/authV3") |
| | | @Synchronized |
| | | @ManagerAuth |
| | | public R pakoutList3(@RequestParam(defaultValue = "1")Integer curr, |
| | | @RequestParam(defaultValue = "10")Integer limit, |
| | | @RequestParam(required = false)String orderByField, |
| | | @RequestParam(required = false)String orderByType, |
| | | @RequestParam Map<String, Object> param){ |
| | | StopWatch stopWatch = new StopWatch(); |
| | | stopWatch.start(); |
| | | EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); |
| | | excludeTrash(param); |
| | | convertLike(param, wrapper); |
| | |
| | | docIds.add(pakin.getDocId()); |
| | | } |
| | | } |
| | | |
| | | wrapper.in("source",docIds); |
| | | wrapper.ne("source",19); |
| | | Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); |
| | | for (OrderDetl record : page.getRecords()) { |
| | | Double sumAnfme = agvLocDetlService.getSumAnfme(record.getMatnr(), record.getThreeCode()); |
| | | record.setStock(sumAnfme == null ? 0 : sumAnfme); |
| | | } |
| | | |
| | | stopWatch.stop(); |
| | | System.out.println(stopWatch.getTotalTimeSeconds()); |
| | | return R.ok(page); |
| | | } |
| | | |
| | |
| | | } else { |
| | | Double anfme = agvWrkDetl.getAnfme() + pick.getCount(); |
| | | agvWrkDetl.setAnfme(anfme); |
| | | agvWrkDetl.setModiTime(new Date()); |
| | | agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("matnr",agvWrkDetl.getMatnr()).eq("three_code",agvWrkDetl.getThreeCode()).eq("supp_code",pick.getSuppCode())); |
| | | |
| | | } |
| | |
| | | } |
| | | if (agvLocDetls.size() == sameNumber) { |
| | | agvWrkMast.setIoType(101); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo())); |
| | | } |
| | | |
| | |
| | | if (ioType == 12 && locMast.getFloor() == 1 && floor != 4 && agvLocMast.getFloor() != 1) { |
| | | List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo())); |
| | | for (AgvLocDetl agvLocDetl : agvLocDetls) { |
| | | OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("order_no", "DB" + agvLocDetl.getOrderNo())); |
| | | OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("source", 33)); |
| | | if (Cools.isEmpty(orderDetl)) { |
| | | throw new CoolException("当前物料的调拨单不存在!"); |
| | | } |
| | | orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme()); |
| | | if (!orderDetlService.updateById(orderDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | |
| | | if (!agvWrkMast.getBarcode().equals(param.getBarcode())) { |
| | | throw new CoolException("当前货架码与任务不匹配"); |
| | | } |
| | | if (!agvWrkMast.getWrkSts().equals(207L)) { |
| | | throw new CoolException("工作状态不符合离场条件"); |
| | | if (!agvWrkMast.getWrkSts().equals(207L) && !agvWrkMast.getWrkSts().equals(205L)) { |
| | | throw new CoolException("当前工作状态:" + agvWrkMast.getWrkSts$() +"不符合离场条件"); |
| | | } |
| | | if (agvWrkMast.getWrkSts().equals(205L)) { |
| | | // 库位 -- 接驳位 / 库位 |
| | | if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | // 接驳位 -- 库位 |
| | | } else { |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | } |
| | | |
| | | // 接驳位 -- 库位 |
| | | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); |
| | | // 库位 -- 接驳位 / 库位 |
| | | } else { |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | } |
| | | } |
| | | |
| | | //生成AGV工作历史档 + 生成AGV工作明细历史档 |
| | |
| | | } |
| | | } |
| | | // 更新站点状态 |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | // agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | // 更新源库位状态 |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); |
| | | |
| | |
| | | if (!agvWrkMast.getBarcode().equals(param.getBarcode())) { |
| | | throw new CoolException("当前货架码与任务不匹配"); |
| | | } |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMast.setWrkSts(213L); |
| | | agvWrkMast.setSourceLocNo(""); |
| | | if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { |
| | |
| | | throw new CoolException("当前工作类型不能空架进场"); |
| | | } |
| | | agvWrkMast.setWrkSts(214L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMast.setSourceLocNo(param.getDevNo()); |
| | | if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { |
| | | throw new CoolException("更新工作档失败"); |
| | |
| | | String locNo = agvWrkMast.getLocNo(); |
| | | agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo()); |
| | | agvWrkMast.setSourceLocNo(locNo); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMast.setIoTime(now); |
| | | agvWrkMast.setLogErrMemo("createWaitPainWrkMastStart"); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | |
| | | } |
| | | if (wrkMast.getIoType() == 108) { |
| | | wrkMast.setIoType(111); |
| | | wrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.update(wrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo)); |
| | | } else if(wrkMast.getIoType() == 111) { |
| | | wrkMast.setIoType(108); |
| | | wrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.update(wrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo)); |
| | | } |
| | | |
| | |
| | | //判断要修改的工作档状态是否合理,如果不合理则抛出异常 |
| | | checkWrkSts(agvWrkMast,wrkSts); |
| | | agvWrkMast.setWrkSts(wrkSts); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | this.updateById(agvWrkMast); |
| | | } |
| | | |
| | |
| | | agvWrkMast.setLocNo(locMast.getLocNo()); |
| | | agvWrkMast.setWrkSts(201L); |
| | | agvWrkMast.setLogErrMemo("startAllcationIn"); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | // 更目标库位 |
| | | locMast.setLocSts("S"); |
| | |
| | | /* |
| | | 定时处理AGV工作档中工作状态为205.工作完成 且 (1.入库 || 53,拣料入库 || 57.盘点入库 || 10.空板入库 || 11.单层移库 || 12.跨层移库 || 108.自动调拨 || 109.手动调拨)的数据 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void excutePutwayWrk(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 205) |
| | |
| | | /* |
| | | 定时处理AGV工作档中工作状态为206.出库完成 且 (101.出库 || 110.空板出库) |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void excuteCarryWrk(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 206) |
| | |
| | | /* |
| | | 定时处理AGV工作档中工作状态为206.出库完成 且 (101.出库 || 110.空板出库) |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void excuteCarryWrk2(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 208) |
| | |
| | | putaway:上架 |
| | | 定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void startPutwayWrk(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) |
| | | ,new EntityWrapper<AgvWrkMast>() |
| | |
| | | putaway:上架 |
| | | 定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void startAllcationIn(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) |
| | | ,new EntityWrapper<AgvWrkMast>() |
| | |
| | | carry:搬运,统指出库、移库、点到点搬运等 |
| | | 定时处理AGV工作档中工作状态为21.生成出库任务 且(出库类型为 101.出库 || 103.拣料出库 || 11.库格移栽 || 110.空板出库 || 107.盘点出库)的数据 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void startCarryWrk(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) |
| | | ,new EntityWrapper<AgvWrkMast>() |
| | |
| | | /* |
| | | 自动生成空板出库任务 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void autoEmptyOut(){ |
| | | boolean packageEmptyAutoOUt = Cools.eq("Y",Parameter.get().getPackageEmptyAutoOUt()); |
| | | boolean mateEmptyAutoOut = Cools.eq("Y",Parameter.get().getMateEmptyAutoOut()); |
| | |
| | | WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectOne(new EntityWrapper<WrkMastExecute>().eq("io_type", 121).eq("wrk_no", agvWrkMast.getWrkNo().longValue())); |
| | | if (!Cools.isEmpty(wrkMastExecute) && wrkMastExecute.getWrkSts()==3L && wrkMastExecute.getNowPosition()==3){ |
| | | agvWrkMast.setWrkSts(205L);//任务完成 |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //生成agv_wrk_mast_execute任务历史档 |
| | | wrkMastExecuteLogService.save(wrkMastExecute); |
| | |
| | | * ioType 108.自动调拨 |
| | | * crnNo :2目标楼层 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | private synchronized void execute2(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 22) |
| | |
| | | @Autowired |
| | | private NotifyLogHandler notifyLogHandler; |
| | | |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute(){ |
| | | ReturnT<String> returnT = notifyLogHandler.start(); |
| | | if (!returnT.isSuccess()) { |
| | |
| | | package com.zy.asrs.task; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.AgvLocDetl; |
| | | import com.zy.asrs.entity.Order; |
| | | import com.zy.asrs.entity.OrderDetl; |
| | | import com.zy.asrs.service.AgvLocDetlService; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.OrderDetlService; |
| | | import com.zy.asrs.service.OrderService; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.task.handler.OrderSyncHandler; |
| | |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | | @Autowired |
| | | private AgvLocDetlService agvLocDetlService; |
| | | |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | |
| | | @Scheduled(cron = "0 0 1 * * ? ") |
| | | public void clearApiLog(){ |
| | | public void clearApiLog() { |
| | | try { |
| | | apiLogService.clearWeekBefore(); |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | @Async("orderThreadPool") |
| | | public void completeAndReport(){ |
| | | //@Async("orderThreadPool") |
| | | public void completeAndReport() { |
| | | String erpReport = Parameter.get().getErpReport(); |
| | | if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) { |
| | | List<Order> orders = orderService.selectComplete(); |
| | | for (Order order : orders) { |
| | | //如果是加工单则进行判断 |
| | | if (order.getDocType() == 33) { |
| | | //查询库存中是否存在该订单的物料信息,存在则不处理该订单 |
| | | List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId()); |
| | | Boolean flag = false; |
| | | for (OrderDetl orderDetl : orderDetlList) { |
| | | List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("matnr", orderDetl.getMatnr()).eq("three_code", orderDetl.getThreeCode())); |
| | | if (!Cools.isEmpty(agvLocDetls)) { |
| | | //只要有一项订单明细存在,则标识为true,跳过该订单 |
| | | flag = true; |
| | | } |
| | | } |
| | | if (flag) { |
| | | continue; |
| | | } |
| | | } |
| | | ReturnT<String> result = orderSyncHandler.start(order); |
| | | if (!result.isSuccess()) { |
| | | log.error("单据[orderNo={}]上报erp失败", order.getOrderNo()); |
| | |
| | | 定时查询状态为2.作业中的单据,检查是否完成 |
| | | */ |
| | | @Scheduled(cron = "0 */1 * * * ? ") |
| | | public void completeOrder(){ |
| | | public void completeOrder() { |
| | | List<Order> orderList = orderService.selectList(new EntityWrapper<Order>().eq("settle", 2)); |
| | | orderList.forEach(order -> { |
| | | orderService.checkComplete(order.getOrderNo()); |
| | |
| | | @Autowired |
| | | private OverYearLogHandler overYearLogHandler; |
| | | |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute(){ |
| | | ReturnT<String> returnT = overYearLogHandler.start(); |
| | | if (!returnT.isSuccess()) { |
| | |
| | | @Autowired |
| | | private PlcLogHandler plcLogHandler; |
| | | |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute(){ |
| | | ReturnT<String> returnT = plcLogHandler.start(); |
| | | if (!returnT.isSuccess()) { |
| | |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute(){ |
| | | List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData(); |
| | | if (wrkMasts.isEmpty()) { |
| | |
| | | } |
| | | |
| | | |
| | | agvWrkMast.setModiTime(new Date()); |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | } |
| | | // else { |
| | | // agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); |
| | | // if (!agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { |
| | | // agvWrkMast.setSourceLocNo(""); |
| | | // } |
| | | // agvWrkMastService.updateById(agvWrkMast); |
| | | // } |
| | | |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | if (agvWrkMast.getIoType() == 110) { |
| | |
| | | } |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | |
| | | } |
| | | |
| | | agvWrkMast.setWrkSts(202L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //修改AGV入库通知档状态入出状态为Y |
| | |
| | | Map<String, Object> devNoMap = devNoMaps.get(0); |
| | | if((int)devNoMap.get("num") < maxWrokNum){ |
| | | agvWrkMast.setLocNo(devNoMap.get("dev_no").toString()); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | log.info("after:" + devNoMap.toString() + ", wrkNo:" + agvWrkMast.getWrkNo() + ", locNo: " + agvWrkMast.getLocNo()); |
| | | } |
| | |
| | | try{ |
| | | if (wrkMastExecuteService.insert(wrkMastExecute)){ |
| | | agvWrkMast.setWrkSts(agvWrkMast.getWrkSts()+1); |
| | | agvWrkMast.setAppeTime(new Date()); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | } |
| | | }catch (Exception e){ |
| | |
| | | throw new CoolException("当前库位正在进行入库,进行下一次轮询"); |
| | | } |
| | | agvWrkMast.setWrkSts(201L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMast.setLocNo(locMast.getLocNo()); |
| | | agvWrkMast.setLogErrMemo("start2-doAutoMove2"); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | |
| | | agvWrkMast.setWrkSts(201L); |
| | | agvWrkMast.setLocNo(locMast.getLocNo()); |
| | | agvWrkMast.setLogErrMemo("start2-doAutoMove2"); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //更新目标库位状态 |
| | | updateAgvLocMast(locMast,"S"); |
| | |
| | | } |
| | | agvWrkMast.setWrkSts(201L); |
| | | agvWrkMast.setLocNo(devpNo.getDevNo()); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMast.setLogErrMemo("start3-doHandMove2"); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | updateAgvBasDevp(devpNo,"S",null,agvWrkMast.getBarcode()); |
| | | return SUCCESS; |
| | | } |
New file |
| | |
| | | package com.zy.common.config; |
| | | |
| | | |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.scheduling.annotation.SchedulingConfigurer; |
| | | import org.springframework.scheduling.config.ScheduledTaskRegistrar; |
| | | |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.ScheduledExecutorService; |
| | | |
| | | @Configuration |
| | | public class ScheduleConfig implements SchedulingConfigurer { |
| | | |
| | | @Override |
| | | public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { |
| | | taskRegistrar.setScheduler(Executors.newScheduledThreadPool(12)); |
| | | } |
| | | } |
| | |
| | | this.anfme = anfme; |
| | | } |
| | | |
| | | public DetlDto(String matnr, Double anfme,Integer processSts) { |
| | | this.matnr = matnr; |
| | | this.anfme = anfme; |
| | | this.processSts = processSts; |
| | | } |
| | | |
| | | public DetlDto(String matnr, String batch) { |
| | | this.matnr = matnr; |
| | | this.batch = batch; |
| | |
| | | if(!Cools.isEmpty(agvWrkMast) && agvWrkMast.getIoType() == 101){ |
| | | //将工作党状态改为货架离场 |
| | | agvWrkMast.setWrkSts(206L); |
| | | agvWrkMast.setModiTime(new Date()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | // //发送货架立场请求,完成工作档 |
| | | // List<AgvWrkMast> agvWrkMastList = new ArrayList<>(); |
| | |
| | | cols: [[ |
| | | {type: 'checkbox'} |
| | | ,{field: 'wrkNo', align: 'center',title: '工作号',sort: true, width: 85} |
| | | ,{field: 'ioTime$', align: 'center',title: '工作时间',sort: true, width: 160} |
| | | ,{field: 'modiTime$', align: 'center',title: '工作时间',sort: true, width: 160} |
| | | ,{field: 'wrkSts$', align: 'center',title: '工作状态'} |
| | | ,{field: 'ioType$', align: 'center',title: '入出库类型'} |
| | | ,{field: 'ioPri', align: 'center',title: '优先级',width: 80} |
| | |
| | | // ,{field: 'crnStrTime$', align: 'center',title: '堆垛机启动时间'} |
| | | // ,{field: 'crnEndTime$', align: 'center',title: '堆垛机停止时间'} |
| | | // ,{field: 'refIotime$', align: 'center',title: '拣料时间'} |
| | | ,{field: 'appeTime$', align: 'center',title: '开始时间', hide:false, width: 160} |
| | | ,{field: 'modiUser$', align: 'center',title: '修改人员', hide:true} |
| | | ,{field: 'modiTime$', align: 'center',title: '修改时间', hide:true, width: 160} |
| | | // ,{field: 'memo', align: 'center',title: '备注'} |
| | |
| | | ,{field: 'sourceLocNo', align: 'center',title: '源库位'} |
| | | ,{field: 'locNo', align: 'center',title: '目标库位'} |
| | | ,{field: 'modiUser$', align: 'center',title: '修改人员', hide:true} |
| | | ,{field: 'modiTime$', align: 'center',title: '修改时间', hide:true} |
| | | ,{field: 'appeTime$', align: 'center',title: '开始时间', hide:false} |
| | | ,{field: 'barcode', align: 'center',title: '货架码'} |
| | | ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 80} |
| | | ]], |