Ejemplo n.º 1
0
 public function updateItemtoAnotherAction()
 {
     //get current schoolid
     $schoolid = $this->getCurrentSchoolId();
     $returnData = array("success" => true, "data" => "");
     $orderid = $this->getInput("orderid", "post");
     $orderItemId = $this->getInput("fromItemId", "post");
     $toMId = $this->getInput("toMId", "post");
     if ($orderid <= 0 || $orderItemId <= 0) {
         $returnData['success'] = false;
         $returnData['data'] = "数据未准备完全";
         print_r(json_encode($returnData));
         die;
     }
     //old Order and order Item infor
     $orderItemInfo = $this->_getMyOrderDS()->getOrderItemById($orderItemId);
     $orderItemInfo = $orderItemInfo[0];
     $originalItemMoney = $orderItemInfo['price'];
     $orderInfo = $this->_getMyOrderDS()->getOrdertail($orderid);
     $orderInfo = $orderInfo[0];
     if ($toMId <= 0) {
         //cancel the order item
         //remove old item to archive table and create new table
         Wind::import('EXT:4tschool.service.myorder.dm.App_OrderItem_Dm');
         $dmitem = new App_OrderItem_Dm();
         $dmitem->setValid(0);
         //not valid anymore
         $this->_getMyOrderDS()->updateOrderItem($orderItemId, $dmitem);
         //need to update old order total money
         $newOrderMoney = $orderInfo['ordermoney'] - $originalItemMoney;
         //如果订单中只有一个商品, 当商品被取消时, 那么这个订单就应该被取消
         $this->_getMyOrderDS()->updateOrderItemStatus($orderItemId, 7);
         //客户取消
         //当订单中没有缺货了的Item的时候,应该更新为其中某个Item的状态
         $orderItems = $this->_getMyOrderDS()->getOrderItems($orderInfo['id']);
         //得到order item里面最小的状态
         if (count($orderItems) > 0) {
             $lowestStatus = $orderInfo['status'];
             foreach ($orderitems as $key => $eachItem) {
                 if ($eachItem['status'] < $lowestStatus) {
                     $lowestStatus = $eachItem['status'];
                 }
             }
         } else {
             $lowestStatus = 7;
         }
         //已取消,当这个订单没有物品时,应取消订单
         //
         //compose order data and update total money
         Wind::import('EXT:4tschool.service.myorder.dm.App_Order_Dm');
         $dmorder = new App_Order_Dm();
         $dmorder->setOrdermoney($newOrderMoney)->setStatus($lowestStatus);
         $this->_getMyOrderDS()->updateOrder($orderid, $dmorder);
         $returnData['success'] = true;
         $returnData['data'] = "取消菜品成功, 返回缺货列表";
         print_r(json_encode($returnData));
         die;
     } else {
         //new order Item infor
         $merchandiseInfo = $this->_getMerchandiseDS()->getMerchandiseById($toMId);
         $shopInfo = $this->_getShopDS()->getByShopId($merchandiseInfo['shopid']);
         $needPackingPrice = $merchandiseInfo['needPackingPrice'];
         if ($needPackingPrice == 1) {
             $packingPrice = $shopInfo['packingprice'] + $shopInfo['deliveryprice'];
         } else {
             $packingPrice = 0.0;
         }
         //check and compare price
         $newItemMoney = ($merchandiseInfo['currentprice'] + $packingPrice) * $orderItemInfo['quatity'];
         //need to update old order total money
         $newOrderMoney = $orderInfo['ordermoney'] + ($newItemMoney - $originalItemMoney);
         //compose order data and update total money
         Wind::import('EXT:4tschool.service.myorder.dm.App_Order_Dm');
         $dmorder = new App_Order_Dm();
         $dmorder->setOrdermoney($newOrderMoney);
         $this->_getMyOrderDS()->updateOrder($orderid, $dmorder);
         //remove old item to archive table and create new table
         Wind::import('EXT:4tschool.service.myorder.dm.App_OrderItem_Dm');
         $dmitem = new App_OrderItem_Dm();
         $dmitem->setValid(0);
         //not valid anymore
         $this->_getMyOrderDS()->updateOrderItem($orderItemId, $dmitem);
         //create new order item
         Wind::import('EXT:4tschool.service.myorder.dm.App_OrderItem_Dm');
         $dmnewitem = new App_OrderItem_Dm();
         $dmnewitem->setOrderId($orderid)->setMerchandiseId($toMId)->setSchoolAreaId($shopInfo['areaid'])->setQuatity($orderItemInfo['quatity'])->setPriceOriginal($merchandiseInfo['price'])->setPriceOfferDescription("优惠了" . ($merchandiseInfo['price'] - $merchandiseInfo['currentprice']) * $value['qty'] . "元")->setPrice($merchandiseInfo['currentprice'] + $packingPrice)->setSaving(($merchandiseInfo['price'] - $merchandiseInfo['currentprice']) * $value['qty'])->setIntegral($newItemMoney * 1.5)->setSequence($orderItemInfo['sequence'])->setPackingprice($packingPrice)->setChangeFromItemId($orderItemId)->setStatus(1);
         //已受理
         $generatedItemId = $this->_getMyOrderDS()->insertOrderItem($dmnewitem);
         $this->_getMyOrderDS()->updateOrderItemStatus($generatedItemId, 1);
         //已下单
         $returnData['success'] = true;
         $returnData['data'] = "替换菜品成功, 返回缺菜列表";
         print_r(json_encode($returnData));
         die;
     }
 }
Ejemplo n.º 2
0
 public function makeOrder($userid, $schoolId, $merchandisesInfo, $to, $phone, $address, $note, $source, $orderExpressTime = '', $orderHour = '', $orderMinutes = '', $shopDeduct = array())
 {
     //get ordered merchandise and information relates to it
     //say. 数量,积分
     //基于商店拆分订单
     $groupOrdersByShop = array();
     $orderItems = $merchandisesInfo;
     foreach ($orderItems as $key => &$eachItem) {
         $eachItem = (array) $eachItem;
         $groupOrdersByShop[$eachItem['shopid']][] = $eachItem;
     }
     $orderTime = $orderHour . ':' . $orderMinutes;
     $deliveryInfo = array("to" => $to, "phone" => $phone, "address" => $address, "note" => $note, "preorder" => $orderExpressTime == '', "preoderat" => $orderTime);
     $notes = array();
     if (is_array($note)) {
         foreach ($note as $key => $value) {
             $notes[$value['shopid']] = $value['note'];
         }
     }
     $generatedOrderIds = array();
     $totalDianMoney = 0;
     $isFirst = $this->isFirstOrder($userid);
     $isFirstSince0331 = $isFirst || $this->isFirstOrder($userid, '2014-03-31');
     foreach ($groupOrdersByShop as $shopid => $orderItems) {
         $shopInfo = $this->_getShopDS()->getByShopId($shopid);
         //generateOrderNumber
         $generatedOrderNumber = $this->generateOrderNumber();
         //$successMessage = "下单成功";
         $totalMoney = 0;
         $totalOriginalMoney = 0;
         //estimate delivery time(from order to user)
         $estimatetime = $this->_getShopDS()->getShopOrderTimeBase($shopid);
         date_default_timezone_set("Asia/Shanghai");
         $currentTime = time() + $estimatetime * 60;
         $estimateDeliveryat = date('Y-m-d H:i:s', $currentTime);
         if (is_array($note)) {
             $mark = $notes[$shopid];
         } else {
             $mark = $note;
         }
         //check shop if is order to user(代课下单的意思)
         $ifordertouser = $shopInfo['openordertouser'];
         //$this->_getShopDS()->checkIfOrderToUser($shopid);
         //check order items
         //compose order data
         Wind::import('EXT:4tschool.service.myorder.dm.App_Order_Dm');
         $dmorder = new App_Order_Dm();
         $dmorder->setUserId($userid)->setSchoolId($schoolId)->setShopId($shopid)->setOrderNumber($generatedOrderNumber)->setStatus(0)->setPaymethod(1)->setDelivermethod()->setTo($deliveryInfo['address'])->setToWho($deliveryInfo['to'])->setToMobile($deliveryInfo['phone'])->setPreOrder($deliveryInfo['preorder'])->setPreOrderAt($deliveryInfo['preorderat'])->setSavingtotal($totalOriginalMoney - $totalMoney)->setOrdermoney($totalMoney)->setNote($mark)->setEstimatedeliveryat($estimateDeliveryat)->setEstimatetime($estimatetime)->setSource($source)->setFirstOrder($isFirst ? 1 : 0)->setFirstOrderSince0331($isFirstSince0331)->setOrderToUser($ifordertouser ? 1 : 0);
         $orderid = $this->insertOrder($dmorder);
         //calculate deduct price
         $totalDeduct = 0;
         if ($orderid > 0) {
             $generatedOrderIds[] = $orderid;
             //insert order status history
             $this->insertOrderStatusHistory($orderid, $this->loginUser->uid, 0, 1);
             //order sequence
             $sequence = $this->getOrderSequence($orderid);
             $i = 0;
             $totalQuantity = 0;
             foreach ($orderItems as $key => $value) {
                 $i++;
                 $merchandiseId = $value['merchandiseId'];
                 //check item
                 $merchandiseInfo = $this->_getMerchandiseDS()->getMerchandiseById($merchandiseId);
                 $needPackingPrice = $merchandiseInfo['needPackingPrice'];
                 if ($needPackingPrice == 1) {
                     $packingPrice = $shopInfo['packingprice'] + $shopInfo['deliveryprice'];
                 } else {
                     $packingPrice = 0.0;
                 }
                 $totalMoney = $totalMoney + ($merchandiseInfo['currentprice'] + $packingPrice) * $value['qty'];
                 $totalOriginalMoney = $totalOriginalMoney + ($merchandiseInfo['price'] + $packingPrice) * $value['qty'];
                 //更新商店人气
                 Wind::import('EXT:4tschool.service.shop.dm.App_Shop_Dm');
                 $shopDM = new App_Shop_Dm();
                 $shopDM->setOrderCount($shopInfo['ordercount'] + $value['qty']);
                 $this->_getShopDS()->update($shopInfo['id'], $shopDM);
                 $MDeductMoney = array();
                 $usedPromo = '';
                 //check M deducted price
                 foreach ($promos['Match'] as $key => $eachPromo) {
                     if ($eachPromo['MID'] == $merchandiseId) {
                         $MDeductMoney[$merchandiseId] = $eachPromo['Deduct'];
                         $usedPromo = $eachPromo['ShopName'] . "限时活动, 满" . $eachPromo['Meet'] . "元," . $eachPromo['MerchandiseName'] . "立减" . $eachPromo['Deduct'] . "元";
                         break;
                     }
                 }
                 $priceIncludingPacking = $merchandiseInfo['currentprice'] + $packingPrice;
                 $MTotalMoney = $priceIncludingPacking * $value['qty'] - $MDeductMoney[$merchandiseId];
                 Wind::import('EXT:4tschool.service.myorder.dm.App_OrderItem_Dm');
                 $dmitem = new App_OrderItem_Dm();
                 $dmitem->setOrderId($orderid)->setMerchandiseId($merchandiseId)->setSchoolAreaId($shopInfo['areaid'])->setQuatity($value['qty'])->setPriceOriginal($merchandiseInfo['price'])->setPriceOfferDescription("优惠了" . ($merchandiseInfo['price'] - $merchandiseInfo['currentprice']) * $value['qty'] . "元")->setPrice($priceIncludingPacking)->setSaving(($merchandiseInfo['price'] - $merchandiseInfo['currentprice']) * $value['qty'])->setIntegral($MTotalMoney)->setSequence($sequence . "-" . $i)->setPackingprice($packingPrice)->setStatus(0)->setTotalMoney($MTotalMoney)->setPromoUsed($usedPromo);
                 $generatedItemId = $this->insertOrderItem($dmitem);
                 //update merchandise order count
                 $this->_getMerchandiseDS()->orderCountIncrease($merchandiseId);
             }
             //calculate 点币
             $dianMoney = 0;
             $ordermoney = $totalMoney - $totalDeduct;
             //check if shop has 返利
             $hasShopProfit = $shopInfo['ifrebate'];
             $rate = $shopInfo['rebatefromshop'];
             if ($hasShopProfit == 1) {
                 $rmbShopReturn = $ordermoney * $rate;
                 $rmbforUser = $this->_getShopDailySaleDs()->getUserProfit($rmbShopReturn);
                 $dianMoney = $rmbforUser * 10;
             } else {
                 $rmbShopReturn = 0;
                 $rate = 0;
             }
             Wind::import('EXT:4tschool.service.myorder.dm.App_Order_Dm');
             $dmUpdateOrder = new App_Order_Dm();
             $dmUpdateOrder->setSavingtotal($totalOriginalMoney - $totalMoney + $totalDeduct)->setOrdermoney($totalMoney - $totalDeduct)->setDeservedPointcoin($dianMoney)->setShopreturn($rmbShopReturn)->setRebatefromshop($rate);
             //更新订单总金额
             $this->updateOrder($orderid, $dmUpdateOrder);
             //notify user
             $this->_getOrderStatusNotifyDs()->SendStatusNotify(0, $orderid);
             //notify user
         }
         //push message to shop client, notify that there is new order
         $notifytitle = $totalMoney . "元新订单等待您接收-点餐哟";
         $notifycontent = "请开启订单接收软件进行接单, 谢谢";
         //notify shop
         $this->_getOrderStatusNotifyDs()->PushToShopClient($shopid, $shopInfo['openordertouser'], $notifytitle, $notifycontent);
     }
     return $generatedOrderIds;
 }