From 258f0142619bb02db69c0f7006ca5bcc75d7a2e4 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期三, 04 三月 2026 15:35:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/devlop-phyz' into devlop-phyz

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java |  244 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 195 insertions(+), 49 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index ddfd3d0..4c67313 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -2,13 +2,13 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.generator.config.IFileCreate;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
 import com.vincent.rsf.server.api.entity.params.CallForEmptyContainersParam;
 import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
+import com.vincent.rsf.server.api.entity.params.PdaGeneralParam;
 import com.vincent.rsf.server.api.service.PdaOutStockService;
 import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
@@ -16,6 +16,8 @@
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import lombok.Synchronized;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,6 +52,10 @@
     private BasContainerServiceImpl basContainerService;
     @Autowired
     private LocItemService locItemService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private WaitPakinItemService waitPakinItemService;
 
     @Override
     public R getOutStockTaskItem(String barcode) {
@@ -59,11 +65,11 @@
         if (null == task) {
             return R.error("鏈煡璇㈠埌鐩稿叧浠诲姟");
         }
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (null == taskItems || taskItems.size() <= 0) {
             return R.error("浠诲姟鍑洪敊锛屾湭鏌ヨ鍒扮浉鍏充换鍔℃槑缁�");
         }
-
 
         return R.ok(taskItems);
     }
@@ -79,7 +85,8 @@
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource));
         maps.keySet().forEach(key -> {
             WkOrderItem orderItem = asnOrderItemService.getById(key);
@@ -93,6 +100,137 @@
         }
 
         return R.ok("纭鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R containerRebinding(PdaGeneralParam param, Long userId) {
+        if (Cools.isEmpty(param.getContainerNo())) {
+            throw new CoolException("鏃犲鍣ㄥ彿");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.getContainerNo()));
+        if (null == task) {
+            throw new CoolException("鏈壘鍒颁换鍔�");
+        }
+        if (!task.getResource().equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)) {
+            throw new CoolException("褰撳墠鎵樼洏涓嶆槸澶囪揣鍑哄簱浠诲姟");
+        }
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+
+        WaitPakin waitPakin = waitPakinService
+                .getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getNewContainerNo()));
+        if (Cools.isEmpty(waitPakin)) {
+            WaitPakin waitPakin1 = new WaitPakin();
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
+            if (StringUtils.isBlank(ruleCode)) {
+                throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+            }
+            waitPakin1.setCode(ruleCode)
+                    .setIoStatus(PakinIOStatus.PAKIN_IO_STATUS_HOLD.val)
+                    .setAnfme(taskItems.stream().map(TaskItem::getAnfme).mapToDouble(Double::doubleValue).sum())
+                    .setUpdateBy(userId)
+                    .setCreateBy(userId)
+                    .setBarcode(param.getNewContainerNo());
+            if (!waitPakinService.save(waitPakin1)) {
+                throw new CoolException("缁勬墭涓诲崟淇濆瓨澶辫触锛侊紒");
+            }
+            List<WaitPakinItem> items = new ArrayList<>();
+            for (TaskItem taskItem : taskItems) {
+                WaitPakinItem pakinItem = new WaitPakinItem();
+                pakinItem.setAnfme(taskItem.getAnfme())
+                        .setPakinId(waitPakin1.getId())
+                        .setSource(taskItem.getId())
+                        .setAsnId(taskItem.getSourceId())
+                        .setAsnCode(taskItem.getSourceCode())
+                        .setAsnItemId(taskItem.getSource())
+                        .setIsptResult(taskItem.getIsptResult())
+                        .setPlatItemId(taskItem.getPlatItemId())
+                        .setPlatOrderCode(taskItem.getPlatOrderCode())
+                        .setPlatWorkCode(taskItem.getPlatWorkCode())
+                        .setProjectCode(taskItem.getProjectCode())
+                        .setBatch(taskItem.getSplrBatch())
+                        .setUnit(taskItem.getUnit())
+                        .setFieldsIndex(taskItem.getFieldsIndex())
+                        .setMatnrId(taskItem.getMatnrId())
+                        .setMaktx(taskItem.getMaktx())
+                        .setUpdateBy(userId)
+                        .setCreateBy(userId)
+                        .setMatnrCode(taskItem.getMatnrCode());
+                WkOrder order = asnOrderService.getById(taskItem.getSourceId());
+                if (!Objects.isNull(order)) {
+                    pakinItem.setType(null == order.getType() ? null : order.getType())
+                            .setWkType(null == order.getWkType() ? null : Short.parseShort(order.getWkType()));
+                }
+                items.add(pakinItem);
+            }
+            if (!waitPakinItemService.saveBatch(items)) {
+                throw new CoolException("缁勬墭鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        } else {
+            double sum = taskItems.stream().map(TaskItem::getAnfme).mapToDouble(Double::doubleValue).sum();
+            waitPakin
+                    .setAnfme(waitPakin.getAnfme() + sum)
+                    .setUpdateBy(userId)
+                    .setCreateBy(userId);
+            if (!waitPakinService.updateById(waitPakin)) {
+                throw new CoolException("缁勬墭涓诲崟淇濆瓨澶辫触锛侊紒");
+            }
+            List<WaitPakinItem> existPakinItems = waitPakinItemService
+                    .list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+            List<WaitPakinItem> items = new ArrayList<>();
+            for (TaskItem taskItem : taskItems) {
+                Optional<WaitPakinItem> optionalItem = existPakinItems.stream()
+                        .filter(e -> Objects.equals(e.getMatnrCode(), taskItem.getMatnrCode())
+                                && Objects.equals(e.getBatch(), taskItem.getSplrBatch())
+                                && Objects.equals(e.getPlatWorkCode(), taskItem.getPlatWorkCode())
+                                && Objects.equals(e.getPlatItemId(), taskItem.getPlatItemId())
+                        )
+                        .findFirst();
+
+                if (optionalItem.isPresent()) {
+                    WaitPakinItem existItem = optionalItem.get();
+                    existItem.setAnfme(existItem.getAnfme() + taskItem.getAnfme())
+                            .setUpdateBy(userId);
+                    if (!items.contains(existItem)) {
+                        items.add(existItem);
+                    }
+                } else {
+                    WaitPakinItem pakinItem = new WaitPakinItem();
+                    pakinItem.setAnfme(taskItem.getAnfme())
+                            .setPakinId(waitPakin.getId())
+                            .setSource(taskItem.getId())
+                            .setAsnId(taskItem.getSourceId())
+                            .setAsnCode(taskItem.getSourceCode())
+                            .setAsnItemId(taskItem.getSource())
+                            .setIsptResult(taskItem.getIsptResult())
+                            .setPlatItemId(taskItem.getPlatItemId())
+                            .setPlatOrderCode(taskItem.getPlatOrderCode())
+                            .setPlatWorkCode(taskItem.getPlatWorkCode())
+                            .setProjectCode(taskItem.getProjectCode())
+                            .setBatch(taskItem.getSplrBatch())
+                            .setUnit(taskItem.getUnit())
+                            .setFieldsIndex(taskItem.getFieldsIndex())
+                            .setMatnrId(taskItem.getMatnrId())
+                            .setMaktx(taskItem.getMaktx())
+                            .setUpdateBy(userId)
+                            .setCreateBy(userId)
+                            .setMatnrCode(taskItem.getMatnrCode());
+                    WkOrder order = asnOrderService.getById(taskItem.getSourceId());
+                    if (!Objects.isNull(order)) {
+                        pakinItem.setType(null == order.getType() ? null : order.getType())
+                                .setWkType(null == order.getWkType() ? null : Short.parseShort(order.getWkType()));
+                    }
+                    items.add(pakinItem);
+                    existPakinItems.add(pakinItem);
+                }
+            }
+            if (!waitPakinItemService.saveOrUpdateBatch(items)) {
+                throw new CoolException("缁勬墭鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        }
+
+        return R.ok();
     }
 
     @Override
@@ -118,7 +256,8 @@
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
         ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>();
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         for (TaskItem taskItem : taskItems) {
             ContainerWaveDto containerWaveDto = new ContainerWaveDto();
             containerWaveDto.setTaskItem(taskItem);
@@ -126,7 +265,8 @@
             if (null == wave) {
                 throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
             }
-            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>().eq(WaveOrderRela::getWaveId, wave.getId()));
+            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService
+                    .list(new LambdaQueryWrapper<WaveOrderRela>().eq(WaveOrderRela::getWaveId, wave.getId()));
             if (Cools.isEmpty(waveOrderRelas)) {
                 throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
             }
@@ -136,8 +276,10 @@
             for (WkOrder wkOrder : wkOrderList) {
                 List<WkOrderItem> orderItem = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getOrderId, wkOrder.getId())
-                        .eq(StringUtils.isNotEmpty(taskItem.getMatnrCode()), WkOrderItem::getMatnrCode, taskItem.getMatnrCode())
-//                        .eq(StringUtils.isNotEmpty(taskItem.getBatch()), WkOrderItem::getSplrBatch, taskItem.getBatch())
+                        .eq(StringUtils.isNotEmpty(taskItem.getMatnrCode()), WkOrderItem::getMatnrCode,
+                                taskItem.getMatnrCode())
+                // .eq(StringUtils.isNotEmpty(taskItem.getBatch()), WkOrderItem::getSplrBatch,
+                // taskItem.getBatch())
                 );
                 if (null != orderItem) {
                     list.addAll(orderItem);
@@ -157,7 +299,8 @@
         if (null == containerWaveParam || containerWaveParam.getContainerWaveDtos().size() <= 0) {
             return R.error("鍙傛暟閿欒");
         }
-        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, containerWaveParam.getContainer()).last("limit 1"));
+        Task task = taskService.getOne(
+                new LambdaQueryWrapper<Task>().eq(Task::getBarcode, containerWaveParam.getContainer()).last("limit 1"));
         if (null == task) {
             return R.error("鏈壘鍒版墭鐩樺搴旂殑浠诲姟");
         }
@@ -166,7 +309,7 @@
         }
 
         for (ContainerWaveDto containerWaveDto : containerWaveParam.getContainerWaveDtos()) {
-            //鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲�
+            // 鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲�
             double sum = containerWaveDto.getWkOrderItems().stream().mapToDouble(WkOrderItem::getDemandQty).sum();
             BigDecimal total = new BigDecimal(String.valueOf(sum));
             BigDecimal anfme = new BigDecimal(containerWaveDto.getTaskItem().getAnfme().toString());
@@ -178,7 +321,8 @@
                     continue;
                 }
                 WkOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId());
-                BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString()).subtract(new BigDecimal(orderItem.getQty().toString()));
+                BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString())
+                        .subtract(new BigDecimal(orderItem.getQty().toString()));
                 BigDecimal orderDemandQty = new BigDecimal(oldOrderItem.getDemandQty().toString());
                 if (num.compareTo(orderDemandQty) < 0) {
                     throw new CoolException("鎾鏁伴噺澶т簬鍗曟嵁鍑哄簱鏁伴噺锛岃妫�鏌�");
@@ -195,7 +339,7 @@
                 if (!asnOrderItemService.updateById(orderItem)) {
                     throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触");
                 }
-                //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+                // 妫�鏌ュ崟鎹槸鍚﹀畬鎴�
                 Boolean orderChecked = checkOrderComplete(orderItem);
                 if (orderChecked) {
                     wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
@@ -204,18 +348,19 @@
                     }
                 }
             }
-            //妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
-//            Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
-//            if (waveChecked){
-//                Wave wave = waveService.getById(containerWaveDto.getTaskItem().getSourceId());
-//                if (null == wave){
-//                    throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
-//                }
-//                wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
-//                if (!waveService.updateById(wave)){
-//                    throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
-//                }
-//            }
+            // 妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
+            // Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
+            // if (waveChecked){
+            // Wave wave =
+            // waveService.getById(containerWaveDto.getTaskItem().getSourceId());
+            // if (null == wave){
+            // throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+            // }
+            // wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
+            // if (!waveService.updateById(wave)){
+            // throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
+            // }
+            // }
 
         }
 
@@ -223,7 +368,6 @@
         if (!taskService.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐�");
         }
-
 
         return R.ok();
     }
@@ -250,54 +394,56 @@
         }
 
         List<Long> areaList = JSONObject.parseArray(basStation.getCrossZoneArea(), Long.class);
-        if (Cools.isEmpty(areaList)){
+        if (Cools.isEmpty(areaList)) {
             throw new CoolException("褰撳墠绔欑偣搴撳尯鏈厤缃�");
         }
 
         BasContainer basContainer = basContainerService.getOne(new LambdaQueryWrapper<BasContainer>()
-                        .in(BasContainer::getContainerType, containerWaveParam.getType(), false).last("limit 1"));
-        if (Cools.isEmpty(basContainer)){
+                .in(BasContainer::getContainerType, containerWaveParam.getType(), false).last("limit 1"));
+        if (Cools.isEmpty(basContainer)) {
             throw new CoolException("鏈煡璇㈠埌鐩稿叧瀹瑰櫒瑙勫垯");
         }
-        String barcodeType = "barcode REGEXP '"+basContainer.getCodeType()+"'";
-        //瀹瑰櫒绫诲瀷鏌ヨ  璧风偣
+        String barcodeType = "barcode REGEXP '" + basContainer.getCodeType() + "'";
+        // 瀹瑰櫒绫诲瀷鏌ヨ 璧风偣
         Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
-                        .apply(barcodeType)
-                        .eq(Loc::getDeleted, 0)
-                        .eq(Loc::getStatus, 1)
-                        .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type)
-                        .in(Loc::getAreaId, areaList)
-                        .orderByDesc(Loc::getId)
-                        .last("LIMIT 1"),
+                .apply(barcodeType)
+                .eq(Loc::getDeleted, 0)
+                .eq(Loc::getStatus, 1)
+                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type)
+                .in(Loc::getAreaId, areaList)
+                .orderByDesc(Loc::getId)
+                .last("LIMIT 1"),
                 false);
 
-        if (Cools.isEmpty(loc)){
+        if (Cools.isEmpty(loc)) {
             throw new CoolException("鏈煡璇㈠埌绗﹀悎鏉′欢鐨勬墭鐩�");
         }
-        //鐢熸垚浠诲姟鍙傛暟
+        // 鐢熸垚浠诲姟鍙傛暟
         LocToTaskParams locToTaskParams = new LocToTaskParams();
         locToTaskParams.setType(Constants.TASK_TYPE_OUT_STOCK_EMPTY)
                 .setSiteNo(basStation.getStationName())
                 .setOrgLoc(loc.getId().toString());
-        try{
-            locItemService.generateTaskEmpty(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val,locToTaskParams,loginUserId, containerWaveParam.getTaskNo());
-        } catch (Exception e){
+        try {
+            locItemService.generateTaskEmpty(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val, locToTaskParams, loginUserId,
+                    containerWaveParam.getTaskNo());
+        } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
         return R.ok();
     }
 
-
-
-
     private Boolean checkWaveComplete(TaskItem taskItem) {
         Wave wave = waveService.getById(taskItem.getSourceId());
-        List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getWaveId, wave.getId()));
-        return wkOrderList.stream().allMatch(item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
+        List<WkOrder> wkOrderList = asnOrderService
+                .list(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getWaveId, wave.getId()));
+        return wkOrderList.stream().allMatch(
+                item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
     }
 
     private Boolean checkOrderComplete(WkOrderItem orderItem) {
-        List<WkOrderItem> wkOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderCode, orderItem.getOrderCode()));
-        return wkOrderItems.stream().allMatch(item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
+        List<WkOrderItem> wkOrderItems = asnOrderItemService
+                .list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderCode, orderItem.getOrderCode()));
+        return wkOrderItems.stream().allMatch(
+                item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
     }
 }

--
Gitblit v1.9.1