| | |
| | | @RequestBody ZwmsOutLocWorkDto param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | return R.ok(openService.zwmsOutLocWork(param)); |
| | | return openService.zwmsOutLocWork(param); |
| | | } |
| | | |
| | | @PostMapping("/ckjgsb") |
| | |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.StockOutParam; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.model.LocDetlDto; |
| | | import com.zy.common.model.LocDto; |
| | | import com.zy.common.model.TaskDto; |
| | | import com.zy.common.model.enums.IoWorkType; |
| | | import com.zy.common.web.BaseController; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | |
| | | if (Cools.isEmpty(ids)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | |
| | | // 订单明细 |
| | | List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids); |
| | | if (orderDetls.isEmpty()) { |
| | | return R.parse("请选择数据"); |
| | | } |
| | | |
| | | // 获取订单主表 |
| | | Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderDetls.get(0).getOrderNo())); |
| | | if (order == null) { |
| | | return R.parse("订单数据为空"); |
| | | } |
| | | |
| | | List<LocDto> locDtos = new ArrayList<>(); |
| | | |
| | | // for (OrderDetl orderDetl : orderDetls) { |
| | | // if (orderDetl.getAnfme()-orderDetl.getWorkQty()-orderDetl.getQty()==0.0){ |
| | | // continue; |
| | | // } |
| | | // LocDto locDto = new LocDto(orderDetl.getManu(), orderDetl.getMatnr(), orderDetl.getMaktx(),orderDetl.getModel(),orderDetl.getSpecs(), |
| | | // orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getBarcode(), orderDetl.getOrderNo(),orderDetl.getAnfme()); |
| | | // locDto.setOrderDetlId(orderDetl.getId()); |
| | | // locDto.setTkType(orderDetl.getTkType()); |
| | | // locDtos.add(locDto); |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | Set<String> exist = new HashSet<>(); |
| | | |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D); |
| | | if (issued <= 0.0D) { continue; } |
| | | // List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist); |
| | | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("batch",orderDetl.getBatch()).eq("model",orderDetl.getModel())); |
| | | for (LocDetl locDetl : locDetls) { |
| | | if (issued > 0) { |
| | | LocDto locDto = new LocDto(orderDetl.getManu(), orderDetl.getMatnr(), orderDetl.getMaktx(),orderDetl.getModel(),orderDetl.getSpecs(), |
| | | orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getBarcode(), orderDetl.getOrderNo(),orderDetl.getAnfme()); |
| | | // LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), |
| | | // issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued); |
| | | // List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103); |
| | | List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103); |
| | | |
| | | locDto.setLocNo(locDetl.getLocNo()); |
| | | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("brand",orderDetl.getBrand())); |
| | | if (issued > 0 && !locDetls.isEmpty()) { |
| | | // 根据单据类型返回出库口列表 21出库口,22盘点口,23反修品出库口 |
| | | List<Integer> staNos = new ArrayList<>(); |
| | | if (order.getDocType() == 21) { |
| | | staNos.add(3077); |
| | | staNos.add(3106); |
| | | } else if(order.getDocType() == 22) { |
| | | staNos.add(3092); |
| | | staNos.add(3102); |
| | | staNos.add(3095); |
| | | } else if(order.getDocType() == 23) { |
| | | staNos.add(3041); |
| | | } |
| | | LocDto locDto = new LocDto(); |
| | | locDto.setLocNo(locDetls.get(0).getLocNo()); |
| | | // wrkDetl.setMatnr(roll.getSpecs()); // 规格 |
| | | // wrkDetl.setMaktx(roll.getSpecs()); //规格 |
| | | locDto.setBatch(locDetl.getBatch()); // 箱号 |
| | | locDto.setModel(locDetl.getModel()); // 卷号 |
| | | locDto.setBrand(""); // 木箱类型 |
| | | locDto.setOrigin(locDetl.getOrigin()); // 木箱在托盘位置 |
| | | locDto.setWeight(locDetl.getWeight()); // 净重 |
| | | locDto.setVolume(locDetl.getVolume()); // 毛重 |
| | | locDto.setPrice(locDetl.getPrice()); |
| | | locDto.setSpecs(locDetl.getSpecs()); |
| | | locDto.setZpallet(locDetl.getZpallet()); |
| | | // locDto.setBatch(locDetl.getBatch()); // 箱号 |
| | | // locDto.setModel(locDetl.getModel()); // 卷号 |
| | | locDto.setBrand(orderDetl.getBrand()); // 包装组号 |
| | | // locDto.setOrigin(locDetl.getOrigin()); // 木箱在托盘位置 |
| | | // locDto.setWeight(locDetl.getWeight()); // 净重 |
| | | // locDto.setVolume(locDetl.getVolume()); // 毛重 |
| | | // locDto.setPrice(locDetl.getPrice()); |
| | | // locDto.setSpecs(locDetl.getSpecs()); |
| | | // locDto.setZpallet(locDetl.getZpallet()); |
| | | locDto.setOrderNo(orderDetl.getOrderNo()); |
| | | locDto.setStaNos(staNos); |
| | | locDto.setOrderDetlId(orderDetl.getId()); |
| | | locDtos.add(locDto); |
| | | exist.add(locDetl.getLocNo()); |
| | | // 剩余待出数量递减 |
| | | issued = issued - locDetl.getAnfme(); |
| | | // exist.add(locDetl.getLocNo()); |
| | | // // 剩余待出数量递减 |
| | | // issued = issued - locDetl.getAnfme(); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | if (issued > 0) { |
| | | LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued); |
| | | locDto.setLack(Boolean.TRUE); |
| | | locDtos.add(locDto); |
| | | } |
| | | // if (issued > 0) { |
| | | // LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued); |
| | | // locDto.setLack(Boolean.TRUE); |
| | | // locDtos.add(locDto); |
| | | // } |
| | | } |
| | | return R.ok().add(locDtos); |
| | | } |
| | |
| | | |
| | | Thread.sleep(1000L); |
| | | |
| | | List<TaskDto> taskDtos = new ArrayList<>(); |
| | | // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务 |
| | | List<StockOutParam> stockOutParams = new ArrayList<>(); |
| | | for (LocDto locDto : locDtos) { |
| | | if (locDto.isLack()) { continue; } |
| | | TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto); |
| | | if (TaskDto.has(taskDtos, taskDto)) { |
| | | TaskDto dto = TaskDto.find(taskDtos, taskDto); |
| | | assert dto != null; |
| | | dto.getLocDtos().addAll(taskDto.getLocDtos()); |
| | | } else { |
| | | taskDtos.add(taskDto); |
| | | boolean flag1 = true; |
| | | for(StockOutParam stockOutParam: stockOutParams) { |
| | | if(stockOutParam.getOutSite().equals(locDto.getStaNo())) { // 有一样的出库口 |
| | | List<StockOutParam.LocDetl> locDetls = new ArrayList<>(); |
| | | List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("brand", locDto.getBrand())); |
| | | for(LocDetl locDetl:locDetls1) { |
| | | StockOutParam.LocDetl locDetl1 = new StockOutParam.LocDetl(); |
| | | locDetl1.setLocNo(locDetl.getLocNo()); |
| | | locDetl1.setBrand(locDetl.getBrand()); |
| | | locDetl1.setModel(locDetl.getModel()); |
| | | locDetl1.setCount(locDetl.getAnfme()); |
| | | locDetls.add(locDetl1); |
| | | } |
| | | stockOutParam.getLocDetls().addAll(locDetls); |
| | | flag1 = false; |
| | | break; |
| | | } |
| | | } |
| | | if(flag1) { // 没有一样的出库口 |
| | | StockOutParam stockOutParam = new StockOutParam(); |
| | | stockOutParam.setOutSite(locDto.getStaNo()); |
| | | stockOutParam.setOrderNo(locDto.getOrderNo()); |
| | | List<StockOutParam.LocDetl> locDetls = new ArrayList<>(); |
| | | List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("brand", locDto.getBrand())); |
| | | for(LocDetl locDetl:locDetls1) { |
| | | StockOutParam.LocDetl locDetl1 = new StockOutParam.LocDetl(); |
| | | locDetl1.setLocNo(locDetl.getLocNo()); |
| | | locDetl1.setBrand(locDetl.getBrand()); |
| | | locDetl1.setModel(locDetl.getModel()); |
| | | locDetl1.setCount(locDetl.getAnfme()); |
| | | locDetls.add(locDetl1); |
| | | } |
| | | stockOutParam.setLocDetls(locDetls); |
| | | stockOutParams.add(stockOutParam); |
| | | } |
| | | } |
| | | // ----------------------------------------------------------------------------------------------- |
| | | for (TaskDto taskDto : taskDtos) { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | workService.stockOut(staNo, taskDto, getUserId()); |
| | | |
| | | for(StockOutParam stockOutParam :stockOutParams) { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(stockOutParam.getOutSite()); |
| | | // 获取库位明细 |
| | | List<LocDetlDto> locDetlDtos = new ArrayList<>(); |
| | | for (StockOutParam.LocDetl paramLocDetl : stockOutParam.getLocDetls()) { |
| | | LocDetl one = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no",paramLocDetl.getLocNo()) |
| | | .eq("brand",paramLocDetl.getBrand()).eq("model",paramLocDetl.getModel())); |
| | | if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount(), stockOutParam.getOrderNo())); |
| | | } |
| | | if (!locDetlDtos.isEmpty()) { |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); |
| | | if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") ){ |
| | | // 根据订单类型判断出库类型 |
| | | Order order = orderService.selectByNo(stockOutParam.getOrderNo()); |
| | | |
| | | // 启动出库开始 |
| | | workService.stockOut(staNo, locDetlDtos, order.getDocType() == 22 ? IoWorkType.CHECK_OUT : null, getUserId()); |
| | | }else { |
| | | throw new CoolException("所选库位存在状态不为F、D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$()); |
| | | } |
| | | } else { |
| | | throw new CoolException("库存不存在"); |
| | | } |
| | | } |
| | | |
| | | // List<TaskDto> taskDtos = new ArrayList<>(); |
| | | // // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务 |
| | | // for (LocDto locDto : locDtos) { |
| | | // if (locDto.isLack()) { continue; } |
| | | // TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto); |
| | | // if (TaskDto.has(taskDtos, taskDto)) { |
| | | // TaskDto dto = TaskDto.find(taskDtos, taskDto); |
| | | // assert dto != null; |
| | | // dto.getLocDtos().addAll(taskDto.getLocDtos()); |
| | | // } else { |
| | | // taskDtos.add(taskDto); |
| | | // } |
| | | // } |
| | | // ----------------------------------------------------------------------------------------------- |
| | | // for (TaskDto taskDto : taskDtos) { |
| | | // BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | // workService.stockOut(staNo, taskDto, getUserId()); |
| | | // } |
| | | // |
| | | // stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId); |
| | | return R.ok(); |
| | | } |
| | | |
New file |
| | |
| | | package com.zy.asrs.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author pang.jiabao |
| | | * @description 上报单据出库结果给MES |
| | | * @createDate 2024/8/27 16:48 |
| | | */ |
| | | @Data |
| | | public class ReportMesOrderResult { |
| | | private String groupNo; |
| | | private Integer qty; |
| | | |
| | | public ReportMesOrderResult(String brand, Integer qty) { |
| | | this.groupNo = brand; |
| | | this.qty = qty; |
| | | } |
| | | } |
| | |
| | | |
| | | private String orderType; // 订单类型 |
| | | |
| | | private List<Rolls> matDetails; |
| | | List<String> groups; // 包装组号列表 |
| | | |
| | | @Data |
| | | public static class Rolls{ |
| | | private String rollNo; // 卷号 |
| | | private String boxNo; // 箱号 |
| | | private String specs; // 规格 |
| | | private Integer splices; // 接头/个 |
| | | } |
| | | // private List<Rolls> matDetails; |
| | | // |
| | | // @Data |
| | | // public static class Rolls{ |
| | | // private String rollNo; // 卷号 |
| | | // private String boxNo; // 箱号 |
| | | // private String specs; // 规格 |
| | | // private Integer splices; // 接头/个 |
| | | // } |
| | | |
| | | } |
| | |
| | | int increaseQtyByOrderNo(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("qty")Double qty); |
| | | |
| | | int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty); |
| | | |
| | | void updateOrderDetlByGroupNo(@Param("orderNo") String orderNo,@Param("brand") String brand, @Param("count") double count); |
| | | |
| | | void updateOrderDetlQtyByGroupNo(@Param("orderNo") String orderNo,@Param("brand") String brand); |
| | | } |
| | |
| | | int addToLogTable(Order order); |
| | | |
| | | List<Order> selectorderNoL(@Param("orderNo")String orderNo); |
| | | |
| | | void updateSettleByOrderNo(@Param("orderNo") String orderNo, @Param("status") long status, @Param("userId") Long userId); |
| | | } |
| | |
| | | /** |
| | | * ZWMS接收MES下发出库任务 |
| | | */ |
| | | String zwmsOutLocWork(ZwmsOutLocWorkDto param); |
| | | R zwmsOutLocWork(ZwmsOutLocWorkDto param); |
| | | |
| | | /** |
| | | * 货物到达出库口以后,上报出库结果 |
| | |
| | | public R pdaFxprk(FxprkParam param, Long userId) { |
| | | |
| | | // 根据包装组号获取到木箱卷信息 |
| | | List<Mat> list = matService.selectList(new EntityWrapper<Mat>().in("brand", param.getBoxList().stream().map(FxprkParam.Box::getPackageGroupNo).collect(Collectors.toList()))); |
| | | List<String> groupNos = param.getBoxList().stream().map(FxprkParam.Box::getPackageGroupNo).collect(Collectors.toList()); |
| | | List<Mat> list = matService.selectList(new EntityWrapper<Mat>().in("brand", groupNos)); |
| | | if (list.isEmpty()) { |
| | | throw new CoolException("没有查询到该包装组号信息:" + param.getBoxList().toString()); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // 一楼反修品入库的木箱通过包装组号需给mes推送待判 |
| | | pushDpToMes(groupNos); |
| | | |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")) { |
| | |
| | | } |
| | | return R.ok("入库成功"); |
| | | } |
| | | |
| | | /** |
| | | * 一楼反修品入库的木箱通过包装组号需给mes推送待判 |
| | | */ |
| | | private void pushDpToMes(List<String> groupNos) { |
| | | boolean success = false; |
| | | // 获取请求头 |
| | | Map<String,Object> headers = new HashMap<>(); |
| | | headers.put("digi-type","sync "); |
| | | headers.put("digi-protocol","raw"); |
| | | headers.put("digi-datakey"," XCommon.ImportData"); |
| | | |
| | | // 构造请求体 |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("groupNos", groupNos); |
| | | String body = jsonObject.toJSONString(); |
| | | |
| | | String response = ""; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.MES_IP_PORT) |
| | | .setPath(MesConstant.MES_DP_URL) |
| | | .setHeaders(headers) |
| | | .setJson(body) |
| | | .build() |
| | | .doPost(); |
| | | if (!Cools.isEmpty(response)) { |
| | | JSONObject jsonObject1 = JSONObject.parseObject(response); |
| | | int code = (int) jsonObject1.get("code"); |
| | | String msg = (String) jsonObject1.get("msg"); |
| | | if (code != 200) { |
| | | throw new CoolException(msg); |
| | | } |
| | | success = true; |
| | | } else { |
| | | log.error("返修品入库给mes推送待判失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); |
| | | throw new CoolException("返修品入库给mes推送待判失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("返修品入库给mes推送待判异常:{}", e.getMessage()); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "返修品入库给mes推送待判", |
| | | MesConstant.MES_IP_PORT + MesConstant.MES_DP_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | body, |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { |
| | | log.error("", e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public boolean pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo,String barcode) { |
| | | boolean success = false; |
| | | // 获取请求头 |
| | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public String zwmsOutLocWork(ZwmsOutLocWorkDto param) { |
| | | public R zwmsOutLocWork(ZwmsOutLocWorkDto param) { |
| | | |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | if (!Cools.isEmpty(order)) { |
| | |
| | | |
| | | DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE); |
| | | Date now = new Date(); |
| | | |
| | | // 单据主档 |
| | | order = new Order( |
| | | String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] |
| | |
| | | now, // 修改时间 |
| | | null // 备注 |
| | | ); |
| | | |
| | | if (!orderService.insert(order)) { |
| | | throw new CoolException("生成单据主档失败,请联系管理员"); |
| | | } |
| | | |
| | | // 单据明细档 |
| | | List<DetlDto> list = new ArrayList<>(); |
| | | List<ZwmsOutLocWorkDto.Rolls> orderDetails = param.getMatDetails(); |
| | | for (ZwmsOutLocWorkDto.Rolls detail : orderDetails) { |
| | | DetlDto dto = new DetlDto(detail.getRollNo(), detail.getBoxNo(), 1.0); |
| | | dto.setOrderNo(detail.getSpecs()); |
| | | dto.setSplices(detail.getSplices()); |
| | | if (DetlDto.has(list, dto)) { |
| | | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch()); |
| | | assert detlDto != null; |
| | | detlDto.setAnfme(detlDto.getAnfme() + 1); |
| | | } else { |
| | | list.add(dto); |
| | | } |
| | | } |
| | | for (DetlDto detlDto : list) { |
| | | // Mat mat = matService.selectByMatnr(detlDto.getMatnr()); |
| | | for (String groupNo : param.getGroups()) { |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | // if (Cools.isEmpty(mat)) { |
| | | // throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品"); |
| | | // } else { |
| | | // orderDetl.sync(mat); |
| | | // } |
| | | orderDetl.setSpecs(String.valueOf(detlDto.getSplices())); |
| | | orderDetl.setBatch(detlDto.getBatch() == null ? "" : detlDto.getBatch()); |
| | | orderDetl.setModel(detlDto.getMatnr()); |
| | | orderDetl.setMatnr(detlDto.getOrderNo()); |
| | | orderDetl.setMaktx(detlDto.getOrderNo()); |
| | | orderDetl.setAnfme(detlDto.getAnfme()); |
| | | orderDetl.setBrand(groupNo); |
| | | orderDetl.setBatch(""); |
| | | orderDetl.setOrderId(order.getId()); |
| | | orderDetl.setOrderNo(order.getOrderNo()); |
| | | orderDetl.setCreateBy(9527L); |
| | |
| | | orderDetl.setUpdateTime(now); |
| | | orderDetl.setStatus(1); |
| | | orderDetl.setQty(0.0D); |
| | | orderDetl.setAnfme(1.0); |
| | | if (!orderDetlService.insert(orderDetl)) { |
| | | throw new CoolException("生成单据明细失败,请联系管理员"); |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | return R.ok("单据生成成功"); |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | // 到达出库口确认为1,更新工作档状态为57.出库完成 |
| | | if (param.getOutLocResult() == 1) { |
| | | wrkMast.setWrkSts(20L); |
| | | // 空托盘到位直接更新工作档状态为14.已出库未确认,空托无需复核确认 |
| | | if (!flag || wrkMast.getIoType() == 110) { |
| | | // wrkMast.setWrkSts(20L); |
| | | // // 空托盘到位直接更新工作档状态为14.已出库未确认,空托无需复核确认 |
| | | // if (!flag || wrkMast.getIoType() == 110) { |
| | | wrkMast.setWrkSts(14L); |
| | | } |
| | | // } |
| | | wrkMastService.updateById(wrkMast); |
| | | } |
| | | |
| | |
| | | import com.zy.asrs.entity.param.FullStoreParam; |
| | | import com.zy.asrs.entity.param.LocDetlAdjustParam; |
| | | import com.zy.asrs.entity.param.StockOutParam; |
| | | import com.zy.asrs.mapper.OrderDetlMapper; |
| | | import com.zy.asrs.mapper.OrderMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.*; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | |
| | | private OrderService orderService; |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | @Resource |
| | | private OrderMapper orderMapper; |
| | | @Resource |
| | | private OrderDetlMapper orderDetlMapper; |
| | | @Autowired |
| | | private WcsController wcsController; |
| | | @Autowired |
| | |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作档明细失败"); |
| | | } |
| | | // 修改订单明细 |
| | | orderDetlMapper.updateOrderDetlByGroupNo(detlDto.getOrderNo(), detlDto.getLocDetl().getBrand(), 1); |
| | | // 修改订单状态 |
| | | orderMapper.updateSettleByOrderNo(detlDto.getOrderNo(),2L, userId); |
| | | } |
| | | |
| | | // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 |
| | | locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("F")) { |
| | |
| | | } |
| | | |
| | | //取消出库工作档时,查询单据管理表,回滚作业中数量 |
| | | if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) { |
| | | if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107) { |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { |
| | | throw new CoolException("订单数据回滚失败"); |
| | | } |
| | | // if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { |
| | | // throw new CoolException("订单数据回滚失败"); |
| | | // } |
| | | orderDetlMapper.updateOrderDetlByGroupNo(wrkDetl.getOrderNo(),wrkDetl.getBrand(),0); |
| | | |
| | | //修改订单主表状态,没有作业数量时才可以修改 |
| | | boolean flag = true; |
| | |
| | | } |
| | | } |
| | | |
| | | // @Scheduled(cron = "0/5 * * * * ? ") |
| | | @Scheduled(cron = "0/9 * * * * ? ") |
| | | @Async("orderThreadPool") |
| | | public void completeAndReport(){ |
| | | String erpReport = Parameter.get().getErpReport(); |
| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.DocType; |
| | | import com.zy.asrs.entity.Order; |
| | | import com.zy.asrs.entity.OrderDetl; |
| | | import com.zy.asrs.entity.ReportMesOrderResult; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.DocTypeService; |
| | | import com.zy.asrs.service.OrderDetlService; |
| | |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.common.constant.MesConstant; |
| | | import com.zy.common.model.MesPakinParam; |
| | | import com.zy.common.model.MesPakoutParam; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/7/7 |
| | |
| | | return SUCCESS; |
| | | } |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | // 入库完成上报 |
| | | if (docType.getPakin() == 1) { |
| | | MesPakinParam pakinParam = new MesPakinParam(); |
| | | pakinParam.setPakinTime(DateUtils.convert(order.getUpdateTime())); |
| | | pakinParam.setLgortFrom("5008"); |
| | | pakinParam.setLgortTo("5006"); |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); |
| | | pakinParam.getList().add(new MesPakinParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); |
| | | } |
| | | String response = ""; |
| | | boolean success = false; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.URL) |
| | | .setPath(MesConstant.PAKIN_URL) |
| | | .setJson(JSON.toJSONString(pakinParam)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | success = true; |
| | | // 修改订单状态 4.完成 ===>> 6.已上报 |
| | | if (!orderService.updateSettle(order.getId(), 6L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(pakinParam), response); |
| | | throw new CoolException("上报mes系统失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("fail", e); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "成品库入库上报", |
| | | MesConstant.URL + MesConstant.PAKIN_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | JSON.toJSONString(pakinParam), |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { log.error("", e); } |
| | | } |
| | | } |
| | | |
| | | // 出库完成上报 |
| | | if (docType.getPakout() == 1) { |
| | | MesPakoutParam pakoutParam = new MesPakoutParam(); |
| | | pakoutParam.setTag(!order.getDocType$().equalsIgnoreCase("手动出库单")); |
| | | pakoutParam.setPakoutTime(DateUtils.convert(order.getUpdateTime())); |
| | | pakoutParam.setLgortFrom("5006"); |
| | | pakoutParam.setLgortTo("1111"); |
| | | if (!pakoutParam.isTag()) { |
| | | pakoutParam.setKunnr("C1000"); |
| | | } |
| | | pakoutParam.setOrderNo(order.getOrderNo()); |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); |
| | | pakoutParam.getList().add(new MesPakoutParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); |
| | | } |
| | | List<ReportMesOrderResult> collect = orderDetls.stream().map(orderDetl -> |
| | | new ReportMesOrderResult(orderDetl.getBrand(), orderDetl.getQty().intValue())).collect(Collectors.toList()); |
| | | String response = ""; |
| | | boolean success = false; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.URL) |
| | | .setPath(MesConstant.PAKOUT_URL) |
| | | .setJson(JSON.toJSONString(pakoutParam)) |
| | | .setUri(MesConstant.MES_IP_PORT) |
| | | .setPath(MesConstant.MES_CKSB_URL) |
| | | .setJson(JSON.toJSONString(collect)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKOUT_URL, JSON.toJSONString(pakoutParam), response); |
| | | throw new CoolException("上报mes系统失败"); |
| | | log.error("请求MES出库单上报接口失败!!!url:{};request:{};response:{}", MesConstant.MES_IP_PORT+MesConstant.MES_CKSB_URL, JSON.toJSONString(collect), response); |
| | | throw new CoolException("请求MES出库单上报接口失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("fail", e); |
| | | log.error("请求MES出库单上报接口异常", e); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | // return FAIL.setMsg(e.getMessage()); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "成品库出库上报", |
| | | MesConstant.URL + MesConstant.PAKOUT_URL, |
| | | "请求MES出库单上报接口", |
| | | MesConstant.MES_IP_PORT + MesConstant.MES_CKSB_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | JSON.toJSONString(pakoutParam), |
| | | JSON.toJSONString(collect), |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { log.error("", e); } |
| | | } |
| | | } |
| | | // 入库完成上报 |
| | | // if (docType.getPakin() == 1) { |
| | | // MesPakinParam pakinParam = new MesPakinParam(); |
| | | // pakinParam.setPakinTime(DateUtils.convert(order.getUpdateTime())); |
| | | // pakinParam.setLgortFrom("5008"); |
| | | // pakinParam.setLgortTo("5006"); |
| | | // for (OrderDetl orderDetl : orderDetls) { |
| | | // String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); |
| | | // pakinParam.getList().add(new MesPakinParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); |
| | | // } |
| | | // String response = ""; |
| | | // boolean success = false; |
| | | // try { |
| | | // response = new HttpHandler.Builder() |
| | | // .setUri(MesConstant.URL) |
| | | // .setPath(MesConstant.PAKIN_URL) |
| | | // .setJson(JSON.toJSONString(pakinParam)) |
| | | // .build() |
| | | // .doPost(); |
| | | // JSONObject jsonObject = JSON.parseObject(response); |
| | | // if (jsonObject.getInteger("code").equals(200)) { |
| | | // success = true; |
| | | // // 修改订单状态 4.完成 ===>> 6.已上报 |
| | | // if (!orderService.updateSettle(order.getId(), 6L, null)) { |
| | | // throw new CoolException("服务器内部错误,请联系管理员"); |
| | | // } |
| | | // } else { |
| | | // log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(pakinParam), response); |
| | | // throw new CoolException("上报mes系统失败"); |
| | | // } |
| | | // } catch (Exception e) { |
| | | // log.error("fail", e); |
| | | //// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // return FAIL.setMsg(e.getMessage()); |
| | | // } finally { |
| | | // try { |
| | | // // 保存接口日志 |
| | | // apiLogService.save( |
| | | // "成品库入库上报", |
| | | // MesConstant.URL + MesConstant.PAKIN_URL, |
| | | // null, |
| | | // "127.0.0.1", |
| | | // JSON.toJSONString(pakinParam), |
| | | // response, |
| | | // success |
| | | // ); |
| | | // } catch (Exception e) { log.error("", e); } |
| | | // } |
| | | // } |
| | | return SUCCESS; |
| | | } |
| | | |
| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.mapper.OrderDetlMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | |
| | | private WaitPakinService waitPakinService; |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | |
| | | @Resource |
| | | private OrderDetlMapper orderDetlMapper; |
| | | public ReturnT<String> start(WrkMast wrkMast) { |
| | | // 4.入库完成 |
| | | if (wrkMast.getWrkSts() == 4) { |
| | |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("盘点入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); |
| | | } |
| | | for(WrkDetl wrkDetl : wrkDetls57) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | // OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // if (orderDetl==null){ |
| | | // orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // } |
| | | // try { |
| | | // if(!Cools.isEmpty(orderDetl)){ |
| | | // if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | // orderDetl.getBatch(),wrkDetl.getAnfme())){ |
| | | //// exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", |
| | | //// wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // return FAIL.setMsg("全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); |
| | | // } |
| | | // } |
| | | // } catch (Exception ignore){} |
| | | } |
| | | // 修改库位状态 Q ====>> F |
| | | if (locMast.getLocSts().equals("Q")) { |
| | | locMast.setLocSts(wrkMast.getFullPlt().equals("Y")?"F":"D"); |
| | |
| | | return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls101) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | // 更新订单完成数量 |
| | | // OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // if (orderDetl==null){ |
| | | // orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null); |
| | | // } |
| | | // 箱号+卷号 |
| | | OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("batch",wrkDetl.getBatch()) |
| | | .eq("model",wrkDetl.getModel())); |
| | | |
| | | try { |
| | | if(!Cools.isEmpty(orderDetl)){ |
| | | // 更新订单完成数量 |
| | | // orderDetlService.update(null,new EntityWrapper<OrderDetl>().eq("order_no",orderDetl.getOrderNo()) |
| | | // .eq("batch",orderDetl.getBatch()).eq("model", orderDetl.getModel())); |
| | | if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), orderDetl.getModel(), |
| | | orderDetl.getBatch(),wrkDetl.getAnfme())){ |
| | | // exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", |
| | | // wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | } |
| | | } catch (Exception ignore){} |
| | | // // 箱号+卷号 |
| | | // OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("batch",wrkDetl.getBatch()) |
| | | // .eq("model",wrkDetl.getModel())); |
| | | // |
| | | // try { |
| | | // if(!Cools.isEmpty(orderDetl)){ |
| | | // // 更新订单完成数量 |
| | | //// orderDetlService.update(null,new EntityWrapper<OrderDetl>().eq("order_no",orderDetl.getOrderNo()) |
| | | //// .eq("batch",orderDetl.getBatch()).eq("model", orderDetl.getModel())); |
| | | // if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), orderDetl.getModel(), |
| | | // orderDetl.getBatch(),wrkDetl.getAnfme())){ |
| | | //// exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", |
| | | //// wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | // } |
| | | // } |
| | | // } catch (Exception ignore){} |
| | | } |
| | | // 删除工作档源库位的库存明细 |
| | | if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) { |
| | |
| | | |
| | | public static final String PAKOUT_URL = "wmsFinprd/api/zy/v1/packOut/sendList"; |
| | | |
| | | // MES接口IP地址 |
| | | public static final String MES_IP_PORT = "http://192.168.14.249:8008"; |
| | | |
| | | // 给MES推送一楼反修为待判 |
| | | public static final String MES_DP_URL = "/api/Task/InventoryTask"; |
| | | |
| | | // 给MES推送出库单结果 |
| | | public static final String MES_CKSB_URL = "/api/Task/InventoryTask"; |
| | | |
| | | // GWCS接口IP地址 |
| | | public static final String GWCS_IP_PORT = "http://192.168.14.249:8008"; |
| | | |
| | |
| | | <if test="order_id!=null and order_id!='' "> |
| | | and mod.order_id like '%' + #{order_id} + '%' |
| | | </if> |
| | | <if test="matnr!=null and matnr!='' "> |
| | | and mod.matnr like '%' + #{matnr} + '%' |
| | | <if test="brand!=null and brand!='' "> |
| | | and mod.brand like '%' + #{brand} + '%' |
| | | </if> |
| | | <if test="maktx!=null and maktx!='' "> |
| | | and mod.maktx like '%' + #{maktx} + '%' |
| | |
| | | </otherwise> |
| | | </choose> |
| | | </update> |
| | | <update id="updateOrderDetlByGroupNo"> |
| | | update man_order_detl |
| | | set work_qty = #{count} |
| | | where 1=1 |
| | | and order_no= #{orderNo} and brand = #{brand} |
| | | </update> |
| | | <update id="updateOrderDetlQtyByGroupNo"> |
| | | update man_order_detl |
| | | set qty = 1 |
| | | where 1=1 |
| | | and order_no = #{orderNo} |
| | | and brand = #{brand} |
| | | </update> |
| | | |
| | | </mapper> |
| | |
| | | where 1=1 |
| | | and id = #{orderId} |
| | | </update> |
| | | <update id="updateSettleByOrderNo"> |
| | | update man_order |
| | | set settle = #{status} |
| | | ,update_time = getdate() |
| | | <if test="userId != null"> |
| | | ,update_by = #{userId} |
| | | </if> |
| | | where 1=1 |
| | | and order_no = #{orderNo} |
| | | and settle != #{status} |
| | | </update> |
| | | |
| | | <select id="selectComplete" resultMap="BaseResultMap"> |
| | | select |
| | |
| | | cols: [[ |
| | | // {type: 'numbers', title: '#'}, |
| | | {field: 'orderTime', title: '日期'}, |
| | | {field: 'orderNo', title: '单据编号', align: 'center'} |
| | | {field: 'orderNo', title: '单据编号', align: 'center'}, |
| | | {field: 'docType$', title: '单据类型'}, |
| | | ]], |
| | | done: function (res, curr, count) { |
| | | $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click'); |