| | |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.common.utils.NodeUtils; |
| | | import com.zy.system.entity.Config; |
| | | import com.zy.system.mapper.ConfigMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | |
| | | @Resource |
| | | private LocDetlMapper locDetlMapper; |
| | | |
| | | @Resource |
| | | private ConfigMapper configMapper; |
| | | |
| | | @Override |
| | | @Transactional |
| | |
| | | // StartupDto dto = commonService.getLocNo(1, 1, param.getPalletizingNo(), null,null,null, locTypeDto); |
| | | StartupDto dto = commonService.getLocNo(iotype, param.getPalletizingNo(), locTypeDto,0); |
| | | |
| | | // 返回GWCS目标信息 |
| | | pushStaNoToGwcs(param.getPalletizingNo(),dto.getStaNo(),dto.getWorkNo(),param.getBarcode(),"gwms申请入库后推送gwcs"); |
| | | |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | |
| | | } else { |
| | | throw new CoolException(dto.getLocNo()+"目标库位已被占用"); |
| | | } |
| | | return null; |
| | | |
| | | // 返回GWCS目标信息 |
| | | pushStaNoToGwcs(param.getPalletizingNo(),dto.getStaNo(),dto.getWorkNo(),param.getBarcode(),"gwms申请入库后推送gwcs"); |
| | | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | | } else if(wrkMast.getIoType() == 12) { // 跨巷道转移入库 |
| | | |
| | | } else if(wrkMast.getSourceStaNo() == 3046 || wrkMast.getSourceStaNo() == 3042) { |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | | } |
| | | wrkMastService.updateById(wrkMast); |
| | | |
| | |
| | | if (wrkMast == null) { |
| | | throw new CoolException("工作档不存在!"); |
| | | } |
| | | if (wrkMast.getWrkSts() != 2 || wrkMast.getIoType() != 103) { |
| | | if (wrkMast.getWrkSts() != 2 || wrkMast.getIoType() != 103 && wrkMast.getIoType() != 109) { |
| | | throw new CoolException("工作档当前状态不为2/出库类型不为拣料!"); |
| | | } |
| | | // 更新工作档状态2.设备上走->42.等待码垛 |
| | |
| | | zphjcdgzVo.setWorkNo(wrkDetl.getWrkNo()); |
| | | zphjcdgzVo.setBoxType(wrkDetl.getColor()); |
| | | zphjcdgzVo.setPosition(wrkDetl.getOrigin()); |
| | | zphjcdgzVo.setCdType(wrkMast.getIoType() == 103 ? 1 : 2); |
| | | |
| | | return R.ok(zphjcdgzVo); |
| | | } |
| | |
| | | @Transactional |
| | | public R zphjCdwc(ZphjcdwcParam param) { |
| | | |
| | | if (Cools.isEmpty(param.getWorkNo(),param.getBarcode(),param.getSourceStaNo(),param.getSite())) { |
| | | if (Cools.isEmpty(param.getWorkNo(),param.getSourceStaNo(),param.getSite())) { |
| | | return R.parse("参数不能为空,请检查入参"); |
| | | } |
| | | WrkMast wrkMast = wrkMastService.selectById(param.getWorkNo()); |
| | |
| | | // 获取出库物料 |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | |
| | | // 源库位 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | |
| | | // 创建桁架理货出库的工作档 |
| | | int work = create111Work(wrkMast, wrkDetls, param.getSite(), wrkMast.getStaNo(), param.getBarcode()); |
| | | int work = create111Work(wrkMast, wrkDetls, param.getSite(), wrkMast.getStaNo(), "1001"); |
| | | |
| | | int descFlag = getType(wrkDetls); |
| | | |
| | | // get0原托盘回流信息,get1拆垛出来物料出库信息 |
| | | List<ZphjcdwcVo> zphjcdwcVos = new ArrayList<>(); |
| | | ZphjcdwcVo zphjcdwcVo1 = new ZphjcdwcVo(); |
| | | zphjcdwcVo1.setWorkNo(wrkMast.getWrkNo()); |
| | | zphjcdwcVo1.setStaNo(wrkMast.getSourceStaNo()); |
| | | zphjcdwcVo1.setSourceStaNo(param.getSourceStaNo()); |
| | | zphjcdwcVo1.setBarcode(wrkMast.getBarcode()); |
| | | zphjcdwcVos.add(zphjcdwcVo1); |
| | | |
| | | ZphjcdwcVo zphjcdwcVo2 = new ZphjcdwcVo(); |
| | | zphjcdwcVo2.setWorkNo(work); |
| | | zphjcdwcVo2.setSourceStaNo(param.getSite()); |
| | | zphjcdwcVo2.setStaNo(wrkMast.getStaNo()); |
| | | zphjcdwcVo2.setBarcode(param.getBarcode()); |
| | | zphjcdwcVo2.setDescFlag(descFlag); |
| | | zphjcdwcVos.add(zphjcdwcVo2); |
| | | |
| | | |
| | | // 保存工作主档历史档 |
| | | if (!wrkMastLogService.save(wrkMast.getWrkNo())) { |
| | | throw new CoolException("保存工作主档历史档失败"); |
| | | } |
| | | // 获取目标站 |
| | | // Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | // .eq("type_no", wrkMast.getIoType() - 50) |
| | | // .eq("stn_no", wrkMast.getSourceStaNo()) // 作业站点 = 拣料出库的目标站 |
| | | // .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | // StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | // if (Cools.isEmpty(staDesc)) { |
| | | // throw new CoolException("入库路径不存在"); |
| | | // } |
| | | // 堆垛机站点(目标站) |
| | | // Integer staNo = staDesc.getCrnStn(); |
| | | // 更新工作类型103->53 |
| | | wrkMast.setIoType(53); |
| | | wrkMast.setWrkSts(52L); // 工作状态42->52.设备上走(拆垛完成) |
| | | // 目标站点源站点转换 |
| | | wrkMast.setStaNo(oneFloorIn[wrkMast.getCrnNo()]); |
| | | wrkMast.setSourceStaNo(param.getSourceStaNo()); |
| | | |
| | | // 目标库位=源库位 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); |
| | | // 源库位清除 |
| | | wrkMast.setSourceLocNo(""); |
| | | wrkMast.setModiTime(new Date()); |
| | | // 获取备货区配置 |
| | | Config config = configMapper.selectConfigByCode("auto_stock_up"); |
| | | if (config == null) { |
| | | throw new CoolException("理货获取备货区配置错误!!!"); |
| | | } |
| | | // 前几列是备货区 |
| | | int columnNum = Integer.parseInt(config.getValue()); |
| | | |
| | | // get0原托盘回流信息,get1拆垛出来物料出库信息 |
| | | List<ZphjcdwcVo> zphjcdwcVos = new ArrayList<>(); |
| | | |
| | | ZphjcdwcVo zphjcdwcVo2 = new ZphjcdwcVo(); |
| | | zphjcdwcVo2.setWorkNo(work); |
| | | zphjcdwcVo2.setSourceStaNo(param.getSite()); |
| | | zphjcdwcVo2.setStaNo(wrkMast.getStaNo()); |
| | | zphjcdwcVo2.setBarcode(param.getSite() == 3046 ? "T1146" : "T1142"); |
| | | zphjcdwcVo2.setDescFlag(descFlag); |
| | | zphjcdwcVos.add(zphjcdwcVo2); |
| | | |
| | | // 如果从备货区来的,则不能回原库位 |
| | | if (locMast.getBay1() <= columnNum) { |
| | | |
| | | // 寻找一个新库位 |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short) 1); |
| | | StartupDto dto = commonService.getLocNo(53, param.getSourceStaNo(), locTypeDto, 0); |
| | | // 新库位 |
| | | LocMast staLocMast = locMastService.selectById(dto.getLocNo()); |
| | | |
| | | // 更新旧库位状态 O |
| | | locMast.setLocSts("O"); |
| | | locMast.setBarcode(""); |
| | | locMast.setModiTime(new Date()); |
| | | locMastService.updateById(locMast); |
| | | |
| | | // 把旧库位明细转到新库位 |
| | | locDetlService.updateLocNo(staLocMast.getLocNo(), wrkMast.getSourceLocNo()); |
| | | |
| | | // 更新新库位状态 Q |
| | | staLocMast.setLocSts("Q"); |
| | | staLocMast.setBarcode(wrkMast.getBarcode()); |
| | | staLocMast.setModiTime(new Date()); |
| | | locMastService.updateById(staLocMast); |
| | | |
| | | // 更新工作工作主档 |
| | | wrkMast.setIoType(53); |
| | | wrkMast.setWrkSts(52L); // 工作状态42->52.设备上走(拆垛完成) |
| | | // 目标站点源站点转换 |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | // 目标库位=源库位 |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | // 源库位清除 |
| | | wrkMast.setSourceLocNo(""); |
| | | wrkMast.setModiTime(new Date()); |
| | | |
| | | } else { |
| | | // 更新工作工作主档 |
| | | wrkMast.setIoType(53); |
| | | wrkMast.setWrkSts(52L); // 工作状态42->52.设备上走(拆垛完成) |
| | | wrkMast.setSourceStaNo(param.getSourceStaNo()); |
| | | wrkMast.setStaNo(oneFloorIn[wrkMast.getCrnNo()]); |
| | | // 目标库位=源库位 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); |
| | | // 源库位清除 |
| | | wrkMast.setSourceLocNo(""); |
| | | wrkMast.setModiTime(new Date()); |
| | | } |
| | | |
| | | // 更新工作主档 |
| | | wrkMastService.updateById(wrkMast); |
| | | // 修改库位状态 Q.拣料/盘点/并板再入库 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); |
| | | locMast.setLocSts("Q"); |
| | | locMast.setModiTime(new Date()); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("修改库位状态失败"); |
| | | } |
| | | |
| | | // 回库 |
| | | ZphjcdwcVo zphjcdwcVo1 = new ZphjcdwcVo(); |
| | | zphjcdwcVo1.setWorkNo(wrkMast.getWrkNo()); |
| | | zphjcdwcVo1.setStaNo(wrkMast.getStaNo()); |
| | | zphjcdwcVo1.setSourceStaNo(wrkMast.getSourceStaNo()); |
| | | zphjcdwcVo1.setBarcode(wrkMast.getBarcode()); |
| | | zphjcdwcVos.add(0,zphjcdwcVo1); |
| | | |
| | | // 下发回库的目标站点和拆垛的出库目标站点给gwcs |
| | | return R.ok(zphjcdwcVos); |
| | | } |
| | | |
| | | @Override |
| | | public R kxlhCdwc(KxlhcdwcParam param) { |
| | | |
| | | if (Cools.isEmpty(param.getWorkNo(),param.getSourceStaNo(),param.getSite())) { |
| | | return R.parse("参数不能为空,请检查入参"); |
| | | } |
| | | WrkMast wrkMast = wrkMastService.selectById(param.getWorkNo()); |
| | | if (wrkMast == null) { |
| | | throw new CoolException("工作档不存在!"); |
| | | } |
| | | if (wrkMast.getWrkSts() != 42 || wrkMast.getIoType() != 109) { |
| | | throw new CoolException("工作档当前状态不为42/出库类型不为空闲理货!"); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | |
| | | // 获取出库物料 |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | |
| | | // 获取库存物料 |
| | | List<LocDetl> locDetls = locDetlMapper.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo())); |
| | | |
| | | // 源库位 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | |
| | | List<ZphjcdwcVo> zphjcdwcVos = new ArrayList<>(); |
| | | |
| | | if (wrkDetls.size() == locDetls.size()) { // 不需要回库,拆完后剩空托盘去叠盘机 |
| | | |
| | | // 删除源库位库存明细 |
| | | locDetlMapper.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo())); |
| | | |
| | | // 修改源库位状态 |
| | | if (locMast.getLocSts().equals("R")) { |
| | | locMast.setLocSts("O"); |
| | | locMast.setBarcode(""); |
| | | locMast.setSheetNo("0"); |
| | | locMast.setModiTime(now); |
| | | locMast.setIoTime(now); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | |
| | | // 修改工作主档状态 |
| | | wrkMast.setWrkSts(15L); |
| | | wrkMast.setModiTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | |
| | | // 下发去叠盘位置 |
| | | ZphjcdwcVo zphjcdwcVo = new ZphjcdwcVo(); |
| | | zphjcdwcVo.setWorkNo(wrkMast.getWrkNo()); |
| | | zphjcdwcVo.setStaNo(3013); |
| | | zphjcdwcVo.setSourceStaNo(param.getSourceStaNo()); |
| | | zphjcdwcVo.setBarcode(wrkMast.getBarcode()); |
| | | zphjcdwcVos.add(zphjcdwcVo); |
| | | |
| | | } else { // 拆完后还有物料,需要回库 |
| | | |
| | | // 先删除库存明细,避免还未回库但组盘的先入库了 |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | locDetlMapper.delete(new EntityWrapper<LocDetl>().eq("brand",wrkDetl.getBrand())); |
| | | } |
| | | |
| | | // 修改工作主档 |
| | | wrkMast.setWrkSts(52L); |
| | | wrkMast.setIoType(59); |
| | | wrkMast.setSourceStaNo(wrkMast.getStaNo()); |
| | | wrkMast.setStaNo(oneFloorIn[wrkMast.getCrnNo()]); |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); |
| | | wrkMast.setSourceLocNo(""); |
| | | wrkMast.setModiTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | |
| | | // 修改源库位状态 |
| | | if (locMast.getLocSts().equals("R")) { |
| | | locMast.setLocSts("S"); |
| | | locMast.setModiTime(now); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | |
| | | // 下发回库命令 |
| | | ZphjcdwcVo zphjcdwcVo = new ZphjcdwcVo(); |
| | | zphjcdwcVo.setWorkNo(wrkMast.getWrkNo()); |
| | | zphjcdwcVo.setStaNo(oneFloorIn[wrkMast.getCrnNo()]); |
| | | zphjcdwcVo.setSourceStaNo(param.getSourceStaNo()); |
| | | zphjcdwcVo.setBarcode(wrkMast.getBarcode()); |
| | | zphjcdwcVos.add(zphjcdwcVo); |
| | | } |
| | | |
| | | // 组盘点 |
| | | Integer site = param.getSite(); |
| | | |
| | | // 判断组盘是否完成:两个到换盘站点的任务是否完成 |
| | | Wrapper<WrkMast> wrapper = new EntityWrapper<WrkMast>().eq("io_type", 109).ne("wrk_sts",15); |
| | | if (site == 3046) { |
| | | wrapper.in("sta_no",3045,3044); |
| | | } else { |
| | | wrapper.in("sta_no",3041,3040); |
| | | } |
| | | int count = wrkMastService.selectCount(wrapper); |
| | | |
| | | // 已经完成则下发组盘点入库命令 |
| | | if (count == 0) { |
| | | // 获取到组盘点入库任务 |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_sts", 1).eq("io_type", 1).eq("source_sta_no", site)); |
| | | ZphjcdwcVo zphjcdwcVo = new ZphjcdwcVo(); |
| | | zphjcdwcVo.setWorkNo(wrkMast1.getWrkNo()); |
| | | zphjcdwcVo.setStaNo(wrkMast1.getStaNo()); |
| | | zphjcdwcVo.setSourceStaNo(site); |
| | | zphjcdwcVo.setBarcode(site == 3046 ? "T1046" : "T1042"); |
| | | zphjcdwcVos.add(zphjcdwcVo); |
| | | } |
| | | |
| | | return R.ok(zphjcdwcVos); |
| | | } |
| | | |
| | | @Override |
| | | public R requestXhd(String barcode) { |
| | | |
| | | // 没有任务或者不是盘点任务的托盘经过则返回-1,忽略 |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode)); |
| | | if (wrkMast == null || wrkMast.getIoType() != 107) { |
| | | return R.ok(-1); |
| | | } |
| | | |
| | | // 库存明细木箱位置集合 |
| | | List<LocDetl> locDetls = locDetlMapper.selectList(new EntityWrapper<LocDetl>().eq("zpallet", barcode)); |
| | | List<String> collect1 = locDetls.stream().map(LocDetl::getOrigin).distinct().collect(Collectors.toList()); |