'coupon', 'title' => '代金券' ], [ 'name' => 'hongbao', 'title' => '红包' ], [ 'name' => 'point', 'title' => '积分' ], [ 'name' => 'balance', 'title' => '储值余额' ], [ 'name' => 'balance_money', 'title' => '现金余额' ], ); /** * 增加订单优惠项 * @param $params * @return array */ public function addOrderOffset($params){ $order_id = $params['order_id']; $type = $params['type']; $num = $params['num']; $relate_id = $params['relate_id'] ?? 0; $offset_money = $params['offset_money']; $order_goods_id = $params['order_goods_id'] ?? ''; $site_id = $params['site_id']; $store_id = $params['store_id'] ?? 0; $data = array( 'order_id' => $order_id, 'type' => $type, 'num' => $num, 'relate_id' => $relate_id, 'offset_money' => $offset_money, 'order_goods_id' => $order_goods_id, 'site_id' => $site_id, 'store_id' => $store_id ); model('store_cashier_order_offset')->add($data); return $this->success(); } /** * 获取优惠券记录 * @param $condition * @param string $field */ public function getOrderOffsetList($condition, $field = '*', $order = ''){ $list = model('store_cashier_order_offset')->getList($condition, $field, $order); return $this->success($list); } /** * 计算订单项的店铺优惠金额 * @param $order_goods_id */ public function getOrderGoodsOffsetMoney($order_goods_id){ $condition = array( ['order_goods_id', '=', $order_goods_id], ['type', '=', 'coupon'], ); $offset_list = $this->getOrderOffsetList($condition)['data'] ?? []; $offset_money = 0; if(!empty($offset_list)){ foreach($offset_list as $k => $v){ $offset_money += $v['offset_money']; } } return $offset_money; } /** * 返还订单相关优惠和抵扣 * @param $params */ public function orderOffsetRefund($params){ $order_id = $params['order_id']; $site_id = $params['site_id']; $member_id = $params['member_id']; $limit = $params['limit'] ?? []; $offset_condition = array( ['order_id', '=', $order_id] ); $offset_list = $this->getOrderOffsetList($offset_condition)['data'] ?? []; foreach($offset_list as $k => $v){ $type = $v['type']; if(!empty($limit) && !in_array($type, $limit)){ continue; } $num = $v['num']; $relate_id = $v['relate_id']; switch($type){ case 'balance'://储值余额 $from_type = 'refund'; $relate_tag = '储值余额返还'; $remark = '订单关闭,返还储值余额:' . $num.',订单id:'.$order_id; $member_account_model = new MemberAccount(); $account_title = '订单关闭,返还储值余额'; $result = $member_account_model->addMemberAccount($site_id, $member_id, 'balance', $num, $from_type, $relate_tag, $remark, $account_title); break; case 'balance_money'://现金余额 $from_type = 'refund'; $relate_tag = '现金余额返还'; $remark = '订单关闭,返还现金余额:' . $num.',订单id:'.$order_id; $account_title = '订单关闭,返还现金余额'; $member_account_model = new MemberAccount(); $result = $member_account_model->addMemberAccount($site_id, $member_id, 'balance_money', $num, $from_type, $relate_tag, $remark, $account_title); break; case 'coupon'://优惠券 $member_coupon_model = new MemberCoupon(); $coupon_params = array( 'coupon_id' => $relate_id, 'site_id' => $site_id, 'member_id' => $member_id ); $result = $member_coupon_model->recovery($coupon_params); break; case 'point'://积分 $from_type = 'refund'; $relate_tag = '积分返还'; $remark = '订单关闭,返还积分:' . $num . ',订单id:'.$order_id; $account_title = '订单关闭,返还积分'; $member_account_model = new MemberAccount(); $result = $member_account_model->addMemberAccount($site_id, $member_id, 'point', $num, $from_type, $relate_tag, $remark,$account_title); break; case 'hongbao'://红包 $hongbao_model = new Hongbao(); $hongbao_params = array( 'member_hongbao_id' => $relate_id, 'site_id' => $site_id, 'member_id' => $member_id ); $result = $hongbao_model->recovery($hongbao_params); break; } $code = $result['code'] ?? 0; if($code < 0){ return $result; } } return $this->success(); } /** * 查询订单抵扣信息 * @param $params */ public function getOrderOffset($params){ $order_id = $params['order_id']; $offset_condition = array( ['order_id', '=', $order_id] ); $offset_list = $this->getOrderOffsetList($offset_condition)['data'] ?? []; $balance = 0; $balance_money = 0; $point_money = 0; $point = 0; foreach($offset_list as $k => $v){ $type = $v['type']; $num = $v['num'];//优惠项数量 $offset_money = $v['offset_money'];//优惠金额 switch($type){ case 'balance'://储值余额 $balance += $num; break; case 'balance_money'://现金余额 $balance_money += $num; break; // case 'coupon'://优惠券 // // break; case 'point'://积分 $point_money += $offset_money; $point += $num; break; // case 'hongbao'://红包 // // break; } } $return = array( 'point' => $point, 'point_money' => $point_money, 'balance' => $balance, 'balance_money' => $balance_money ); return $return; } /** * 抵扣信息 * @param $condition * @param string $field * @return array */ public function getOrderOffsetInfo($condition, $field = '*'){ $info = model('store_cashier_order_offset')->getInfo($condition, $field); return $this->error($info); } }