diff --git a/backend/modules/shop/logic/delivery/DeliveryManager.php b/backend/modules/shop/logic/delivery/DeliveryManager.php index 7208b46..98cd00e 100644 --- a/backend/modules/shop/logic/delivery/DeliveryManager.php +++ b/backend/modules/shop/logic/delivery/DeliveryManager.php @@ -5,7 +5,6 @@ namespace backend\modules\shop\logic\delivery; use backend\modules\shop\models\ars\Delivery; use backend\modules\shop\models\ars\DeliveryGoods; -use backend\modules\shop\models\ars\ExpressTemplate; use backend\modules\shop\models\ars\Order; use backend\modules\shop\models\ars\OrderGoods; use Yii; @@ -15,8 +14,8 @@ use yii\helpers\ArrayHelper; class DeliveryManager { /** - * @param $order - * @param $delivery + * @param Order $order + * @param Delivery $delivery * @return array * 订单发货 */ @@ -100,119 +99,64 @@ class DeliveryManager /** * @param $order_id * @return array - * @throws Exception - * 获取发货全部商品信息 + * 查询订单发货商品信息 */ public static function deliveryGoodsInfo($order_id) { - $delivery = Delivery::find()->select('id')->where(['order_id' => $order_id])->all(); + $delivery = Delivery::findAll(['order_id' => $order_id]); /*如果该订单是首次发货*/ - if (!$delivery) { - $unShippedGoods = OrderGoods::find()->where(['order_id' => $order_id])->asArray()->all(); + if ($delivery) { + /*获取订单已发的商品和未发的商品*/ + return self::getDeliveryGoodsInfo($delivery); + } else { + $unShippedGoods = OrderGoods::find()->where(['order_id' => $order_id])->all(); return ['unShipped' => $unShippedGoods]; } - - $filter = []; - $deliveryIds = []; - foreach ($delivery as $value) { - $deliveryIds[] = $value->id; - } - $deliveryGoods = DeliveryGoods::find()->where(['delivery_id' => $deliveryIds])->all(); - for ($i = 0; $i < count($deliveryGoods); $i++) { - $orderGoodsId = $deliveryGoods[$i]['order_goods_id']; - //以orderGoods的id为键名,以orderGoods的数量为键值,先保存到filter数组中 - $filter[$orderGoodsId] = $deliveryGoods[$i]['goods_count']; - for ($j = 0; $j < count($deliveryGoods); $j++) { - //如果发货商品中有其他相同orderGoods的商品 - if ($orderGoodsId == $deliveryGoods[$j]['order_goods_id'] && $i != $j) { - //商品数量叠加起来并保存 - $filter[$orderGoodsId] += $deliveryGoods[$j]['goods_count']; - } - } - } - - /*获取订单已发的商品和未发的商品*/ - return self::getDeliveryGoodsInfo($filter, $order_id); } /** - * @param $filter - * @param $order_id + * @param $delivery * @return array - * @throws Exception * 获取订单已发的商品和未发的商品 */ - public static function getDeliveryGoodsInfo($filter, $order_id) + public static function getDeliveryGoodsInfo($delivery) { - $unShipped = []; //未发货商品 - foreach ($filter as $k => $value) { //键名为order_goods_id,键值为对应的已发货数量 - $goodsData = self::getOrderGoodsInfo($k); - if ($value < $goodsData['goods_count']) { //如果已发货数量未达到order_goods里的数量 - $lack_number = $goodsData['goods_count'] - $value; - $goodsData['lack_number'] = $lack_number; - $goodsData['goods_count'] = $lack_number; - $unShipped[] = $goodsData; - } - } - - $shipped = []; - $delivery = Delivery::findAll(['order_id' => $order_id]); + $data = []; + $deliveryIds = []; foreach ($delivery as $k => $value) { - - $shipped[$k]['logisticInfo'] = [ - 'exp_name' => '', - 'invoice_no' => '', - 'created_at' => '', - ]; //物流公司和运单号 - $shipped[$k]['goodsInfo'] = self::getDeliverGoodsInfo($value->id); //获取商品信息 + $deliveryIds[] = $value->id; + $orderGoodsIds = DeliveryGoods::find() + ->select('order_goods_id') + ->where(['delivery_id' => $value->id]) + ->andWhere(['>', 'goods_count', 0]) + ->column(); + $value->deliveryGoods = OrderGoods::findAll($orderGoodsIds); } + $data['shipped'] = $delivery; - return ['shipped' => $shipped, 'unShipped' => $unShipped]; - } - - /** - * @param $delivery_id - * @return array - * @throws Exception - * 通过获取订单已发货的商品信息 - */ - public static function getDeliverGoodsInfo($delivery_id) - { - $goodsInfo = []; + $deliveryGoodsData = []; $deliveryGoods = DeliveryGoods::find() - ->where(['delivery_id' => $delivery_id]) + ->select(['order_goods_id', 'goods_count']) + ->where(['delivery_id' => $deliveryIds]) ->andWhere(['>', 'goods_count', 0]) ->all(); - foreach ($deliveryGoods as $value) { - $goodsData = self::getOrderGoodsInfo($value->order_goods_id); - $goodsData['delivery_number'] = $value->goods_count; - $goodsInfo[] = $goodsData; + foreach ($deliveryGoods as $k => $value) { + $orderGoods = $value->order_goods_id; + if (isset($deliveryGoodsData[$orderGoods])) { + $deliveryGoodsData[$orderGoods] += $value->goods_count; + } else { + $deliveryGoodsData[$orderGoods] = $value->goods_count; + } } - return $goodsInfo; - } - - /** - * @param $order_goods_id - * @return array - * @throws Exception - * 获取订单商品信息 - */ - private static function getOrderGoodsInfo($order_goods_id) - { - $orderGoods = OrderGoods::findOne($order_goods_id); //通过orderGoods_id找到订单商品 - if ($orderGoods) { - $goodsData = [ - 'id' => $orderGoods->id, - 'goods_id' => $orderGoods->goods_id, - 'goods_name' => $orderGoods->goods_name, - 'goods_count' => $orderGoods->goods_count, - 'goods_img' => $orderGoods->goods_img, - 'sku_value' => $orderGoods->sku_value, - ]; - return $goodsData; - } else { - throw new Exception('order_goods not found'); + foreach ($deliveryGoodsData as $k => $value) { //键名为order_goods_id,键值为对应的已发货数量 + $orderGoods = OrderGoods::findOne($k); //通过orderGoods_id找到订单商品 + if ($value < $orderGoods->goods_count) { //如果已发货数量未达到order_goods里的数量 + $orderGoods->lack_number = $orderGoods->goods_count - $value; + $data['unShipped'][] = $orderGoods; + } } + + return $data; } diff --git a/backend/modules/shop/models/ars/Delivery.php b/backend/modules/shop/models/ars/Delivery.php index 6e5db5a..efa69d5 100755 --- a/backend/modules/shop/models/ars/Delivery.php +++ b/backend/modules/shop/models/ars/Delivery.php @@ -23,6 +23,9 @@ class Delivery extends \yii\db\ActiveRecord { const TYPE_SHIPMENT_ALL = 1; const TYPE_SHIPMENT_PORTION = 2; + + public $deliveryGoods; + /** * {@inheritdoc} */ diff --git a/backend/modules/shop/models/ars/OrderGoods.php b/backend/modules/shop/models/ars/OrderGoods.php index 2c08e76..1c77ee3 100755 --- a/backend/modules/shop/models/ars/OrderGoods.php +++ b/backend/modules/shop/models/ars/OrderGoods.php @@ -24,6 +24,8 @@ use yii\behaviors\TimestampBehavior; */ class OrderGoods extends \yii\db\ActiveRecord { + public $lack_number; + /** * {@inheritdoc} */ diff --git a/backend/modules/shop/views/order/delivery_goods.php b/backend/modules/shop/views/order/delivery_goods.php index 366a86b..9eeea6e 100644 --- a/backend/modules/shop/views/order/delivery_goods.php +++ b/backend/modules/shop/views/order/delivery_goods.php @@ -11,6 +11,9 @@ .box { margin-top: 20px; } + .box h4 { + text-align: center; + } .unShipped-table, .shipped-table { margin:15px; width:90%; @@ -18,9 +21,6 @@ border-radius: 10px; box-shadow:0 4px 30px 2px rgba(223, 225, 230, 0.5) !important; } - .logistic { - text-align: center; - } input { width: 50%; } @@ -28,7 +28,7 @@
-
未发货商品
+

未发货商品

@@ -40,11 +40,11 @@ lack_number) ? $value->lack_number : $value->goods_count; echo '' . - '' . - '' . - '' . + '' . + '' . + '' . '' . "" . ''; @@ -55,14 +55,14 @@
已发货商品'; + echo '

已发货商品

'; foreach ($deliveryGoods['shipped'] as $shipped) { - echo '
快递公司:'; - echo "【{$shipped['logisticInfo']['exp_name']}】"; + echo "
货流名称:"; + echo '【' . $shipped->shipping_name . '】'; echo '    运单号:'; - echo "【{$shipped['logisticInfo']['invoice_no']}】"; + echo '【' . '】'; echo '    创建时间:'; - echo "【{$shipped['logisticInfo']['created_at']}】"; + echo '【' . date('Y-m-d H:i:s', $shipped->created_at) . '】'; echo '
'; echo @@ -74,12 +74,12 @@ '
' . ''; - foreach ($shipped['goodsInfo'] as $goodsInfo) { + foreach ($shipped->deliveryGoods as $goodsInfo) { echo '' . - "" . - "" . - "" . - "" . + "" . + "" . + "" . + "" . ''; } echo '
商品ID
' . $value['goods_id'] . '' . $value['goods_name'] . '' . $value['sku_value'] . '' . $value->goods_id . '' . $value->goods_name . '' . $value->sku_value . '' . $lackNumber . '
发货数量
{$goodsInfo['goods_id']} {$goodsInfo['goods_name']} {$goodsInfo['sku_value']} {$goodsInfo['delivery_number']} {$goodsInfo->goods_id} {$goodsInfo->goods_name} {$goodsInfo->sku_value} {$goodsInfo->goods_count}
';