From d87b636f92269b4ec97cb5ca00680409755814a9 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 30 四月 2025 15:38:43 +0800 Subject: [PATCH] 收货优化修改 --- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 211 +++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 158 insertions(+), 53 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java index 36b6564..b67b341 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java @@ -17,6 +17,7 @@ import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.common.utils.JwtUtil; +import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams; import com.vincent.rsf.server.manager.controller.params.IsptItemsParams; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.*; @@ -36,6 +37,7 @@ import com.vincent.rsf.server.system.service.UserLoginService; import com.vincent.rsf.server.system.service.UserService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; +import org.apache.commons.codec.digest.Md5Crypt; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +47,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; @@ -123,12 +126,14 @@ private LocAreaRelaMapper locAreaRelaMapper; @Autowired private LocAreaMapper locAreaMapper; + @Autowired + private DeviceSiteMapper deviceSiteMapper; /** + * @return * @author Ryan * @description 鎵嬫寔PDA鐧诲綍鎺ュ彛 * @params LoginParam param锛� HttpServletRequest request - * @return * @time 2025/3/10 15:36 */ @Override @@ -160,10 +165,10 @@ } /** - * @author Ryan - * @description 鎵爜鑾峰彇鏀惰揣鏄庣粏 * @param barcode * @return + * @author Ryan + * @description 鎵爜鑾峰彇鏀惰揣鏄庣粏 * @time 2025/3/10 15:37 */ @Override @@ -171,7 +176,10 @@ if (StringUtils.isBlank(barcode)) { return R.error("鏍囩鐮佷笉鑳戒负绌猴紒锛�"); } - List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, barcode)); + List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() + .eq(AsnOrderItem::getTrackCode, barcode)); + + if (Objects.isNull(asnOrderItem)) { throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); } @@ -180,15 +188,16 @@ } /** + * @param params + * @param loginUserId + * @return * @author Ryan * @description 鏀惰揣鑷虫敹璐у尯 - * @param params - * @return * @time 2025/3/10 15:41 */ @Override @Transactional(rollbackFor = Exception.class) - public R receiptToWarehouse(Map<String, Object> params) { + public R receiptToWarehouse(Map<String, Object> params, Long loginUserId) { if (Objects.isNull(params)) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } @@ -231,7 +240,9 @@ } List<Map<String, Object>> receipts1 = (List<Map<String, Object>>) params.get("receipts"); for (Map<String, Object> rcpt : receipts1) { - if (Objects.isNull(rcpt)) {continue;} + if (null == rcpt || Objects.isNull(rcpt)) { + continue; + } ReceiptDetlsDto dto = JSONObject.parseObject(JSONObject.toJSONString(rcpt), ReceiptDetlsDto.class); Matnr matnr = matnrMapper.selectById(dto.getMatnrId()); if (Objects.isNull(matnr)) { @@ -245,12 +256,13 @@ // } AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnCode, asnCode) + .eq(AsnOrderItem::getTrackCode, dto.getBarcode()) .eq(AsnOrderItem::getMatnrId, dto.getMatnrId())); if (Objects.isNull(orderItem)) { throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒"); } if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) { - throw new CoolException("鐗╂枡:" + dto.getMaktx() + "鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒"); + throw new CoolException("鐗╂枡:" + dto.getMaktx() + "鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒"); } Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty(); orderItem.setQty(itemRcptQty) @@ -262,7 +274,7 @@ try { if (Objects.isNull(rcpt.get("fieldsindex")) || StringUtils.isBlank(rcpt.get("fieldsindex").toString())) { //鑾峰彇16浣島uid - String uuid16 = CommonUtil.randomUUID16(); + String uuid16 = Cools.md5(dto.getBarcode()); rcpt.put("index", uuid16); orderItem.setFieldsIndex(uuid16); } @@ -291,27 +303,40 @@ .setAsnId(asnOrder.getId()) .setProdTime(dto.getProdTime()) .setWeight(dto.getWeigth()) - .setStockUnit(dto.getStockUnit()) - .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto)) + //搴撳瓨鍗曚綅涓烘渶灏忓崟浣� + .setUnit(orderItem.getStockUnit()) + .setStockUnit(orderItem.getStockUnit()) + .setBatch(StringUtils.isBlank(orderItem.getBatch()) ? SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto) : orderItem.getBatch()) .setAnfme(dto.getReceiptQty()) .setSplrBatch(dto.getSplrBatch()) .setMatnrCode(matnr.getCode()) + .setUpdateBy(loginUserId) + .setCreateBy(loginUserId) .setMatnrId(matnr.getId()) .setMaktx(matnr.getName()) - //搴撳瓨鍗曚綅涓烘渶灏忓崟浣� - .setUnit(dto.getStockUnit()) - .setStockUnit(dto.getStockUnit()) .setWeight(matnr.getWeight()) .setFieldsIndex(orderItem.getFieldsIndex()) .setShipperId(matnr.getShipperId()); //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆锛屾爣璇嗙敱PO鍗曚緵搴斿晢缂栫爜杞崲 - allOrders.add(item); + WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>() + .eq(WarehouseAreasItem::getAsnItemId, item.getAsnItemId()) + .eq(WarehouseAreasItem::getTrackCode, item.getTrackCode()) + .eq(StringUtils.isNotBlank(item.getSplrBatch()), WarehouseAreasItem::getSplrBatch, item.getSplrBatch())); + if (!Objects.isNull(serviceOne)) { + item.setAnfme(item.getAnfme() + serviceOne.getAnfme()); + item.setId(serviceOne.getId()); + } + + if (!warehouseAreasItemService.saveOrUpdate(item)) { + throw new CoolException("鏀惰揣澶辫触锛侊紒"); + } + } - if (!warehouseAreasItemService.saveBatch(allOrders)) { - throw new CoolException("鏀惰揣澶辫触锛侊紒"); - } +// if (!warehouseAreasItemService.saveBatch(allOrders)) { +// throw new CoolException("鏀惰揣澶辫触锛侊紒"); +// } // //鑾峰彇閲囪喘鏁伴噺 // double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum(); // @@ -326,10 +351,10 @@ } /** - * @author Ryan - * @description 鍏跺畠鏀惰揣 * @param params * @return + * @author Ryan + * @description 鍏跺畠鏀惰揣 */ @Override public R otherReceipt(OtherReceiptParams params) { @@ -338,20 +363,28 @@ } List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnCode, params.getAsnCode()) - .eq(!Objects.isNull(params.getTrackCode()) ,AsnOrderItem::getTrackCode, params.getTrackCode())); + .eq(!Objects.isNull(params.getTrackCode()), AsnOrderItem::getTrackCode, params.getTrackCode())); if (Objects.isNull(asnOrderItem)) { throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); } + List<Short> shorts = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_TASK_CANCEL.val, AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE + .val, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val); + AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>() + .notIn(AsnOrder::getExceStatus, shorts) + .eq(AsnOrder::getCode, params.getAsnCode())); + if (Objects.isNull(order)) { + throw new CoolException("璇锋鏌ヨ鍗曠姸鎬佹槸鍚﹀凡瀹屾垚鎴栧凡鍙栨秷锛侊紒"); + } - return getAsnOrderItem(asnOrderItem); + return getAsnOrderItem(asnOrderItem); } /** + * @return * @author Ryan * @description 鑾峰彇鎵�鏈夐�氱煡鍗� - * @return */ @Override public List<AsnOrder> getAllAsnOrders() { @@ -360,10 +393,10 @@ } /** - * @author Ryan - * @description 鑾峰彇鏀惰揣鍖� * @param * @return + * @author Ryan + * @description 鑾峰彇鏀惰揣鍖� * @time 2025/3/11 10:12 */ @Override @@ -373,10 +406,10 @@ } /** - * @author Ryan - * @description 鑾峰彇鎵�鏈夊惎鐢ㄥ姩鎬佸瓧娈� * @param * @return + * @author Ryan + * @description 鑾峰彇鎵�鏈夊惎鐢ㄥ姩鎬佸瓧娈� * @time 2025/3/12 09:23 */ @Override @@ -385,10 +418,10 @@ } /** - * @author Ryan - * @description 鑾峰彇缁勭洏鏄庣粏 * @param * @return + * @author Ryan + * @description 鑾峰彇缁勭洏鏄庣粏 * @time 2025/4/7 16:58 */ @Override @@ -415,10 +448,10 @@ } /** - * @author Ryan - * @description 瑙g粦 * @param param * @return + * @author Ryan + * @description 瑙g粦 */ @Override public WaitPakin unBind(WaitPakinParam param) { @@ -427,6 +460,7 @@ /** * 鎶ユ鍔熻兘 + * * @param code * @param loginUserId * @return @@ -467,10 +501,10 @@ } /** - * @author Ryan - * @description 鎻愪氦鎶ユ * @param * @return + * @author Ryan + * @description 鎻愪氦鎶ユ * @time 2025/4/1 16:47 */ @Override @@ -485,14 +519,15 @@ List<AsnOrder> orders = new ArrayList<>(); orders.add(asnOrder); if (asnOrderMapper.notifyInspect(orders)) { - return R.ok("涓婃姤鎴愬姛锛侊紒"); - }else { + return R.ok("涓婃姤鎴愬姛锛侊紒"); + } else { return R.error("涓婃姤澶辫触锛侊紒"); } } /** * 閫氳繃鐗╂枡锛岃川妫�鍗曡幏鍙栭渶瑕佽川妫�鍗曟嵁 + * * @param params * @return */ @@ -503,7 +538,7 @@ } List<Short> asList = Arrays.asList(QlyIsptStatus.QLY_ISPT_STAS_DONE.val, QlyIsptStatus.QLY_ISPT_STAS_CLOSE.val); QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() - .notIn(QlyInspect::getIsptStatus, asList) + .notIn(QlyInspect::getIsptStatus, asList) .eq(QlyInspect::getCode, params.getIsptCode())); if (Objects.isNull(inspect)) { throw new CoolException("璐ㄦ鍗曟嵁涓嶅瓨鍦紒!"); @@ -538,6 +573,7 @@ /** * 蹇�熻川妫� + * * @param params * @return */ @@ -556,12 +592,12 @@ } /** - * @author Ryan - * @description 浜哄伐涓婃灦 - * @param - * @return - * @time 2025/4/2 16:33 - */ + * @param + * @return + * @author Ryan + * @description 浜哄伐涓婃灦 + * @time 2025/4/2 16:33 + */ @Override public R operateToStock(OpStockParams params) { if (org.apache.commons.lang3.StringUtils.isBlank(params.getBarcode())) { @@ -650,7 +686,9 @@ itemList.forEach(asnOrderItem -> { LocItem item = new LocItem(); BeanUtils.copyProperties(asnOrderItem, item); - item.setId(loc.getId()) + item.setLocId(loc.getId()) + .setId(null) + .setLocCode(loc.getCode()) .setOrderId(order.getId()) .setOrderItemId(asnOrderItem.getId()) .setWkType(Short.parseShort(order.getWkType())) @@ -683,6 +721,7 @@ /** * 鑾峰彇浠诲姟淇℃伅 + * * @param code * @return */ @@ -727,10 +766,10 @@ } /** - * @Author Ryan * @param code - * @desc 浠诲姟涓婃灦 * @return + * @Author Ryan + * @desc 浠诲姟涓婃灦 */ @Override @Transactional(rollbackFor = Exception.class) @@ -756,14 +795,14 @@ @Override public R completeOrder(Long id, Long loginUserId) { - return asnOrderMapper.completeOrder(id, loginUserId); + return asnOrderMapper.completeOrder(id, loginUserId); } /** - * @author Ryan - * @description 閫氳繃瀹瑰櫒鑾峰彇缁勬嫋鐗╂枡 * @param * @return + * @author Ryan + * @description 閫氳繃瀹瑰櫒鑾峰彇缁勬嫋鐗╂枡 * @time 2025/4/9 16:57 */ @Override @@ -776,7 +815,7 @@ } WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() .eq(WaitPakin::getBarcode, params.get("barcode").toString()) - .eq(WaitPakin::getFlagDefect, flagDefect) + .eq(WaitPakin::getFlagDefect, flagDefect) .in(WaitPakin::getIoStatus, asList)); if (Objects.isNull(waitPakin)) { return R.ok(new ArrayList<>()); @@ -809,16 +848,81 @@ } /** - * @author Ryan - * @description 涓嶈壇鏍囩 * @param * @return + * @author Ryan + * @description 涓嶈壇鏍囩 * @time 2025/4/12 08:12 */ @Override public R defectProducts(String trackCode) { AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, trackCode)); return R.ok(orderItem); + } + + /** + * @param barcode + * @return + * @author Ryan + * @description 鑾峰彇鍏ュ簱缁勬嫋淇℃伅 + */ + @Override + public R getPakinInStock(String barcode) { + WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode)); + if (Objects.isNull(waitPakin)) { + throw new CoolException("缁勬嫋鍗曟嵁涓嶅瓨鍦紒锛�"); + } + List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId())); + if (pakinItems.isEmpty()) { + return R.ok(new ArrayList<>()); + } + return R.ok(pakinItems); + } + + /** + * @return + * @author Ryan + * @description 鑾峰彇搴撳彛绔欑偣淇℃伅 + */ + @Override + public R getDeviceSites() { + List<DeviceSite> sites = deviceSiteMapper.selectList(new LambdaQueryWrapper<DeviceSite>() + .select(DeviceSite::getId, DeviceSite::getSite, DeviceSite::getName) + .eq(DeviceSite::getStatus, 1) + .groupBy(DeviceSite::getSite, DeviceSite::getId, DeviceSite::getName)); + return R.ok(sites); + } + + /** + * @return + * @author Ryan + * @description 鑾峰彇鎺ㄨ崘搴撲綅 + */ + @Override + public R getRecommondLocs() { + return R.ok(locService.list(new LambdaQueryWrapper<Loc>().last("limit 10"))); + } + + /** + * @param map + * @param loginUserId + * @return + * @author Ryan + * @description 鐢熸垚浠诲姟鍒楄〃 + */ + @Override + public R generateTask(Map<String, Object> map, Long loginUserId) { + String barcode = map.get("barcode").toString(); + List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode)); + if (waitPakins.isEmpty()) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒"); + } + GenerateTaskParams taskParams = new GenerateTaskParams(); + taskParams.setWaitPakins(waitPakins) + .setSiteId(Long.parseLong(map.get("site").toString())) + .setLocCode(map.get("locCode").toString()); + return R.ok(taskService.generateTasks(taskParams, loginUserId)); + } /** @@ -855,7 +959,8 @@ } //鑾峰彇褰撳墠搴撳瓨淇℃伅 LocItem stockItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>() - .eq(LocItem::getOrderItemId, asnOrderItem.getId()) +// .eq(LocItem::getOrderItemId, asnOrderItem.getId()) + .eq(LocItem::getFieldsIndex, asnOrderItem.getFieldsIndex()) .eq(LocItem::getBatch, asnOrderItem.getBatch()) .eq(LocItem::getMatnrId, asnOrderItem.getMatnrId())); //SET 褰撳墠搴撳瓨鏁伴噺 -- Gitblit v1.9.1