| | |
| | | import com.core.common.BaseRes; |
| | | import com.core.common.Cools; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.BasDevp; |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import com.zy.asrs.entity.LocMast; |
| | |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.LocDto; |
| | | import com.zy.common.model.OutLocDto; |
| | | import com.zy.common.model.TaskDto; |
| | | import com.zy.common.properties.SlaveProperties; |
| | | import com.zy.common.web.BaseController; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | |
| | | LocDto locDto = new LocDto(locDetl1.getLocNo(), locDetl1.getMatnr(), locDetl1.getMaktx(), locDetl1.getBatch(), orderDetl.getOrderNo(), |
| | | issued >= locDetl1.getAnfme() ? locDetl1.getAnfme() : issued); |
| | | int ioType = (issued >= locDetl1.getAnfme() && locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo())) == 1) ? 101 : 103; |
| | | List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl1.getLocNo(), ioType); |
| | | // List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl1.getLocNo(), ioType); |
| | | List<Integer> staNos = Utils.getOutStaNoList(); |
| | | locDto.setStaNos(staNos); |
| | | locDtos.add(locDto); |
| | | exist.add(locDetl1.getLocNo()); |
| | |
| | | taskDtos.add(taskDto); |
| | | } |
| | | } |
| | | // ----------------------------------------------------------------------------------------------- |
| | | for (TaskDto taskDto : taskDtos) { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | workService.stockOut(staNo, taskDto, getUserId()); |
| | | } |
| | | workService.stockOut(taskDtos, getUserId()); |
| | | return R.ok(); |
| | | } |
| | | |
| | |
| | | import com.zy.asrs.entity.param.StockOutParam; |
| | | import com.zy.asrs.service.BasDevpService; |
| | | import com.zy.asrs.service.WorkService; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.web.BaseController; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | @ManagerAuth() |
| | | public R availableTakeSite(){ |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | List<Integer> outSite = basDevpService.getAvailableOutSite(101); |
| | | for (Integer siteId : outSite) { |
| | | // List<Integer> outSite = basDevpService.getAvailableOutSite(101); |
| | | // for (Integer siteId : outSite) { |
| | | // Map<String, Object> map = new HashMap<>(); |
| | | // map.put("siteId", siteId); |
| | | // map.put("desc", siteId + "(全板出库口)"); |
| | | // result.add(map); |
| | | // } |
| | | // List<Integer> pickOutSite = basDevpService.getAvailableOutSite(103); |
| | | // for (Integer siteId : pickOutSite) { |
| | | // Map<String, Object> map = new HashMap<>(); |
| | | // map.put("siteId", siteId); |
| | | // map.put("desc", siteId + "(拣料出库口)"); |
| | | // result.add(map); |
| | | // } |
| | | List<Integer> outStaNoList = Utils.getOutStaNoList(); |
| | | for (Integer siteId : outStaNoList){ |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("siteId", siteId); |
| | | map.put("desc", siteId + "(全板出库口)"); |
| | | result.add(map); |
| | | } |
| | | List<Integer> pickOutSite = basDevpService.getAvailableOutSite(103); |
| | | for (Integer siteId : pickOutSite) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("siteId", siteId); |
| | | map.put("desc", siteId + "(拣料出库口)"); |
| | | result.add(map); |
| | | } |
| | | return R.ok().add(result); |
| | |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.utils.Synchro; |
| | | import com.zy.system.entity.User; |
| | | import com.zy.system.service.UserService; |
| | | import com.core.common.Cools; |
| | |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime); |
| | | } |
| | | |
| | | |
| | | public void sync(Object source) { |
| | | Synchro.Copy(source, this); |
| | | } |
| | | |
| | | } |
| | |
| | | */ |
| | | void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId); |
| | | |
| | | void stockOut(BasDevp staNo, TaskDto taskDto, Long userId); |
| | | void stockOut(List<TaskDto> taskDto, Long userId); |
| | | |
| | | /** |
| | | * 空板入库 |
| | |
| | | throw new CoolException(dto.getLocNo()+"托盘非在库状态"); |
| | | } |
| | | |
| | | Integer outSta = staNo.getDevNo(); |
| | | |
| | | // 获取路径 |
| | | StaDesc staDesc = staDescService.queryCrnStn(ioType, outSta); |
| | | // 生成工作号 |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); |
| | | // 生成工作档 |
| | |
| | | wrkMast.setIoType(ioType); // 入出库状态 |
| | | wrkMast.setIoPri(10D); // 优先级 |
| | | wrkMast.setCrnNo(locMast.getCrnNo()); |
| | | wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站 |
| | | wrkMast.setStaNo(staDesc.getStnNo()); // 目标站 |
| | | wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位 |
| | | wrkMast.setStaNo(staNo.getDevNo());// 目标站 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | |
| | | throw new CoolException(dto.getLocNo() + "库位不是在库状态"); |
| | | } |
| | | } |
| | | |
| | | //检测是否存在浅库位 |
| | | for (OutLocDto dto : dtos) { |
| | | //判断是否是深库位 触发移库任务 |
| | | if (Utils.isDeepLoc(dto.getLocNo())) { |
| | | String deepLoc = dto.getLocNo(); |
| | | String shallowLocNo = Utils.getShallowLocNo(deepLoc); |
| | | LocMast shallowLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLocNo)); |
| | | if (shallowLocMast.getLocSts().equals("F") || shallowLocMast.getLocSts().equals("D")) { |
| | | //触发移库任务 |
| | | String locTransferLocNo = commonService.getLocTransferLocNo(shallowLocNo); |
| | | if (locTransferLocNo == null) { |
| | | throw new CoolException(shallowLocNo + "浅库位搜索移库空库位失败"); |
| | | } |
| | | this.locMove(shallowLocNo, locTransferLocNo, userId); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) { |
| | | Date now = new Date(); |
| | | List<LocDto> locDtos = taskDto.getLocDtos(); |
| | | for (LocDto locDto : locDtos) { |
| | | if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) { |
| | | throw new CoolException("订单出库异常,请联系管理员"); |
| | | public void stockOut(List<TaskDto> taskDtoList, Long userId) { |
| | | for (TaskDto taskDto : taskDtoList) { |
| | | Date now = new Date(); |
| | | List<LocDto> locDtos = taskDto.getLocDtos(); |
| | | for (LocDto locDto : locDtos) { |
| | | if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) { |
| | | throw new CoolException("订单出库异常,请联系管理员"); |
| | | } |
| | | } |
| | | // 获取库位 |
| | | LocMast locMast = locMastService.selectById(taskDto.getLocNo()); |
| | | // 获取路径 |
| | | int ioType = taskDto.isAll() ? 101 : 103; |
| | | // 生成工作号 |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID |
| | | wrkMast.setIoType(ioType); // 入出库状态 |
| | | wrkMast.setIoPri(13D); // 优先级:13 |
| | | wrkMast.setCrnNo(locMast.getCrnNo()); |
| | | wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位 |
| | | wrkMast.setStaNo(taskDto.getStaNo());// 目标站 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setBarcode(locMast.getBarcode()); |
| | | wrkMast.setAppeUser(userId); // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | if (!wrkMastService.insert(wrkMast)) { |
| | | throw new CoolException("保存工作档失败,出库库位号:"+taskDto.getLocNo()); |
| | | } |
| | | // 生成工作档明细 |
| | | for (LocDto locDto : taskDto.getLocDtos()) { |
| | | if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; } |
| | | OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); |
| | | if (orderDetl == null) { |
| | | orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null); |
| | | } |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()).eq("matnr", locDto.getMatnr())); |
| | | Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr())); |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(orderDetl); |
| | | wrkDetl.setZpallet(wrkMast.getBarcode()); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setBatch(locDto.getBatch()); |
| | | wrkDetl.setOrderNo(locDto.getOrderNo()); |
| | | wrkDetl.setModel(mat.getModel()); |
| | | wrkDetl.setPrice(locDetl.getAnfme());//库存数量 |
| | | wrkDetl.setAnfme(locDto.getAnfme()); // 数量 |
| | | wrkDetl.setWeight(locDetl.getAnfme());//总数 |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setAppeUser(userId); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setModiUser(userId); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作档明细失败"); |
| | | } |
| | | // 修改订单明细 |
| | | if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) { |
| | | throw new CoolException("修改订单明细数量失败"); |
| | | } |
| | | orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); |
| | | } |
| | | // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 |
| | | locMast = locMastService.selectById(taskDto.getLocNo()); |
| | | if (locMast.getLocSts().equals("F")) { |
| | | locMast.setLocSts(ioType==101?"R":"P"); |
| | | locMast.setModiUser(userId); |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("预约库位状态失败,库位号:"+taskDto.getLocNo()); |
| | | } |
| | | } else { |
| | | throw new CoolException(taskDto.getLocNo() + "库位不是在库状态"); |
| | | } |
| | | } |
| | | // 获取库位 |
| | | LocMast locMast = locMastService.selectById(taskDto.getLocNo()); |
| | | // 获取路径 |
| | | int ioType = taskDto.isAll() ? 101 : 103; |
| | | StaDesc staDesc = staDescService.queryCrnStn(ioType, staNo.getDevNo()); |
| | | // 生成工作号 |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID |
| | | wrkMast.setIoType(ioType); // 入出库状态 |
| | | wrkMast.setIoPri(13D); // 优先级:13 |
| | | wrkMast.setCrnNo(locMast.getCrnNo()); |
| | | wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站 |
| | | wrkMast.setStaNo(staDesc.getStnNo()); // 目标站 |
| | | wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setBarcode(locMast.getBarcode()); |
| | | wrkMast.setAppeUser(userId); // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | if (!wrkMastService.insert(wrkMast)) { |
| | | throw new CoolException("保存工作档失败,出库库位号:"+taskDto.getLocNo()); |
| | | } |
| | | // 生成工作档明细 |
| | | for (LocDto locDto : taskDto.getLocDtos()) { |
| | | if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; } |
| | | OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); |
| | | if (orderDetl == null) { |
| | | orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null); |
| | | |
| | | |
| | | //检测是否存在浅库位 |
| | | for (TaskDto taskDto : taskDtoList) { |
| | | //判断是否是深库位 触发移库任务 |
| | | if (Utils.isDeepLoc(taskDto.getLocNo())) { |
| | | String deepLoc = taskDto.getLocNo(); |
| | | String shallowLocNo = Utils.getShallowLocNo(deepLoc); |
| | | LocMast shallowLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLocNo)); |
| | | if (shallowLocMast.getLocSts().equals("F") || shallowLocMast.getLocSts().equals("D")) { |
| | | //触发移库任务 |
| | | String locTransferLocNo = commonService.getLocTransferLocNo(shallowLocNo); |
| | | if (locTransferLocNo == null) { |
| | | throw new CoolException(shallowLocNo + "浅库位搜索移库空库位失败"); |
| | | } |
| | | this.locMove(shallowLocNo, locTransferLocNo, userId); |
| | | } |
| | | } |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()).eq("matnr", locDto.getMatnr())); |
| | | Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr())); |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(orderDetl); |
| | | wrkDetl.setZpallet(wrkMast.getBarcode()); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setBatch(locDto.getBatch()); |
| | | wrkDetl.setOrderNo(locDto.getOrderNo()); |
| | | wrkDetl.setModel(mat.getModel()); |
| | | wrkDetl.setPrice(locDetl.getAnfme());//库存数量 |
| | | wrkDetl.setAnfme(locDto.getAnfme()); // 数量 |
| | | wrkDetl.setWeight(locDetl.getAnfme());//总数 |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setAppeUser(userId); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setModiUser(userId); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作档明细失败"); |
| | | } |
| | | // 修改订单明细 |
| | | if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) { |
| | | throw new CoolException("修改订单明细数量失败"); |
| | | } |
| | | orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); |
| | | } |
| | | // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 |
| | | locMast = locMastService.selectById(taskDto.getLocNo()); |
| | | if (locMast.getLocSts().equals("F")) { |
| | | locMast.setLocSts(ioType==101?"R":"P"); |
| | | locMast.setModiUser(userId); |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("预约库位状态失败,库位号:"+taskDto.getLocNo()); |
| | | } |
| | | } else { |
| | | throw new CoolException(taskDto.getLocNo() + "库位不是在库状态"); |
| | | } |
| | | } |
| | | |
| | |
| | | /** |
| | | * 出库任务下发 |
| | | */ |
| | | // @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | private void execute() { |
| | | List<WrkMast> wrkMasts=wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | .eq("wrk_sts",11) |
| | | .in("io_type",11,101,103,107,110)); |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | .eq("wrk_sts", 11) |
| | | .in("io_type", 11, 101, 103, 107, 110)); |
| | | for(WrkMast wrkMast:wrkMasts){ |
| | | ReturnT<String> result = outWorkHandler.start(wrkMast); |
| | | if (!result.isSuccess()) { |
| | |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | @Transactional |
| | | public class OutWorkHandler extends AbstractHandler<String> { |
| | | |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | @Value("${wcs.address.URL}") |
| | | private String addrs; |
| | | @Value("${wcs.address.outboundTaskSend}") |
| | | private String outboundTaskSend; |
| | | @Value("${wcs.address.createOutTask}") |
| | | private String outTask; |
| | | @Value("${wcs.address.createLocMoveTask}") |
| | | private String locMoveTask; |
| | | |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | |
| | | |
| | | public synchronized ReturnT<String> start(WrkMast wrkMast) { |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | map.put("taskNo", wrkMast.getWrkNo()); |
| | | map.put("taskPriority", 10); |
| | | map.put("barcode", wrkMast.getBarcode()); |
| | | StartupDto startupDto = new StartupDto(); |
| | | startupDto.setTaskNo(wrkMast.getWrkNo()); |
| | | startupDto.setStaNo(wrkMast.getStaNo()); |
| | | startupDto.setLocNo(Utils.locToLocNo(wrkMast.getSourceLocNo())); |
| | | startupDto.setTaskPri(wrkMast.getIoPri()); |
| | | |
| | | if (wrkMast.getIoType() == 11) { |
| | | map.put("taskType", 3); |
| | | map.put("startPoint", wrkMast.getSourceLocNo()); |
| | | map.put("targetPoint", wrkMast.getLocNo()); |
| | | }else { |
| | | map.put("taskType", 2); |
| | | map.put("startPoint", wrkMast.getSourceLocNo()); |
| | | map.put("targetPoint", wrkMast.getSourceStaNo() + "-" + wrkMast.getStaNo()); |
| | | } |
| | | |
| | | String response =""; |
| | | boolean bool =false; |
| | | try { |
| | | log.info("wms派发任务给wcs出库={}", JSON.toJSONString(map)); |
| | | response = new HttpHandler.Builder() |
| | | // .setHeaders(headParam) |
| | | .setUri(addrs) |
| | | .setPath(outboundTaskSend) |
| | | .setJson(JSON.toJSONString(map)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if(jsonObject.getInteger("code") == 200){ |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMastService.updateById(wrkMast); |
| | | bool = true; |
| | | }else { |
| | | log.error("wms派发任务给wcs出库失败{},返回值={}", JSON.toJSONString(wrkMast), response); |
| | | String response = ""; |
| | | boolean bool = false; |
| | | try { |
| | | log.info("wms派发任务给wcs移库={}", JSON.toJSONString(startupDto)); |
| | | response = new HttpHandler.Builder() |
| | | .setUri(addrs) |
| | | .setPath(locMoveTask) |
| | | .setJson(JSON.toJSONString(startupDto)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code") == 200) { |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMastService.updateById(wrkMast); |
| | | bool = true; |
| | | } else { |
| | | log.error("wms派发任务给wcs移库失败{},返回值={}", JSON.toJSONString(wrkMast), response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("wms派发任务给wcs移库失败{},返回值={}", JSON.toJSONString(wrkMast), response); |
| | | } finally { |
| | | apiLogService.save("wms派发任务给wcs移库" |
| | | , addrs + locMoveTask |
| | | , null |
| | | , "127.0.0.1" |
| | | , JSON.toJSONString(startupDto) |
| | | , response |
| | | , bool |
| | | ); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("wms派发任务给wcs出库失败{},返回值={}", JSON.toJSONString(wrkMast), response); |
| | | } finally { |
| | | apiLogService.save("wms派发任务给wcs出库" |
| | | , addrs + outboundTaskSend |
| | | , null |
| | | , "127.0.0.1" |
| | | , JSON.toJSONString(map) |
| | | , response |
| | | , bool |
| | | ); |
| | | } else { |
| | | String response =""; |
| | | boolean bool =false; |
| | | try { |
| | | log.info("wms派发任务给wcs出库={}", JSON.toJSONString(startupDto)); |
| | | response = new HttpHandler.Builder() |
| | | .setUri(addrs) |
| | | .setPath(outTask) |
| | | .setJson(JSON.toJSONString(startupDto)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if(jsonObject.getInteger("code") == 200){ |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMastService.updateById(wrkMast); |
| | | bool = true; |
| | | }else { |
| | | log.error("wms派发任务给wcs出库失败{},返回值={}", JSON.toJSONString(wrkMast), response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("wms派发任务给wcs出库失败{},返回值={}", JSON.toJSONString(wrkMast), response); |
| | | } finally { |
| | | apiLogService.save("wms派发任务给wcs出库" |
| | | , addrs + outTask |
| | | , null |
| | | , "127.0.0.1" |
| | | , JSON.toJSONString(startupDto) |
| | | , response |
| | | , bool |
| | | ); |
| | | } |
| | | } |
| | | return SUCCESS; |
| | | |
| | | } |
| | | } |
| | |
| | | package com.zy.asrs.utils; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Arith; |
| | | import com.core.common.Cools; |
| | | import com.core.common.SpringUtils; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.common.model.LocGroupOrder; |
| | | import com.zy.common.properties.SlaveProperties; |
| | | |
| | |
| | | return checkOrder; |
| | | } |
| | | |
| | | public static List<Integer> getOutStaNoList() { |
| | | SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class); |
| | | return slaveProperties.getOutStaNoList(); |
| | | } |
| | | |
| | | //判断是否是深库位 |
| | | public static boolean isDeepLoc(String locNo){ |
| | | int i = getRow(locNo); |
| | |
| | | |
| | | private List<LocGroupOrder> locGroupAscOrder; |
| | | |
| | | private List<Integer> outStaNoList; |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.SpringUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.result.FindLocNoAttributeVo; |
| | |
| | | |
| | | StartupDto startupDto = new StartupDto(); |
| | | |
| | | // 获取目标站 |
| | | // Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>().eq("type_no", staDescId).eq("stn_no", sourceStaNo).eq("crn_no", locMast.getCrnNo()); |
| | | // StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | // if (Cools.isEmpty(staDesc)) { |
| | | // log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); |
| | | // throw new CoolException("入库路径不存在"); |
| | | // } else { |
| | | // BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn()); |
| | | // if (!staNo.getAutoing().equals("Y")) { |
| | | // log.error("目标站" + staDesc.getCrnStn() + "不可用"); |
| | | // throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用"); |
| | | // } |
| | | // startupDto.setStaNo(staNo.getDevNo()); |
| | | // } |
| | | String locNo = locMast.getLocNo(); |
| | | // 生成工作号 |
| | | int workNo = getWorkNo(0); |
| | |
| | | } |
| | | } |
| | | |
| | | //移库任务获取空库位 |
| | | public String getLocTransferLocNo(String locNo){ |
| | | List<Integer> locGroupDesc = Utils.getLocGroupDesc(slaveProperties, locNo); |
| | | //先找深库位 |
| | | List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").in("row1", locGroupDesc)); |
| | | if (locMastList.isEmpty()) { |
| | | //搜索浅库位 |
| | | List<Integer> locGroupAsc = Utils.getLocGroupAsc(slaveProperties, locNo); |
| | | locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").in("row1", locGroupAsc)); |
| | | } |
| | | |
| | | if (locMastList.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | LocMast locMast = locMastList.get(0); |
| | | return locMast.getLocNo(); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.result.FindLocNoAttributeVo; |
| | | import com.zy.asrs.entity.result.StorageResult; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.CodeRes; |
| | | import com.zy.common.model.LocTypeDto; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.web.param.GetLocNoReassignParam; |
| | | import com.zy.common.web.param.NotifyDto; |
| | | import com.zy.common.web.param.SearchLocParam; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.core.ReactiveTypeDescriptor; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/10/30 |
| | |
| | | return R.ok(map); |
| | | } |
| | | |
| | | @PostMapping("/reassign/loc/v1") |
| | | @ResponseBody |
| | | @Transactional |
| | | public synchronized R getLocNoReassign(@RequestBody(required = false) GetLocNoReassignParam param) { |
| | | log.info("收到WCS重新分配入库接口请求====>>入参:{}", param); |
| | | StartupDto dto = startupFullReassign(param.getTaskNo(), param.getRow()); |
| | | log.info("WCS入库接口返参:{}", dto); |
| | | return R.ok().add(dto); |
| | | } |
| | | |
| | | @PostMapping("/pakin/loc/v1") |
| | | @ResponseBody |
| | |
| | | return dto; |
| | | } |
| | | |
| | | /** |
| | | * 全板入库-重新分配 |
| | | */ |
| | | @Transactional |
| | | public StartupDto startupFullReassign(String workNo, int[] row) { |
| | | WrkMast sourceWrkMast = wrkMastService.selectByTaskNo(workNo); |
| | | if(sourceWrkMast == null) { |
| | | throw new CoolException(workNo + "工作数据不存在"); |
| | | } |
| | | |
| | | List<WrkDetl> sourceWrkDetlList = wrkDetlService.selectByWrkNo(sourceWrkMast.getWrkNo()); |
| | | if (sourceWrkDetlList.isEmpty()) { |
| | | throw new CoolException(workNo + "工作明细数据不存在"); |
| | | } |
| | | |
| | | FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(); |
| | | findLocNoAttributeVo.setMatnr(sourceWrkDetlList.get(0).getMatnr()); |
| | | |
| | | LocMast sourceLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", sourceWrkMast.getLocNo())); |
| | | if (sourceLocMast == null) { |
| | | throw new CoolException(sourceWrkMast.getLocNo() + "库位数据不存在"); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1(sourceLocMast.getLocType1()); |
| | | |
| | | StartupDto dto = commonService.getLocNoToWmsDev(1, sourceWrkMast.getSourceStaNo(), findLocNoAttributeVo, locTypeDto, sourceWrkMast.getBarcode(), row); |
| | | if (dto == null) { |
| | | throw new CoolException("找不到空库位"); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | sourceWrkMast.setIoTime(new Date()); |
| | | sourceWrkMast.setWrkSts(2L); // 工作状态:生成入库ID |
| | | sourceWrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | sourceWrkMast.setIoPri(13D); // 优先级 |
| | | sourceWrkMast.setCrnNo(dto.getCrnNo()); |
| | | sourceWrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | sourceWrkMast.setStaNo(dto.getStaNo()); |
| | | sourceWrkMast.setLocNo(loc(dto.getLocNo())); |
| | | sourceWrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.updateById(sourceWrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | |
| | | // 更新源库位状态 |
| | | if (sourceLocMast.getLocSts().equals("S")) { |
| | | sourceLocMast.setLocSts("O"); |
| | | sourceLocMast.setModiTime(now); |
| | | if (!locMastService.updateById(sourceLocMast)) { |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo() + "目标库位状态不属于入库预约中"); |
| | | } |
| | | |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(loc(dto.getLocNo())); |
| | | if (locMast.getLocSts().equals("O")) { |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo() + "目标库位已被占用"); |
| | | } |
| | | return dto; |
| | | } |
| | | |
| | | public String loc(String locNo){ |
| | | String[] split = locNo.split("-"); |
| | | return Utils.getLocNo(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2])); |
| New file |
| | |
| | | package com.zy.common.web.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class GetLocNoReassignParam { |
| | | |
| | | private String taskNo; |
| | | |
| | | //库位排 |
| | | private int[] row; |
| | | |
| | | } |
| | |
| | | driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver |
| | | url: jdbc:sqlserver://127.0.0.1:1433;databasename=qlasrs-sxk |
| | | username: sa |
| | | password: sa@123 |
| | | password: Ab!123456 |
| | | mvc: |
| | | static-path-pattern: /** |
| | | redis: |
| | |
| | | wcs-slave: |
| | | # 由浅入深 |
| | | locGroupAscOrder: [ |
| | | {rowList: [1],minBay: 2,maxBay: 60}, |
| | | {rowList: [3,4,5,6],minBay: 2,maxBay: 60}, |
| | | {rowList: [10,9,8,7],minBay: 2,maxBay: 60}, |
| | | {rowList: [10,9,8,7,6,5,4,3],minBay: 2,maxBay: 60}, |
| | | {rowList: [12,13],minBay: 2,maxBay: 60}, |
| | | {rowList: [15,14],minBay: 2,maxBay: 60}, |
| | | {rowList: [17,18,19,20,21,22,23,24],minBay: 2,maxBay: 60}, |
| | | {rowList: [2],minBay: 2,maxBay: 60}, |
| | | {rowList: [11],minBay: 2,maxBay: 60}, |
| | | {rowList: [16],minBay: 2,maxBay: 60}, |
| | | {rowList: [25,26,27,28],minBay: 2,maxBay: 60}, |
| | | {rowList: [29,30,31,32],minBay: 2,maxBay: 60}, |
| | | {rowList: [33,34,35,36],minBay: 2,maxBay: 60}, |
| | | {rowList: [37,38,39,40],minBay: 2,maxBay: 60}, |
| | | {rowList: [2,1],minBay: 2,maxBay: 60}, |
| | | {rowList: [3,4],minBay: 2,maxBay: 60}, |
| | | {rowList: [6,5],minBay: 2,maxBay: 60}, |
| | | {rowList: [7,8],minBay: 2,maxBay: 60}, |
| | | {rowList: [10,9],minBay: 2,maxBay: 60}, |
| | | {rowList: [11,12],minBay: 2,maxBay: 60}, |
| | | {rowList: [14,13],minBay: 2,maxBay: 60}, |
| | | {rowList: [15,16],minBay: 2,maxBay: 60}, |
| | | {rowList: [18,17],minBay: 2,maxBay: 60}, |
| | | {rowList: [19,20],minBay: 2,maxBay: 60}, |
| | | {rowList: [22,21],minBay: 2,maxBay: 60}, |
| | | {rowList: [23,24],minBay: 2,maxBay: 60}, |
| | | {rowList: [26,25],minBay: 2,maxBay: 60}, |
| | | {rowList: [27,28],minBay: 2,maxBay: 60}, |
| | | {rowList: [30,29],minBay: 2,maxBay: 60}, |
| | | {rowList: [31,32],minBay: 2,maxBay: 60}, |
| | | {rowList: [34,33],minBay: 2,maxBay: 60}, |
| | | {rowList: [35,36],minBay: 2,maxBay: 60}, |
| | | {rowList: [38,37],minBay: 2,maxBay: 60}, |
| | | {rowList: [39,40],minBay: 2,maxBay: 60}, |
| | | ] |
| | | outStaNoList: [1152,1169,1177] |
| | | |
| | | #wcs对接 |
| | | wcs: |