| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- namespace addons\CloudStock\common\logic\order;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\models\CloudStockAgentOrder;
- use common\enums\OrderStatusEnum;
- use common\enums\ShippingTypeEnum;
- use common\enums\StatusEnum;
- use common\models\common\Express;
- use common\models\common\Region;
- use common\models\goods\Goods;
- use common\models\goods\GoodsAttr;
- class WangDianTongLogic
- {
- /**
- * @param CloudStockAgentOrder $order
- * @return array
- */
- public static function packMallOrder(CloudStockAgentOrder $order)
- {
- // 以为之前的逻辑,这里只处理一个订单。并且之前子订单ID和主订单ID一致 导致订单提交会报错
- $goodsIds = array_column($order->details, 'goods_id');
- // 因为自提订单没有属性选择。所以默认获取第一个商品属性
- $goodsAttr = GoodsAttr::find()
- ->where(['goods_id' => $goodsIds, 'status' => StatusEnum::ENABLED])
- ->select(['id', 'goods_id', 'price', 'original_price', 'cost_price', 'sign_id', 'pic_url'])
- ->with(['goods' => function ($query) {
- $query->select(['id', 'goods_name', 'original_price', 'cost_price', 'cover_pic']);
- }])->asArray()->groupBy('goods_id')->orderBy('id asc')->indexBy('goods_id')->all();
- // 获取当前订单的省市区名称
- $region_name = Region::find()->where(['id' => [$order->province_id, $order->city_id, $order->district_id]])
- ->orderBy('id asc')->select('name')->column();
- $amount = 0; // 订单总金额
- $returnOrderDetail = [];
- foreach ($order->details as $detail) {
- if (empty($goodsAttr[$detail->goods_id])) continue;
- // 计算商品总价
- $amount += $detail->num * $goodsAttr[$detail->goods_id]['price'] ?? 0;
- $returnOrderDetail[] = [
- 'id' => $detail->id,
- 'order_id' => $detail->order_id,
- 'user_id' => $detail->user_id,
- 'mall_id' => $detail->mall_id,
- 'mch_id' => 0,
- 'store_id' => 0,
- 'goods_id' => $detail->goods_id,
- 'goods_name' => $goodsAttr[$detail->goods_id]['goods']['goods_name'],
- 'goods_attr_id' => $goodsAttr[$detail->goods_id]['id'],
- 'goods_attr_name' => $goodsAttr[$detail->goods_id]['name'],
- 'sign_id' => $goodsAttr[$detail->goods_id]['sign_id'],
- 'attr_groups_format'=> null,
- 'price' => $goodsAttr[$detail->goods_id]['price'],
- 'cost_price' => $goodsAttr[$detail->goods_id]['cost_price'],
- 'original_goods_price' => $goodsAttr[$detail->goods_id]['goods']['original_price'],
- 'goods_price' => bcmul($amount, 1, 2),
- 'num' => $detail->num,
- 'adjust_money' => 0,
- 'pic_url' => !empty($goodsAttr[$detail->goods_id]['pic_url']) ? $goodsAttr[$detail->goods_id]['pic_url'] : $goodsAttr[$detail->goods_id]['goods']['cover_pic'],
- 'marketing_id' => 0,
- 'marketing_type' => 0,
- 'order_type' => StatusEnum::ENABLED,
- 'give_score' => 0,
- 'order_status' => OrderStatusEnum::PAY,
- 'shipping_status' => 0,
- 'is_feedback' => 0,
- 'remark' => '',
- 'is_evaluate' => 0,
- 'refund_balance_money' => 0,
- 'is_virtual' => 0,
- 'status' => StatusEnum::ENABLED,
- 'extra_info' => null,
- 'created_at' => $detail->created_at,
- 'updated_at' => $detail->updated_at,
- ];
- }
- // 设置返回订单数据
- $returnOrder = [
- 'id' => $order->id,
- 'mch_id' => 0,
- 'store_id' => 0,
- 'mall_id' => $order->mall_id,
- 'user_id' => $order->user_id,
- 'order_no' => "cs_{$order->id}",
- 'out_trade_no' => '',
- 'mobile' => $order->mobile,
- 'province' => $order->province_id,
- 'city' => $order->city_id,
- 'area' => $order->district_id,
- 'town' => 0,
- 'community' => 0,
- 'address' => $order->address,
- 'region_name' => implode(" ", $region_name),
- 'zip' => '',
- 'receiver_name' => $order->name,
- 'remark' => $order->remark,
- 'seller_remark' => '',
- 'shipping_type' => ShippingTypeEnum::LOGISTICS,
- 'shipping_money' => 0,
- 'reduce_shipping_money' => 0,
- 'refund_money' => 0,
- 'pay_money' => $amount,
- 'goods_price' => $amount,
- 'original_goods_price' => $amount,
- 'ip' => '',
- 'coupon_id' => 0,
- 'coupon_money' => 0,
- 'score' => 0,
- 'score_money' => 0,
- 'order_status' => OrderStatusEnum::PAY,
- 'pay_status' => StatusEnum::ENABLED,
- 'shipping_status' => 0,
- 'review_status' => 0,
- 'is_feedback' => 0,
- 'payment_type' => '',
- 'marketing_id' => 0,
- 'marketing_type' => '',
- 'invoice_id' => 0,
- 'status' => StatusEnum::ENABLED,
- 'is_comment' => 0,
- 'is_recycle' => 0,
- 'is_virtual' => 0,
- 'is_new_user' => 0,
- 'pay_time' => $order->created_at,
- 'shipping_time' => 0,
- 'sign_time' => 0,
- 'consign_time' => 0,
- 'finish_time' => 0,
- 'close_time' => 0,
- 'extra_info' => null,
- 'order_source' => '',
- 'created_at' => $order->created_at,
- 'updated_at' => $order->updated_at,
- ];
- $returnOrder['detail'] = $returnOrderDetail;
- return $returnOrder;
- }
- /**
- * @param array $params
- * @param array $express
- * @return bool|string
- */
- public static function syncLogistics(array $params, array $express)
- {
- $id = intval($params['id']);
- $order = CloudStockAgentOrder::findOne(['id' => $id]);
- if (empty($order)) return true;
- $params['send_status'] = CloudStockEnum::SEND_STATUS_1;
- $ret = CloudStockAgentOrder::setData($order->mall_id, $params, $express);
- return $ret !== false ? true : CloudStockAgentOrder::getStaticError();
- }
- }
|