|
|
@@ -4,6 +4,7 @@ import com.ruoyi.app.order.dto.MultiStoreCardView;
|
|
|
import com.ruoyi.app.order.dto.MultiStoreMemberView;
|
|
|
import com.ruoyi.app.order.dto.MultiStorePageView;
|
|
|
import com.ruoyi.app.order.dto.MultiStoreRefundMemberView;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.MessageUtils;
|
|
|
import com.ruoyi.system.domain.CheckoutCardRow;
|
|
|
@@ -148,14 +149,22 @@ public class MultiStoreCheckoutQueryService {
|
|
|
for (MultiStoreCardView view : result) {
|
|
|
if ("ORDER".equals(view.getCardType())) {
|
|
|
attachOrderContext(view.getOrderId(), originals, storeMap, userMap, longitude, latitude,
|
|
|
- view::setLegacyOrder, view::setStore, view::setUser, view::setJuli);
|
|
|
+ view::setLegacyOrder, view::setStore, view::setUser, view::setJuli, view::setGoodsCount);
|
|
|
} else {
|
|
|
+ int cardGoods = 0;
|
|
|
+ boolean anyGoods = false;
|
|
|
for (MultiStoreMemberView member : view.getMembers()) {
|
|
|
attachOrderContext(member.getOrderId(), originals, storeMap, userMap, longitude, latitude,
|
|
|
- member::setLegacyOrder, member::setStore, member::setUser, member::setJuli);
|
|
|
+ member::setLegacyOrder, member::setStore, member::setUser, member::setJuli,
|
|
|
+ member::setGoodsCount);
|
|
|
// 组没有单一配送里程;逐子单暴露旧详情的 jvli,缺失快照不臆造距离。
|
|
|
member.setJvli(member.getLegacyOrder() == null ? null : member.getLegacyOrder().getJvli());
|
|
|
+ if (member.getGoodsCount() != null) {
|
|
|
+ cardGoods += member.getGoodsCount();
|
|
|
+ anyGoods = true;
|
|
|
+ }
|
|
|
}
|
|
|
+ if (anyGoods) view.setGoodsCount(cardGoods);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -168,12 +177,30 @@ public class MultiStoreCheckoutQueryService {
|
|
|
java.util.function.Consumer<PosOrder> orderSetter,
|
|
|
java.util.function.Consumer<PosStore> storeSetter,
|
|
|
java.util.function.Consumer<InfoUser> userSetter,
|
|
|
- java.util.function.Consumer<Double> juliSetter) {
|
|
|
+ java.util.function.Consumer<Double> juliSetter,
|
|
|
+ java.util.function.Consumer<Integer> goodsCountSetter) {
|
|
|
PosOrder order = originals.get(orderId);
|
|
|
orderSetter.accept(order);
|
|
|
storeSetter.accept(order == null || order.getMdId() == null ? null : storeMap.get(order.getMdId().intValue()));
|
|
|
userSetter.accept(order == null || order.getUserId() == null ? null : userMap.get(order.getUserId()));
|
|
|
juliSetter.accept(straightKm(order, longitude, latitude));
|
|
|
+ goodsCountSetter.accept(goodsCount(order == null ? null : order.getFood()));
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 商品件数与统一列表同口径:food 快照各行 number 求和,空或非法返回空。 */
|
|
|
+ private Integer goodsCount(String food) {
|
|
|
+ if (food == null || food.isBlank()) return null;
|
|
|
+ try {
|
|
|
+ JSONArray rows = JSONArray.parseArray(food);
|
|
|
+ int count = 0;
|
|
|
+ for (int i = 0; i < rows.size(); i++) {
|
|
|
+ Integer num = rows.getJSONObject(i).getInteger("number");
|
|
|
+ if (num != null) count += num;
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ } catch (RuntimeException e) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/** 旧骑手列表同款球面直线距离(公里、两位小数);订单或请求坐标缺失返回空。 */
|