getFind(array($BillModel::ID => $param, $BillModel::TYPE => 1)); } $supplier_type = D("RetailStore")->getFindField(array('id' => $bill_order['store_id']), "supplier_type"); //2寄售 // 判断$bill_order if (empty($bill_order)) { $res = array( 'status' => 0, 'msg' => '订单查询失败,请联系商家退款' ); return $res; } // 获取关联的bill_online表数据 $OnlineModel = D('RetailBillOnline'); $bill_online = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $bill_order[$BillModel::ID])); // 判断$bill_online if (empty($bill_online)) { $res = array( 'status' => 0, 'msg' => '订单查询失败,请联系商家退款' ); return $res; } // 获取关联的bill_discount表数据 $DiscountModel = D('RetailBillDiscount'); $bill_discount = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $bill_order[$BillModel::ID])); // 判断$bill_discount if (empty($bill_discount)) { $res = array( 'status' => 0, 'msg' => '订单查询失败,请联系商家退款' ); return $res; } // 查询sell表订单(活动订单只有一条销售记录) $SellModel = new RetailSellModel(); // sell表模型 $sell_order = $SellModel->getFind(array($SellModel::BILL_ID => $bill_order[$BillModel::ID])); if (!$sell_order) { $res = array( 'status' => 0, 'msg' => '销售订单查询失败,请联系商家退款' ); return $res; } // 生成出库记录 switch ($bill_online[$OnlineModel::ORDER_GENRE]) { case 2: // 查询bill_group关联数据 $BillGroupModel = D('RetailBillGroup'); $bill_group = $BillGroupModel->getFind(array($BillGroupModel::BILL_ID => $bill_order[$BillModel::ID])); if (empty($bill_group)) { $res = array( 'status' => 0, 'msg' => '订单查询失败,请联系商家退款' ); return $res; } // 拼团出库记录 // 剩余库存购<买数量 $add_log = $this->groupQuantityLogs($bill_group[$BillGroupModel::GROUP_ID], $bill_group[$BillGroupModel::SKU_ID], $sell_order[$SellModel::GOODS_ID], $bill_group[$BillGroupModel::BUY_NUMBER], $sell_order['id']); break; case 3: // 查询bill_group关联数据 $BillSpikeModel = D('RetailBillSpike'); $bill_spike = $BillSpikeModel->getFind(array($BillSpikeModel::BILL_ID => $bill_order[$BillModel::ID])); if (empty($bill_spike)) { $res = array( 'status' => 0, 'msg' => '订单查询失败,请联系商家退款' ); return $res; } // 秒杀出库记录 $add_log = $this->spikeQuantityLogs($bill_spike[$BillSpikeModel::SPIKE_ID], $bill_order[$BillModel::MERCHANT_ID], $sell_order[$SellModel::GOODS_ID], $bill_spike[$BillSpikeModel::BUY_NUMBER], $sell_order[$SellModel::ALL_MONEY], $sell_order['id']); break; case 4: //预售订单 $advance_bill = D("RetailBillAdvance")->getFind(array("bill_id" => $bill_order["id"])); if (empty($advance_bill)) { $res = array( 'status' => 0, 'msg' => '订单查询失败,请联系商家退款' ); return $res; } //预售出库记录 $add_log = $this->advance_stock_logs($advance_bill, $sell_order); break; default: $res = array( 'status' => 0, 'msg' => '请求有误' ); return $res; break; } if ($bill_order['platform_type'] == 2) { //第三方平台 if ($bill_online['order_genre'] == 2 || $bill_online['order_genre'] == 3 || ($bill_online['order_genre'] == 4 && (($advance_bill['advance_type'] == 2 && $advance_bill['state'] == 1) || $advance_bill['advance_type'] == 1))) { $ThirdOrderClass = new Order(); $thirdResult = $ThirdOrderClass->orderPayment([ 'merchant_id' => $bill_order['merchant_id'], 'third_order' => $bill_order['third_order'], 'pay_type' => $bill_order['pay_type'] ]); if ($thirdResult['status'] == 0) { $res = array( 'status' => 0, 'msg' => '第三方平台订单状态修改失败' . $thirdResult['message'] ); return $res; } } } if (!$add_log['id']) { $res = array( 'status' => 0, 'msg' => '活动库存出现异常,请联系商家进行退款' ); return $res; } // 更新sell表 if ($bill_online[$OnlineModel::ORDER_GENRE] == 4 && $advance_bill['advance_type'] == 2 && $advance_bill['state'] == 0) { //支付定金待支付状态 $save_order = $BillModel->updateOrder(array('id' => $bill_order['id']), array('pay_state' => 2)); } else { $sell_content = array('pay_state' => 1); //寄售供货商 if (!empty($add_log['stock_arr']) && $supplier_type == 2) { $parameter = array( 'supplier_json' => $add_log['info']['supplier_json'], 'purchase_id_str' => $add_log['info']['purchase_id_str'], 'store_id' => $bill_order['store_id'] ); D("SPurchasePayable")->addPayableMoney($parameter); $sell_content['supplier_json'] = json_encode($add_log['stock_arr']['supplier_json']); $sell_content['purchase_id_str'] = $add_log['stock_arr']['purchase_id_str']; } $save_sell = $SellModel->updateOrder(array($SellModel::ID => $sell_order[$SellModel::ID]), $sell_content); if (!$save_sell) { $res = array( 'status' => 0, 'msg' => '销售订单出现异常,请联系商家退款' ); return $res; } // 判断会员 $VipModel = D('RetailVip'); if ($bill_order[$BillModel::VID]) { // 查询会员 $vip_info = $VipModel->getFind(array($VipModel::ID => $bill_order[$BillModel::VID])); } // 判断积分 if (!empty($vip_info) && $bill_discount[$DiscountModel::GET_INTEGRAL] && $bill_discount[$DiscountModel::GET_INTEGRAL] > 0) { $balance_percent_state = true;//判断商户是否开启余额支付送积分 if ($bill_order['pay_type'] == 5) { $VipConfigModel = new RetailVipConfigModel(); $state = $VipConfigModel->getFindField(array('merchant_id' => $bill_order['merchant_id']), $vip_info['plus_type'] == 2 ? 'plus_pay_integral_state' : 'vip_pay_integral_state'); $balance_percent_state = $state == 1 ? true : false; if (!$balance_percent_state) { $GoodsModel = new RetailGoodsModel(); $goods = $GoodsModel->getFind(array('id' => $sell_order['goods_id']), 'integral_mem_status,integral'); if ($goods['integral_mem_status'] == 1 && $goods['integral'] * 1 > 0) { $SellModel->updateOrder(array('id' => $sell_order['id']), array('get_integral' => 0)); $DiscountModel->updateOrder(array('bill_id' => $bill_order['id']), array('get_integral' => 0)); } } } if ($balance_percent_state) { // 会员价积分并添加积分记录 $data = array( 'vip_id' => $vip_info[$VipModel::ID], 'store_id' => $bill_order[$BillModel::STORE_ID], 'bill_id' => $bill_order[$BillModel::ID], 'integral' => $bill_discount[$DiscountModel::GET_INTEGRAL], 'remark' => '购买商品送积分,共获得' . $bill_discount[$DiscountModel::GET_INTEGRAL] . '积分', ); // 增加积分并记录 $this->addIntegralOrderLog($data); } } // 更新bill_online表 if ($bill_online[$OnlineModel::PICKUP_TYPE] == 1) { // 判断配送方式 1.自提 2.配送 // 生成提货码 $up[$OnlineModel::PICK_CODE] = getPickCode(); if ($bill_online[$OnlineModel::ORDER_GENRE] == 3) { $StoreModel = D('RetailStore'); $store = $StoreModel->getFind(array($StoreModel::ID => $bill_order[$BillModel::STORE_ID])); $SmallProgramUserModel = D('RetailSmallProgramUser'); $openid = $SmallProgramUserModel->getFindField(array($SmallProgramUserModel::ID => $bill_order[$BillModel::UID]), $SmallProgramUserModel::OPENID); $tempSend = array( 'merchant_id' => $bill_order[$BillModel::MERCHANT_ID], 'openid' => $openid, 'form_id' => $bill_online[$OnlineModel::FORM_ID], 'type' => 1,//'1自提通知 2发货通知', 'sendData' => array( 'store_name' => $store[$StoreModel::STORE_NAME], 'order_no' => $bill_order[$BillModel::ORDER_NO], 'pick_code' => $up[$OnlineModel::PICK_CODE], 'price' => $bill_order[$BillModel::ALL_MONEY], 'add_time' => date('Y-m-d H:i:s', $bill_order[$BillModel::ADD_TIME]), 'goods_name' => $sell_order['goods_name'], 'pick_time' => date('Y-m-d H:i:s', $bill_online[$OnlineModel::USER_SELECT_TIME]), 'user_phone' => $bill_online[$OnlineModel::USER_PHONE], 'username' => $bill_online[$OnlineModel::USER_NAME], 'user_remark' => $bill_online[$OnlineModel::REMARK], 'store_address' => $store[$StoreModel::ADDRESS], 'store_phone' => $store[$StoreModel::PHONE], 'order_type' => '秒杀订单', 'page' => 'pages/order/myOrderDetail/myOrderDetail?order_no=' . $bill_order[$BillModel::ORDER_NO] ), ); A('Api/XcxMark')->sendMark($tempSend);//小程序模板通知 } } $up[$OnlineModel::STATUS] = 1; $save_online = $OnlineModel->updateOrder(array($OnlineModel::BILL_ID => $bill_order[$BillModel::ID]), $up); if (!$save_online) { $res = array( 'status' => 0, 'msg' => '订单更新出现异常,请联系商家退款' ); return $res; } // 更新bill_order表 $up2 = array( $BillModel::FINISH_TIME => time(), $BillModel::PAY_STATE => 1 ); $save_order = $BillModel->updateOrder(array($BillModel::ID => $bill_order[$BillModel::ID]), $up2); if (!$save_order) { $res = array( 'status' => 0, 'msg' => '支付失败,请联系商家退款' ); return $res; } // 判断会员 if (!empty($vip_info)) { $payInfo['ordernum'] = $bill_order[$BillModel::ORDER_NO]; $payInfo['integral'] = $bill_discount[$DiscountModel::GET_INTEGRAL] && $bill_discount[$DiscountModel::GET_INTEGRAL] > 0 ? $bill_discount[$DiscountModel::GET_INTEGRAL] : 0; switch ($bill_order[$BillModel::PAY_TYPE]) { case '1': $payType = '现金支付'; break; case '2': $payType = '银行卡支付'; break; case '3': $payType = '微信支付'; break; case '4': $payType = '支付宝支付'; break; case '5': $payType = '余额支付'; break; case '6': $payType = '小程序商城微信支付'; break; case '7': $payType = '其他支付方式'; break; case '8': $payType = '组合支付'; break; } A('Vip/Mark')->paysuccess($bill_order[$BillModel::STORE_ID], $vip_info[$VipModel::ID], $bill_order[$BillModel::ALL_MONEY], $payType, $payInfo); // 消费送次卡 A('PayApi/VipCard')->rechargeGiveCard($bill_order['merchant_id'], $vip_info['id'], $bill_order['all_money'], 3, $bill_order['type'] == 1 ? 2 : 1); } } switch ($bill_online[$OnlineModel::ORDER_GENRE]) { case 2: $sku_id = $bill_group[$BillGroupModel::SKU_ID] && $bill_group[$BillGroupModel::SKU_ID] != 0 ? $bill_group[$BillGroupModel::SKU_ID] : 0; $redis_key = 'retail_group_' . $bill_group[$BillGroupModel::GROUP_ID] . '_' . $sku_id . '_' . $bill_order[$BillModel::UID] . '_' . $bill_order[$BillModel::ID]; break; case 3: // 获取规格 $Spike = D('RetailSpike'); $sku_id = $Spike->getFindField(array($Spike::ID => $bill_spike[$BillSpikeModel::SPIKE_ID]), $Spike::SKU_ID); $sku_id = $sku_id && $sku_id != 0 ? $sku_id : 0; $redis_key = 'retail_spike_' . $bill_spike[$BillSpikeModel::SPIKE_ID] . '_' . $sku_id . '_' . $bill_order[$BillModel::UID] . '_' . $bill_order[$BillModel::ID]; break; case 4: //删除预售nosql中数据 $advance_bill['sku_id'] = $advance_bill['sku_id'] ? $advance_bill['sku_id'] : 0; $redis_key = 'retail_advance_goods_' . $advance_bill['advance_id'] . '_' . $advance_bill['goods_id'] . '_' . $advance_bill['sku_id'] . '_' . $advance_bill['uid'] . '_' . $advance_bill['bill_id']; break; } $BillModel->create_print_number($bill_order['id'], $bill_order['type'], $bill_order['store_id']); // 生成排序单号 //收银员推送 $CashierClass = new Cashier(); $CashierClass->pushCashier([ 'merchant_id' => $bill_order['merchant_id'], 'store_id' => $bill_order['store_id'], 'data' => [ 'order_number' => $bill_order['order_no'], 'flower_balance' => $bill_order['all_money'], 'add_time' => $bill_order['add_time'], 'pickup_type_name' => $bill_online['pickup_type'] == 1 ? '自提' : ($bill_online['pickup_type'] == 2 ? '配送' : '快递发货') ] ]); if (C('IS_SET_REDIS')) { // 移除redis数据库中记录 $ApiRedis = new \Addons\Api\RedisController(); $ApiRedis::$redis->delete($redis_key); } $res = array( 'status' => 1, 'msg' => '交易完成', ); return $res; } /** * 添加出售库存记录(拼团) * @param $group_id * @param $goods_id * @param $num * @param $sell_id * @return bool */ protected function groupQuantityLogs($group_id, $sku_id, $goods_id, $num, $sell_id) { $RGModel = D('RetailGroup'); $map = array( $RGModel::ID => $group_id ); // 根据活动id查询出现有库存(发生操作前) $now_group = $RGModel->getFind($map); if (empty($now_group)) { return false; } $less_group = $RGModel->toSetDec($map, $RGModel::ACT_NUM, $num); if (!$less_group) { return false; } // $less_num = $RGModel->getFindField($map, $RGModel::ACT_NUM); // if ($less_num < 0) { // return false; // } if ($sku_id && $sku_id != 0) { // 查询活动规格 $RSGModel = D('RetailSkuGroup'); $map2 = array( $RSGModel::ID => $sku_id ); $now_sku = $RSGModel->getFind($map2); if (!$now_sku) { return false; } $sku_id = $now_sku['sku_id']; $less_sku = $RSGModel->toSetDec($map2, $RSGModel::ACT_NUM, $num); if (!$less_sku) { return false; } } // 增加销售数量 $GoodsModel = D('RetailGoods'); $GoodsModel->toSetInc(array($GoodsModel::ID => $goods_id), $GoodsModel::SELL_NUM, $num); // 商品销售数量 $RGModel->toSetInc($map, $RGModel::SELL_NUMBER, $num); // 活动销售 // 添加出库记录 // 添加出库记录 $stock_data = [ 'goods_id' => $goods_id, 'sku_id' => $sku_id, 'stock_price' => $now_group[$RGModel::ACT_PRICE], 'stock_num' => $num, 'type' => 4, 'sell_id' => $sell_id ]; $success = A('Api/Inventory')->goodsNumReduce($stock_data); return $success; } /** * 添加出售库存记录(秒杀) * @param $spike_id * @param $merchant_id * @param $goods_id * @param $num * @param $sell_id * @return bool */ protected function spikeQuantityLogs($spike_id, $merchant_id, $goods_id, $num, $all_money, $sell_id) { $RSModel = D('RetailSpike'); $map = array( $RSModel::ID => $spike_id ); //根据活动id查询出现有库存(发生操作前) $now_spike = $RSModel->getFind($map); if (empty($now_spike)) { return false; } $less_group = $RSModel->toSetDec($map, $RSModel::STOCK, $num); if (!$less_group) { return false; } // $less_num = $RSModel->getFindField($map, $RSModel::STOCK); // if ($less_num < 0) { // return false; // } // 增加销售数量 $GoodsModel = D('RetailGoods'); $GoodsModel->toSetInc(array($GoodsModel::ID => $goods_id), $GoodsModel::SELL_NUM, $num); // 商品销售数量 $RSModel->toSetInc($map, $RSModel::SELL_NUMBER, $num); // 活动销售 // 添加出库记录 $stock_data = [ 'goods_id' => $goods_id, 'sku_id' => $now_spike[$RSModel::SKU_ID], 'stock_price' => $now_spike[$RSModel::SPIKE_PRICE], 'stock_num' => $num, 'type' => 5, 'sell_id' => $sell_id ]; $success = A('Api/Inventory')->goodsNumReduce($stock_data); return $success; } /** * 添加出售库存记录(预售) * @param $advance_bill * @param $sell_order * @return bool */ protected function advance_stock_logs($advance_bill, $sell_order) { $advance_id = $advance_bill['advance_id']; $goods_id = $sell_order['goods_id']; $sku_id = ''; $num = $advance_bill['buy_number']; $price = $sell_order['price']; $all_money = $sell_order['all_money']; if ($sell_order['attribute_state'] == 2) { $sku_id = $advance_bill['sku_id']; } if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); if ($sell_order['attribute_state'] == 2) { $redis_key = 'retail_advance_frozen_goods_' . $advance_id . '_goods_id_' . $goods_id . '_sku_id_' . $sku_id; } else { $redis_key = 'retail_advance_frozen_goods_' . $advance_id . '_goods_id_' . $goods_id; } } $redis_time = ($advance_bill['tail_end_time'] - time()) * 1; //redis 保存时间秒 $advance_model = D("AdvanceGoods"); $advance_sku_model = D("AdvanceSkuGoods"); $GoodsModel = D('RetailGoods'); $where = array( 'id' => $advance_id, 'goods_id' => $goods_id ); $advance_goods = $advance_model->getFind($where); if (empty($advance_goods)) { return false; } if ($advance_bill['advance_type'] == 2 && $advance_bill['state'] == 0) { //定金添加冻结库存 if (C('IS_SET_REDIS')) { $frozen_param = array( 'id' => $advance_id, 'goods_id' => $goods_id, 'sku_id' => $sku_id, 'attribute_state' => $sell_order['attribute_state'] ); $frozen_num = $advance_model->frozen_num($frozen_param); $frozen_num = round($frozen_num + $num, 3); $redis_save = array( 'advance_id' => $advance_id, 'num' => $frozen_num ); $ApiRedis::$redis->setex($redis_key, $redis_time, json_encode($redis_save)); } $success['id'] = true; } else { $advance_stock = $advance_model->toSetDec($where, "surplus_num", $num); //活动库存减少 if (!$advance_stock) { return false; } if ($advance_bill['advance_type'] == 2 && $advance_bill['state'] == 1) { //尾款支付 if (C('IS_SET_REDIS')) { $frozen_param = array( 'id' => $advance_id, 'goods_id' => $goods_id, 'sku_id' => $sku_id, 'attribute_state' => $sell_order['attribute_state'] ); $frozen_num = $advance_model->frozen_num($frozen_param); if ($frozen_num >= $num) { $frozen_num = round($frozen_num - $num, 3); $redis_save = array( 'advance_id' => $advance_id, 'num' => $frozen_num ); $ApiRedis::$redis->setex($redis_key, $redis_time, json_encode($redis_save)); } } } if (!empty($sku_id)) { //规格库存减少 $map = array( 'advance_id' => $advance_id, 'goods_id' => $goods_id, 'sku_id' => $sku_id ); $advance_sku_stock = $advance_sku_model->toSetDec($map, "surplus_num", $num); } // 增加销售数量 $GoodsModel->toSetInc(array($GoodsModel::ID => $goods_id), $GoodsModel::SELL_NUM, $num); // 商品销售数量 // 添加出库记录 $stock_data = [ 'goods_id' => $goods_id, 'sku_id' => $sku_id, 'stock_price' => $price, 'stock_num' => $num, 'type' => 11, 'all_money' => $all_money, 'sell_id' => $sell_order['id'] ]; $success = A('Api/Inventory')->goodsNumReduce($stock_data); } return $success; } /** * 增加积分并添加积分记录 * @param $item vip_id integral store_id bill_id remark * @return mixed */ protected function addIntegralOrderLog($item) { $VipModel = D('RetailVip'); $map = array( $VipModel::ID => $item['vip_id'] ); $inc = $VipModel->toSetInc($map, $VipModel::INTEGRAL, $item['integral']); if ($inc) { $addGradeIntegral = $VipModel->toSetInc($map, $VipModel::GRADE_INTEGRAL, $item['integral']); $IntegralOrderModel = D('RetailIntegralOrder'); $integralOrder = array( $IntegralOrderModel::VID => $item['vip_id'], $IntegralOrderModel::TYPE => 2, //'积分类型: 1签到获取 2消费获取 3使用积分 4后台充值 5后台扣除 6完善资料获取 7分享朋友赠送积分 8积分购买商品', $IntegralOrderModel::INTEGRAL => $item['integral'], $IntegralOrderModel::ADD_TIME => time(), $IntegralOrderModel::STORE_ID => $item['store_id'], $IntegralOrderModel::REMARK => $item['remark'], $IntegralOrderModel::BILL_ID => $item['bill_id'], ); $add = D('IntegralOrder')->addOrder($integralOrder); if ($add) { $res['status'] = 1; } else { $res['status'] = 0; $res['msg'] = '会员积分扣除成功,积分记录添加失败,请记住单号联系管理员修复。'; } if (!$addGradeIntegral) { $res['msg'] .= '会员等级积分记录添加失败。'; } } else { $res['status'] = 0; $res['msg'] = '会员积分添加失败'; } return $res; } /** * 拼团订单新大陆支付完成 * @param $pay_order * @return array */ public function groupOrderContinentPay($pay_order) { $RPOModel = D('RetailPayOrder'); $res = $this->paySuccess($pay_order[$RPOModel::BILL_ID]); if ($res['status'] == 1) { // 查询bill $RBOModel = D('RetailBillOrder'); $fields = array( 'b.' . $RBOModel::ORDER_NO, 'b.' . $RBOModel::STORE_ID, 'g.*' ); $map = array( $RBOModel::ID => $pay_order[$RPOModel::BILL_ID] ); $bill = $RBOModel->getFindGroup($map, $fields); if ($bill) { $res = A('PayApi/Group')->updateGroupState($bill['group_id'], $bill['parent_id'], $bill[$RBOModel::STORE_ID], $bill[$RBOModel::ORDER_NO]); } } return $res; } /** * 秒杀订单新大陆支付完成 * @param $pay_order * @return array */ public function spikeOrderContinentPay($pay_order) { $RPOModel = D('RetailPayOrder'); $res = $this->paySuccess($pay_order[$RPOModel::BILL_ID]); if ($res['status'] == 1) { $res = A('PayApi/Spike')->updateOrder($pay_order[$RPOModel::BILL_ID]); } return $res; } /** * 预售订单支付回调 * @param $pay_order * @return array */ public function advance_pay_notify($pay_order) { $res = $this->paySuccess($pay_order["bill_id"]); if ($res['status'] == 1) { $res = D("RetailBillAdvance")->update_bill_advance($pay_order); } return $res; } /** * 活动订单生成退款订单 * @param string $order_no * @return array $res */ public function doRefund_v1($order_no) { // 查询bill_order订单 $BillModel = D('RetailBillOrder'); $bMap = array( $BillModel::ORDER_NO => strval($order_no), $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 1, $BillModel::REFUND_STATUS => 0 ); $billOrder = $BillModel->getFind($bMap); // 判断bill_order订单 if (empty($billOrder)) { $result['status'] = 0; $result['msg'] = '请求有误,请刷新重试'; return $result; } // 查询bill_online订单,线上关联订单 $BillOnlineModel = D('RetailBillOnline'); $oMap = array( $BillOnlineModel::BILL_ID => $billOrder[$BillModel::ID] ); $billOnline = $BillOnlineModel->getFind($oMap); // 判断bill_online订单 if (empty($billOnline)) { $result['status'] = 0; $result['msg'] = '请求有误,请刷新重试'; return $result; } // 计算配送费 $delivery_fee = $billOnline[$BillOnlineModel::PICKUP_TYPE] == 2 && floatval($billOnline[$BillOnlineModel::DELIVERY_FEE]) > 0 ? floatval($billOnline[$BillOnlineModel::DELIVERY_FEE]) : 0; $BillDisModel = D('RetailBillDiscount'); // 判断线上订单关联的活动 $RBGModel = D('RetailBillGroup'); $RBSModel = D('RetailBillSpike'); if ($billOnline[$BillOnlineModel::ORDER_GENRE] == 2) { // 拼团订单 // 查询拼团关联 $act_bill = $RBGModel->getFind(array($RBGModel::BILL_ID => $billOrder[$BillModel::ID])); } else if ($billOnline[$BillOnlineModel::ORDER_GENRE] == 3) { // 秒杀订单 // 查询秒杀关联 $act_bill = $RBSModel->getFind(array($RBSModel::BILL_ID => $billOrder[$BillModel::ID])); } else { $result['status'] = 1; $result['msg'] = '未知的退款类型'; return $result; } // 判断活动 if (!$act_bill) { $res = array('status' => 0, 'msg' => '活动订单查询失败'); return $res; } // 判断是否发货 if ($billOnline[$BillOnlineModel::STATUS] != 1) { $result['status'] = 0; $result['msg'] = '该订单已发货,不能退款'; return $result; } // 查询sell订单(销售订单) $SellModel = D('RetailSell'); $refund_list = $SellModel->getSelect(array($SellModel::BILL_ID => $billOrder[$BillModel::ID])); $new_discount = $BillDisModel->getFind(array($BillDisModel::BILL_ID => $billOrder[$BillModel::ID])); // 退款总金额 $allMoney = round($billOrder[$BillModel::ALL_MONEY] - $delivery_fee, 2); $time = time(); $newBill = array( $BillModel::ALL_MONEY => $allMoney, $BillModel::PAY_STATE => 1, $BillModel::REFUND_STATUS => 5, $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 2, $BillModel::ADD_TIME => $time, $BillModel::REFUND_NO => $billOrder[$BillModel::ORDER_NO], $BillModel::REFUND_MONEY => $allMoney, $BillModel::UID => $billOrder[$BillModel::UID], $BillModel::VID => $billOrder[$BillModel::VID], $BillModel::STORE_ID => $billOrder[$BillModel::STORE_ID], $BillModel::MERCHANT_ID => $billOrder[$BillModel::MERCHANT_ID], ); $newBill = $BillModel->addBillOrder($newBill); if ($newBill) { if ($billOnline[$BillOnlineModel::ORDER_GENRE] == 2) { // 拼团订单 $act_bill[$RBGModel::BILL_ID] = $newBill[$BillModel::ID]; $new_act = $RBGModel->addOrder($act_bill); } else if ($billOnline[$BillOnlineModel::ORDER_GENRE] == 3) { $act_bill[$RBSModel::BILL_ID] = $newBill[$BillModel::ID]; $new_act = $RBSModel->addOrder($act_bill); } $new_discount[$BillDisModel::BILL_ID] = $newBill[$BillModel::ID]; $add_dis = $BillDisModel->addOrder($new_discount); $old_online = $BillOnlineModel->getFind(array($BillOnlineModel::BILL_ID => $billOrder[$BillModel::ID])); $old_online[$BillOnlineModel::CANCEL_TIME]++; $old_online[$BillOnlineModel::BILL_ID] = $newBill[$BillModel::ID]; // $old_online[$BillOnlineModel::DELIVERY_FEE] = 0; //先默认为不退换配送费 $add_online = $BillOnlineModel->addOrder($old_online); $online_save[$BillOnlineModel::CANCEL_TIME] = $old_online[$BillOnlineModel::CANCEL_TIME]; if ($new_act && $add_dis && $add_online) { //可进行退换货操作 $success_array = array(); foreach ($refund_list as &$val) { $newSell = $val; unset($newSell[$SellModel::ID]); $newSell[$SellModel::SELL_TYPE] = 2; //退款 $newSell[$SellModel::PAY_STATE] = 0; //未成功退款 $newSell[$SellModel::BILL_ID] = $newBill[$BillModel::ID]; $add_sell = $SellModel->addOrder($newSell); if ($add_sell) { $newSell[$SellModel::ID] = $add_sell; $success_array[] = $newSell; $SellModel->toSetInc(array($SellModel::ID => $val[$SellModel::ID]), $SellModel::WAIT_REFUND_NUM, $val[$SellModel::NUM]); } } if (count($success_array) == count($refund_list)) { $result['status'] = 1; $result['msg'] = '退款申请发起成功'; // 修改原订单状态 $BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 1)); $BillOnlineModel->updateOrder($oMap, $online_save); // 减少销售数量增加活动库存 if ($billOnline[$BillOnlineModel::ORDER_GENRE] == 2) { // 拼团订单 D('RetailGroup')->toSetDec(array('id' => $act_bill[$RBGModel::GROUP_ID]), 'sell_number', $act_bill[$RBGModel::BUY_NUMBER]); D('RetailGroup')->toSetInc(array('id' => $act_bill[$RBGModel::GROUP_ID]), 'actnum', $act_bill[$RBGModel::BUY_NUMBER]); } else if ($billOnline[$BillOnlineModel::ORDER_GENRE] == 3) { // 秒杀订单 D('RetailSpike')->toSetDec(array('id' => $act_bill[$RBSModel::SPIKE_ID]), 'sell_number', $act_bill[$RBSModel::BUY_NUMBER]); D('RetailSpike')->toSetInc(array('id' => $act_bill[$RBSModel::SPIKE_ID]), 'active_limit_num', $act_bill[$RBSModel::BUY_NUMBER]); } } else { $BillModel->deleteOrder(array($BillModel::ID => $newBill[$BillModel::ID])); $SellModel->deleteOrder(array($SellModel::BILL_ID => $newBill[$BillModel::ID])); foreach ($success_array as $value) { $SellModel->toSetDec(array($SellModel::ID => $value[$SellModel::BILL_ID]), $SellModel::WAIT_REFUND_NUM, $value[$SellModel::NUM]); } $result['status'] = 0; $result['msg'] = '数据操作有误2'; } } else { $BillModel->deleteOrder(array($BillModel::ID => $newBill[$BillModel::ID])); $result['status'] = 0; $result['msg'] = '退款请求失败,请稍后重试'; } } else { $result['status'] = 0; $result['msg'] = '退款请求失败,请稍后重试1'; } return $result; } }