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; } }
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; }