chen.lin
6 天以前 0c497375461a8f8cb644f9dc2f4473dabb52abd2
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -34,7 +34,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class PdaCheckOrderServiceImpl implements PdaCheckOrderService {
@@ -62,6 +65,12 @@
    private ReportMsgService reportMsgService;
    @Autowired
    private UserService userService;
    @Autowired
    private CheckOrderItemService checkOrderItemService;
    @Autowired
    private CheckOrderService checkOrderService;
    @Override
@@ -202,6 +211,43 @@
            throw new CoolException("更新差异单失败");
        }
        // 按盘点单明细汇总实盘数量并回写
        Set<Long> taskItemIds = diffItems.stream().map(CheckDiffItem::getTaskItemId).filter(Objects::nonNull).collect(Collectors.toSet());
        if (!taskItemIds.isEmpty()) {
            List<TaskItem> taskItems = taskItemService.listByIds(taskItemIds);
            Map<Long, BigDecimal> orderItemIdToCheckQty = new HashMap<>();
            for (CheckDiffItem di : diffItems) {
                if (di.getTaskItemId() == null) {
                    continue;
                }
                TaskItem ti = taskItems.stream().filter(t -> t.getId().equals(di.getTaskItemId())).findFirst().orElse(null);
                if (ti == null || ti.getOrderItemId() == null) {
                    continue;
                }
                Double cq = di.getCheckQty() != null ? di.getCheckQty() : 0.0;
                orderItemIdToCheckQty.merge(ti.getOrderItemId(), BigDecimal.valueOf(cq), BigDecimal::add);
            }
            for (Map.Entry<Long, BigDecimal> e : orderItemIdToCheckQty.entrySet()) {
                double workQty = e.getValue().setScale(6, RoundingMode.HALF_UP).doubleValue();
                if (!checkOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getId, e.getKey())
                        .set(WkOrderItem::getWorkQty, workQty))) {
                    throw new CoolException("盘点单明细实盘数量更新失败");
                }
            }
            if (checkDiff.getOrderId() != null) {
                List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, checkDiff.getOrderId()));
                BigDecimal orderWorkQty = orderItems.stream()
                        .map(oi -> oi.getWorkQty() != null ? BigDecimal.valueOf(oi.getWorkQty()) : BigDecimal.ZERO)
                        .reduce(BigDecimal.ZERO, BigDecimal::add);
                if (!checkOrderService.update(new LambdaUpdateWrapper<WkOrder>()
                        .eq(WkOrder::getId, checkDiff.getOrderId())
                        .set(WkOrder::getWorkQty, orderWorkQty.setScale(6, RoundingMode.HALF_UP).doubleValue()))) {
                    throw new CoolException("盘点单主表实盘数量更新失败");
                }
            }
        }
        task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
        task.setUpdateBy(loginUserId);
        task.setUpdateTime(new Date());