예제 #1
0
 /**
  * [addcodeAction 添加云码]
  * @return [type] [description]
  */
 public function addcodeAction()
 {
     if ($this->request->isPost()) {
         if (!$this->validFlag) {
             $error = json_encode(array('ret' => 0, 'msg' => $this->warnMsg));
             $this->view->setVars(array('error' => $error));
         } else {
             for ($i = 0; $i < $this->_sanReq['num']; $i++) {
                 $code = \Mall\Utils\Inputs::createCode();
                 $type = $this->_sanReq['type'];
                 $starTime = strtotime($this->_sanReq['starTime']);
                 $endTime = strtotime($this->_sanReq['endTime']);
                 $goodsId = $this->_sanReq['gid'];
                 $value .= "('" . $code . "', '" . $type . "', '" . $goodsId . "', '" . $starTime . "', '" . $endTime . "', '" . $_SERVER['REQUEST_TIME'] . "'),";
                 $values = "VALUES " . $value;
             }
             $this->code->batchInnserCode(trim($values, ','));
             $this->log('云码添加成功');
             $this->response->redirect("codes/index");
         }
     }
 }
예제 #2
0
 public function addCouponsAction()
 {
     if ($this->request->isPost()) {
         if (!$this->validFlag) {
             $error = json_encode(array('ret' => 0, 'msg' => $this->warnMsg));
         } else {
             for ($i = 0; $i < $this->_sanReq['num']; $i++) {
                 $cpsn = \Mall\Utils\Inputs::createCode('6');
                 $crid = $this->_sanReq['crid'];
                 $starTime = strtotime($this->_sanReq['starTime']);
                 $endTime = strtotime($this->_sanReq['endTime']);
                 $status = $this->_sanReq['status'];
                 $value .= "('" . $crid . "', '" . $cpsn . "', '" . $starTime . "', '" . $endTime . "', '" . $status . "', '" . $_SERVER['REQUEST_TIME'] . "'),";
                 $values = "VALUES " . $value;
             }
             $this->coupons->batchAddCoupons(trim($values, ','));
             $this->log('添加优惠期成功');
             $this->response->redirect("coupons/listCoupons");
         }
     }
     $rule = $this->coupons->showCouponsRule();
     $this->view->setVars(array('rule' => $rule, 'error' => isset($error) ? $error : ''));
 }
예제 #3
0
 /**
  * 下单@L
  */
 public function goAction()
 {
     if (!$this->validFlag || !$this->_sanReq['select']) {
         echo json_encode(array('ret' => 0, 'msg' => $this->warnMsg));
         $this->view->disable();
         return;
     } else {
         $select = json_decode($this->_sanReq['select'], true);
         //收货地址
         $addr = (new \Mall\Mdu\AddressModule())->getAddrById($this->uid, $this->_sanReq['add_id']);
         //取快递费用
         $shipFee = sprintf("%.2f", (new \Mall\Mdu\ShippingPayModule())->getShipPayByPro($addr['pro_id']));
         //发票
         if ($this->_sanReq['is_inv'] == 3) {
             $this->_sanReq['inv_type'] = 0;
             $this->_sanReq['inv_title'] = '';
         }
         //订单编码
         $orderSn = \Mall\Utils\Inputs::makeOrderSn();
         //商品总价,订单金额
         $totalFee = $paiedFee = 0;
         //优惠金额 备用
         $paiedOffFee = 0;
         //立即购买
         if (isset($select['n']) && $select['n'] > 0) {
             $goodsNum = intval($select['n']);
             //获取商品属性 以及判断库存
             $gInfo = $this->cart->getGoodsInfo($this->uid, $select['g'], $select['a'], $goodsNum);
             if ($gInfo != 10000) {
                 //单件商品是否超过最大购买量
                 if (intval($goodsNum) > self::MAX_NUM) {
                     echo json_encode(array('ret' => 0));
                     $this->view->disable();
                     return;
                 }
                 if (!($goodsDates = $this->cart->getBuyNowNames($gInfo, $select['g'], $select['a']))) {
                     echo json_encode(array('ret' => 0));
                 } else {
                     //云码生效标识
                     $codeFlag = 0;
                     //判断是否使用源码
                     if ($codeInfo = $this->di['session']->get('codeInfo')) {
                         //重新获取云码信息  排除多终端记录的session
                         $codeInfo = (new \Mall\Mdu\CodesModule())->getCodeInfo($codeInfo['yc_id']);
                         $ids = explode(',', $codeInfo['yc_good_ids']);
                         if ((in_array($select['g'], $ids) || $codeInfo['yc_good_ids'] == 0) && $codeInfo['yc_type'] == 3 && !$codeInfo['yc_used_time']) {
                             if ($goodsNum != 1) {
                                 echo json_encode(array('ret' => 0));
                                 $this->view->disable();
                                 return false;
                             }
                             //源码暂时不使用运费
                             $paiedOffFee = sprintf('%.2f', $goodsDates['goods_price'] + $shipFee);
                             $codeFlag = 1;
                         } else {
                             $this->session->remove('codeInfo');
                         }
                     }
                     //商品总价
                     $totalFee = sprintf('%.2f', $goodsDates['goods_price'] * $goodsNum);
                     $paiedFee = sprintf('%.2f', $totalFee + $shipFee - $paiedOffFee);
                 }
             } else {
                 echo json_encode(array('ret' => 3));
             }
             //下单
             if ($this->order->addBuyNowOrder($this->uid, $this->mobi, $orderSn, $totalFee, $paiedFee, $paiedOffFee, $this->_sanReq['memo'], $shipFee, $this->_sanReq['is_inv'], $this->_sanReq['inv_type'], $this->_sanReq['inv_title'], $_SERVER['REQUEST_TIME'], $addr, $goodsDates, $goodsNum, $codeFlag) != 1) {
                 echo json_encode(array('ret' => 0));
             }
         } else {
             $attrsIds = $goodsIds = [];
             foreach ($select as $val) {
                 array_push($attrsIds, $val['a']);
                 array_push($goodsIds, $val['g']);
             }
             if (count($attrsIds) != count($goodsIds)) {
                 exit(json_encode(array('ret' => 0)));
             }
             $data = $this->cart->getOrderDatas($this->uid, $goodsIds, $attrsIds);
             $goodsDates = $this->cart->getCartNames($data);
             if ($goodsDates == 10000 || !$goodsDates) {
                 echo json_encode(array('ret' => 3));
                 $this->view->disable();
                 return;
             } else {
                 //商品总价
                 $filterGoodsSum = 0;
                 foreach ($goodsDates as $g) {
                     $totalFee += sprintf('%.2f', $g['goods_price'] * $g['car_good_num']);
                 }
                 $paiedFee = sprintf('%.2f', $totalFee + $shipFee);
             }
             //下单
             if ($this->order->addBuyCartOrder($this->uid, $this->mobi, $orderSn, $totalFee, $paiedFee, $paiedOffFee, $this->_sanReq['memo'], $shipFee, $this->_sanReq['is_inv'], $this->_sanReq['inv_type'], $this->_sanReq['inv_title'], $_SERVER['REQUEST_TIME'], $addr, $goodsDates, $attrsIds, $goodsIds) != 1) {
                 echo json_encode(array('ret' => 0));
             }
         }
         //clear cookie
         setcookie('cg', '', time() - 3600);
         echo json_encode(array('ret' => 1));
         $this->view->disable();
         return;
     }
 }
예제 #4
0
 /**
  * [addBackOrder 添加售后订单]
  *
  * @param $uid
  * @param $data
  * @param $uname
  * @param $actRole
  * @return boolean
  */
 public function addBackOrder($uid, $data, $uname, $actRole)
 {
     //判断订单是否存在,订单状态是否正确
     $order = new \Mall\Mdu\Models\OrderModel();
     if ($actRole == self::BORD_ACT_ROLE_BACKEND) {
         if (!($orderInfo = $order->getSpecifyOrderBySn($data['order_sn'], self::ORDER_STATUS_FINISHED))) {
             return array('ret' => 0, 'code' => self::MSG_ORDER_NONE);
         }
     } else {
         if (!($orderInfo = $order->getSpecifyOrder($uid, $data['order_sn'], self::ORDER_STATUS_FINISHED))) {
             return array('ret' => 0, 'code' => self::MSG_ORDER_NONE);
         }
     }
     $orderLogModel = new \Mall\Mdu\Models\OrderLogsModel();
     //确认订单时间
     $confirmTime = $orderLogModel->getLogTime($orderInfo['order_id'], self::LOG_TYPE_ORDER, $this->di['sysconfig']['orderActType']['received'])['ord_act_addtime'];
     $currentTime = $_SERVER["REQUEST_TIME"];
     //判断是否超过该售后类型的售后时间
     switch ($data['bord_type']) {
         case self::BORD_TYPE_BACK:
             //退货
             if ($currentTime - $confirmTime > $this->di['sysconfig']['supportTime']['back']) {
                 return array('ret' => 0, 'code' => self::MSG_BACK_EXPIRED);
             }
             break;
         case self::BORD_TYPE_EXCHANGE:
             //换货
             if ($currentTime - $confirmTime > $this->di['sysconfig']['supportTime']['exchange']) {
                 return array('ret' => 0, 'code' => self::MSG_CHANGE_EXPIRED);
             }
             break;
         case self::BORD_TYPE_EXCHANGE_MODULE:
             //更换智能模块
             if ($currentTime - $confirmTime > $this->di['sysconfig']['supportTime']['exchangeModel']) {
                 return array('ret' => 0, 'code' => self::MSG_MODULE_CHANGE_EXPIRED);
             }
             break;
         default:
             return array('ret' => 0, 'code' => self::MSG_BORD_TYPE_INVALID);
     }
     //判断省市区是否关联
     if (!(new \Mall\Mdu\Models\RegionModel())->getSpecifyDis($data['pro'], $data['city'], $data['dis'])) {
         return array('ret' => 0, 'code' => self::ERROR);
     }
     $og = new \Mall\Mdu\Models\OrdergoodsModel();
     if ($orderGoods = $og->getOrderGoodsById($data['order_goods_id'])) {
         $gnum = 0;
         //已售后数量
         $goodsNums = $this->back->getBordGoodsNum($data['order_sn'], $orderGoods['attrs_barcode']);
         foreach ($goodsNums as $goodsNum) {
             $gnum += intval($goodsNum['bord_goods_num']);
         }
         if (intval($data['goods_num']) > intval($orderGoods['ord_goods_num']) - $gnum) {
             return array('ret' => 0, 'code' => self::MSG_BORD_NUM_OVERFLOW);
         }
         $data['bord_imgs'] = isset($data['pic']) ? $data['pic'] : '';
         $data['order_id'] = $orderGoods['order_id'];
         $data['goods_name'] = $orderGoods['goods_name'];
         $data['goods_sn'] = $orderGoods['goods_sn'];
         $data['attrs_info'] = $orderGoods['attrs_info'];
         $data['attrs_barcode'] = $orderGoods['attrs_barcode'];
         $data['attrs_img'] = $orderGoods['attrs_img'];
         $data['tel'] = '';
         if (!empty($data['area_code'])) {
             $data['tel'] .= $data['area_code'] . '-' . $data['tel_num'];
             if ($data['ext']) {
                 $data['tel'] .= '-' . $data['ext'];
             }
         }
         $data['bord_sn'] = \Mall\Utils\Inputs::makeOrderSn();
         //生成售后编号
         $this->di['db']->begin();
         if ($actRole == self::BORD_ACT_ROLE_BACKEND) {
             $bordId = $this->back->addBackOrderByAdmin($data['order_uid'], $data);
         } else {
             $bordId = $this->back->addBackOrder($uid, $data);
         }
         if (!$bordId) {
             $this->di['db']->rollback();
             return array('ret' => 0, 'code' => self::ERROR);
         }
         //该订单商品允许的售后数量已全部用完
         if (intval($data['goods_num']) + $gnum >= intval($orderGoods['ord_goods_num'])) {
             //将该订单商品设为已售后
             if (!$og->setOrderGoodsBacked($data['order_goods_id'])) {
                 $this->di['db']->rollback();
                 return array('ret' => 0, 'code' => self::ERROR);
             }
         }
         //写入售后日志
         if (!$orderLogModel->addBordLog($bordId, $actRole, $this->di['sysconfig']['supportActType']['apply'], $uid, $uname, '申请售后')) {
             $this->di['db']->rollback();
             return array('ret' => 0, 'code' => self::ERROR);
         }
         $this->di['db']->commit();
         return array('ret' => 1, 'id' => $bordId);
     }
 }
예제 #5
0
 /**
  * [创建新订单]
  * @param  [array] $goodsData    [订单商品详情]
  * @param  [string] $consignee    [收货人姓名]
  * @param  [string] $mobi         [收货人手机]
  * @param  [string] $province     [省id]
  * @param  [string] $city         [市id]
  * @param  [string] $district     [县id]
  * @param  [string] $street       [街道id]
  * @param  [string] $addr       [具体地址]
  * @param  [string] $shippingFee  [快递金额]
  * @param  [string] $totalFee     [总金额]
  * @return [string]               [返回结果标志]
  */
 public function createOrder($goodsData, $consignee, $mobi, $province, $city, $district, $street, $addr, $shippingFee, $totalFee)
 {
     if (!is_array($goodsData) && empty($goodsData)) {
         return array(self::GOODS_NONE);
     }
     $num = count($goodsData);
     foreach ($goodsData as $k => $val) {
         $goodsIds[$k] = $goodsAttrs[$k]['goodsId'] = $val['goodsId'];
         $goodsAttrs[$k]['goodsAttr'] = intval($val['colorId']) . ',' . intval($val['sizeId']);
         $colors[] = array('goodsId' => $val['goodsId'], 'attrId' => $val['colorId']);
         $sizes[] = array('goodsId' => $val['goodsId'], 'attrId' => $val['sizeId']);
     }
     $colorAttrs = $this->goods->getAttrNames($colors);
     $sizeAttrs = $this->goods->getAttrNames($sizes);
     $colorNum = count($colorAttrs);
     $sizeNum = count($sizeAttrs);
     //获取每条数据的颜色和尺码
     for ($k = 0; $k < $num; $k++) {
         for ($m = 0; $m < $colorNum; $m++) {
             if ($goodsData[$k]['goodsId'] == $colorAttrs[$m]['goods_id'] && $goodsData[$k]['colorId'] == $colorAttrs[$m]['attrs_id']) {
                 $goodsData[$k]['colorName'] = $colorAttrs[$m]['attrs_name'];
                 break;
             }
         }
         for ($n = 0; $n < $sizeNum; $n++) {
             if ($goodsData[$k]['goodsId'] == $sizeAttrs[$n]['goods_id'] && $goodsData[$k]['sizeId'] == $sizeAttrs[$n]['attrs_id']) {
                 $goodsData[$k]['sizeName'] = $sizeAttrs[$n]['attrs_name'];
                 break;
             }
         }
         $goodsData[$k]['attrs_info'] = json_encode(array(array('id' => $goodsData[$k]['colorId'], 'name' => $goodsData[$k]['colorName']), array('id' => $goodsData[$k]['sizeId'], 'name' => $goodsData[$k]['sizeName'])));
     }
     //获取商品详情,比如尺码颜色属性,售价库存等等
     $allAttrs = $this->goods->batchCheckNums($goodsAttrs);
     //取属性图片
     $attrsImgs = $this->goods->getAttrsImg($goodsAttrs);
     $cou = count($allAttrs);
     if ($num != $cou) {
         return array(self::ATTR_NONE);
     }
     //获取商品的信息,比如货号商品名等等
     $allInfos = $this->goods->batchGoodsInfo($goodsIds);
     if (empty($allInfos)) {
         return array(self::GOODS_NONE);
     }
     $infoNum = count($allInfos);
     for ($i = 0; $i < $cou; $i++) {
         $value = $allAttrs[$i];
         $col = explode(',', $value['attrs_ids'])[0];
         $allAttrs[$i]['attrs_img'] = $attrsImgs[$i][$col];
         for ($j = 0; $j < $infoNum; $j++) {
             if ($allAttrs[$i]['goods_id'] == $allInfos[$j]['goods_id']) {
                 $allAttrs[$i]['goods_sn'] = $allInfos[$j]['goods_sn'];
                 $allAttrs[$i]['goods_name'] = $allInfos[$j]['goods_name'];
                 $allAttrs[$i]['goods_market'] = $allInfos[$j]['goods_market'];
                 $allAttrs[$i]['goods_price'] = $allInfos[$j]['goods_price'];
                 break;
             }
         }
         for ($k = 0; $k < $num; $k++) {
             if ($allAttrs[$i]['goods_id'] == $goodsData[$k]['goodsId'] && $allAttrs[$i]['attrs_ids'] == $goodsData[$k]['colorId'] . ',' . $goodsData[$k]['sizeId']) {
                 $allAttrs[$i]['goods_num'] = $goodsData[$k]['goodsNum'];
                 $allAttrs[$i]['attrs_info'] = $goodsData[$k]['attrs_info'];
                 break;
             }
         }
     }
     $this->di['db']->begin();
     if ($orderId = $this->order->createOrder(\Mall\Utils\Inputs::makeOrderSn(), $consignee, $mobi, $province, $city, $district, $street, $addr, $shippingFee, $totalFee, $_SERVER['REQUEST_TIME'])) {
         if ($this->orderGoods->createOrderGoods($orderId, $allAttrs)) {
             $this->di['db']->commit();
             return array(self::SUCCESS, $orderId);
         } else {
             $this->di['db']->rollback();
             return array(self::ERROR);
         }
     } else {
         $this->di['db']->rollback();
         return array(self::ERROR);
     }
 }