src/main/java/com/zy/asrs/controller/OpenController.java
@@ -508,7 +508,7 @@ @PostMapping("/unQualifiedOrder/auth/v1") @AppAuth(memo = "不合格品退库单单据下发") public synchronized R unqualifiedOrder(@RequestHeader(required = false) String appkey, @RequestBody ReturnOrderConfirmParam param, @RequestBody UnQualifiedOrderConfirmParam param, HttpServletRequest request) { auth(appkey, param, request); openService.unQualifiedOrder(param); src/main/java/com/zy/asrs/controller/OutController.java
@@ -83,12 +83,22 @@ return R.parse("订单数据为空"); } // 按包装组号分组处理 Map<String, List<OrderDetl>> brandGroup = orderDetls.stream() .collect(Collectors.groupingBy(o -> { String brand = o.getBrand(); return brand != null ? brand : "跨巷道"; })); Map<String, List<OrderDetl>> brandGroup; if (order.getDocType() == 27) { // 按包装组号分组处理 brandGroup = orderDetls.stream() .collect(Collectors.groupingBy(o -> { String brand = o.getModel(); return brand != null ? brand : "跨巷道"; })); } else { // 按包装组号分组处理 brandGroup = orderDetls.stream() .collect(Collectors.groupingBy(o -> { String brand = o.getBrand(); return brand != null ? brand : "跨巷道"; })); } List<LocDto> locDtos = new ArrayList<>(); @@ -97,11 +107,18 @@ for (Map.Entry<String, List<OrderDetl>> entry : brandGroup.entrySet()) { String brand = entry.getKey(); List<OrderDetl> brandOrderDetls = entry.getValue(); List<LocDetl> locDetls; if (order.getDocType() == 27) { locDetls = locDetlService.selectList( new EntityWrapper<LocDetl>().eq("model", brand) ); } else { // 查这个包装组对应的所有库存 locDetls = locDetlService.selectList( new EntityWrapper<LocDetl>().eq("brand", brand) ); } // 查这个包装组对应的所有库存 List<LocDetl> locDetls = locDetlService.selectList( new EntityWrapper<LocDetl>().eq("brand", brand) ); if (locDetls.isEmpty()) continue; // 获取出库口 @@ -133,7 +150,7 @@ locDto.setUnit(locDetl.getUnit()); locDto.setModel(locDetl.getModel()); locDto.setThreeCode(locDetl.getThreeCode()); locDto.setBrand(brand); locDto.setBrand(locDetl.getBrand()); locDto.setOrderNo(firstDetl.getOrderNo()); locDto.setStaNos(staNos); locDto.setOrderDetlId(firstDetl.getId()); @@ -269,9 +286,15 @@ ioWorkType = IoWorkType.ALL_OUT; } } workService.stockOut(staNo, locDetlDtos, ioWorkType, getUserId(), optionValue); if (order.getDocType() == 27) { workService.stockOut2(staNo, locDetlDtos, ioWorkType, getUserId(), optionValue); }else { workService.stockOut(staNo, locDetlDtos, ioWorkType, getUserId(), optionValue); } } else { throw new CoolException("所选库位状态不为F/D,库位号:" + locMast.getLocNo() + ",当前状态:" + src/main/java/com/zy/asrs/entity/param/ReturnOrderConfirmParam.java
@@ -10,7 +10,7 @@ private String packageGroupNo; // 多个包装组号 private List<VolumeNumber> volumeNumbers; // 多个包装组号 private String memo;//备注 @Data public static class VolumeNumber { private String volumeNumber; src/main/java/com/zy/asrs/entity/param/UnQualifiedOrderConfirmParam.java
New file @@ -0,0 +1,17 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; @Data public class UnQualifiedOrderConfirmParam { private String orderNumber; //组货单号 private List<VolumeNumber> volumeNumbers; // 多个包装组号 private String memo;//备注 @Data public static class VolumeNumber { private String volumeNumber; } } src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -42,6 +42,9 @@ void updateOrderDetlByGroupNo(@Param("orderNo") String orderNo,@Param("brand") String brand, @Param("count") double count); void updateOrderDetlByModel(@Param("orderNo") String orderNo,@Param("model") String model, @Param("count") double count); void updateOrderDetlQtyByGroupNo(@Param("orderNo") String orderNo,@Param("brand") String brand); /** @@ -66,5 +69,11 @@ List<OrderDetl> selectByBrand(@Param("brand") String brand); List<OrderDetl> selectByModel(@Param("model") String model); OrderDetl selectByOrderNoAndPkgGroupNoAndVolumeNo(@Param("orderNo") String orderNo,@Param("brand") String brand,@Param("model") String model); OrderDetl selectByOrderNoAndVolumeNo(@Param("orderNo") String orderNo,@Param("model") String model); } src/main/java/com/zy/asrs/service/OpenService.java
@@ -161,5 +161,5 @@ R returnOrder(ReturnOrderConfirmParam param); R unQualifiedOrder(ReturnOrderConfirmParam param); R unQualifiedOrder(UnQualifiedOrderConfirmParam param); } src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -39,4 +39,7 @@ boolean increaseWorkQty(Long orderId, String matnr, String batch, Double workQty); List<OrderDetl> selectByBrand(String brand); List<OrderDetl> selectByModel(String model); } src/main/java/com/zy/asrs/service/WorkService.java
@@ -44,6 +44,9 @@ */ void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId,String groupOrderNumber); void stockOut2(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId,String groupOrderNumber); void stockOut(BasDevp staNo, TaskDto taskDto, Long userId); /** src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -2365,6 +2365,7 @@ order.setCreateTime(new Date()); order.setSettle(1L); order.setDocType(26L); order.setMemo(param.getMemo()); orderMapper.insert(order); } else { // 1.2 存在,更新单据状态 @@ -2394,6 +2395,7 @@ detl.setAnfme(1.0); detl.setBrand(param.getPackageGroupNo()); // 包装组号 detl.setModel(vn.getVolumeNumber()); // 卷号 detl.setMemo(param.getMemo()); orderDetlMapper.insert(detl); } else { throw new RuntimeException("该单据的卷号已存在," + vn.getVolumeNumber()); @@ -2405,7 +2407,7 @@ @Override @Transactional public R unQualifiedOrder(ReturnOrderConfirmParam param) { public R unQualifiedOrder(UnQualifiedOrderConfirmParam param) { if (Cools.isEmpty(param.getOrderNumber())) { param.setOrderNumber("UQCK" + DateUtils.convert(new Date(), DateUtils.yyyyMMdd)); } @@ -2422,6 +2424,7 @@ order.setCreateTime(new Date()); order.setSettle(1L); order.setDocType(27L); order.setMemo(param.getMemo()); orderMapper.insert(order); } else { // 1.2 存在,更新单据状态 @@ -2433,14 +2436,14 @@ // 2. 一一对应遍历 List<ReturnOrderConfirmParam.VolumeNumber> volList = param.getVolumeNumbers(); List<UnQualifiedOrderConfirmParam.VolumeNumber> volList = param.getVolumeNumbers(); for (int i = 0; i < volList.size(); i++) { ReturnOrderConfirmParam.VolumeNumber vn = volList.get(i); UnQualifiedOrderConfirmParam.VolumeNumber vn = volList.get(i); // 查询是否已存在该 detl OrderDetl detl = orderDetlMapper.selectByOrderNoAndPkgGroupNoAndVolumeNo( param.getOrderNumber(), param.getPackageGroupNo(), vn.getVolumeNumber() OrderDetl detl = orderDetlMapper.selectByOrderNoAndVolumeNo( param.getOrderNumber(), vn.getVolumeNumber() ); if (detl == null) { @@ -2449,8 +2452,8 @@ detl.setOrderNo(param.getOrderNumber()); detl.setCreateTime(new Date()); detl.setAnfme(1.0); detl.setBrand(param.getPackageGroupNo()); // 包装组号 detl.setModel(vn.getVolumeNumber()); // 卷号 detl.setMemo(param.getMemo()); orderDetlMapper.insert(detl); } else { throw new RuntimeException("该单据的卷号已存在," + vn.getVolumeNumber()); src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -96,4 +96,9 @@ public List<OrderDetl> selectByBrand(String brand) { return this.baseMapper.selectByBrand(brand); } @Override public List<OrderDetl> selectByModel(String model) { return this.baseMapper.selectByModel(model); } } src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -582,6 +582,130 @@ @Override @Transactional public void stockOut2(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId, String groupOrderNumber) { Date now = new Date(); // 合并同类项 Set<String> locNos = new HashSet<>(); List<OutLocDto> dtos = new ArrayList<>(); for (LocDetlDto locDetlDto : locDetlDtos) { String locNo = locDetlDto.getLocDetl().getLocNo(); if (locNos.contains(locNo)) { for (OutLocDto dto : dtos) { if (dto.getLocNo().equals(locNo)) { dto.getLocDetlDtos().add(locDetlDto); break; } } } else { locNos.add(locNo); dtos.add(new OutLocDto(locNo, locDetlDto)); } } Integer ioType = null; // 生成工作档 for (OutLocDto dto : dtos) { // 判断入出库类型:101.全板出库 or 103.拣料出库 if (ioWorkType == null) { ioType = dto.isAll() ? 101 : 103; } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) { ioType = 107; } else if (ioWorkType.equals(IoWorkType.ALL_OUT)) { ioType = 101; } assert ioType != null; // 获取库位 LocMast locMast = locMastService.selectById(dto.getLocNo()); Integer outSta = staNo.getDevNo(); // //2号堆垛机全板出库站指定为204站,拣料站指定为202 // if(locMast.getCrnNo()==2){ // outSta = ioType == 101 ? 204 : 202; // } // 获取路径 StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta); // 生成工作号 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(dto.getLocNo()); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setSheetNo("0"); wrkMast.setMemo(groupOrderNumber); if (staDesc.getStnNo() < 118 || staDesc.getStnNo() > 121) { wrkMast.setSheetNo("3"); } wrkMast.setBarcode(locMast.getBarcode()); wrkMast.setAppeUser(userId); // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("保存工作档失败,出库库位号:" + dto.getLocNo()); } // 生成工作档明细 for (LocDetlDto detlDto : dto.getLocDetlDtos()) { if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) { continue; } WrkDetl wrkDetl = new WrkDetl(); List<OrderDetl> orderDetl = orderDetlService.selectByModel(detlDto.getLocDetl().getModel()); wrkDetl.sync(detlDto.getLocDetl()); for (OrderDetl orderDetlDto : orderDetl) { if (orderDetlDto.getSupp() != null) { wrkDetl.setSupp(orderDetlDto.getSupp()); } if (orderDetlDto.getMemo() != null) { wrkDetl.setMemo(orderDetlDto.getMemo()); } } wrkDetl.setOrderNo(detlDto.getOrderNo()); // 手动出库不需要带出库存中的单据编号 wrkDetl.setWrkNo(workNo); wrkDetl.setIoTime(now); Double anfme = ioType == 101 ? detlDto.getLocDetl().getAnfme() : detlDto.getCount(); wrkDetl.setAnfme(anfme); // 数量 wrkDetl.setAppeTime(now); wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now); wrkDetl.setModiUser(userId); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } // 修改订单明细 orderDetlMapper.updateOrderDetlByModel(detlDto.getOrderNo(), detlDto.getLocDetl().getModel(), 1); // 修改订单状态 orderMapper.updateSettleByOrderNo(detlDto.getOrderNo(), 2L, userId); } // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 locMast = locMastService.selectById(dto.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("预约库位状态失败,库位号:" + dto.getLocNo()); } } else { throw new CoolException(dto.getLocNo() + "库位不是在库状态"); } } } @Override @Transactional public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) { Date now = new Date(); List<LocDto> locDtos = taskDto.getLocDtos(); src/main/resources/mapper/OrderDetlMapper.xml
@@ -247,6 +247,13 @@ where 1=1 and order_no= #{orderNo} and brand = #{brand} </update> <update id="updateOrderDetlByModel"> update man_order_detl set work_qty = #{count} where 1=1 and order_no= #{orderNo} and model = #{model} </update> <update id="updateOrderDetlQtyByGroupNo"> update man_order_detl set qty = 1 @@ -273,6 +280,12 @@ where brand = #{brand} </select> <select id="selectByModel" resultMap="BaseResultMap"> select * from man_order_detl where model = #{model} </select> <select id="selectByOrderNoAndPkgGroupNoAndVolumeNo" resultMap="BaseResultMap"> select * from man_order_detl @@ -281,4 +294,11 @@ and model = #{model} </select> <select id="selectByOrderNoAndVolumeNo" resultMap="BaseResultMap"> select * from man_order_detl where order_no = #{orderNo} and model = #{model} </select> </mapper>