select($field) ->orderby('id', 'desc'); if(! empty($data['order_time'])){ list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false); if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"]; $model->where('order_time', '>=', $start_time) ->where('order_time', '<', $end_time); } if(! empty($data['order_type'])) $model->where('order_type',$data['order_type']); return [true, $model]; } public function statisticsRevenueCost($data,$user){ list($status, $model) = $this->statisticsRevenueCostCommon($data, $user); if(! $status) return [false, $model]; $list = $this->limit($model,'',$data); $list = $this->statisticsRevenueCostFillData($list); return [true, $list]; } public function statisticsRevenueCostFillData($data){ if(empty($data['data'])) return $data; foreach ($data['data'] as $key => $value){ $time = date("Y-m", $value['order_time']); $data['data'][$key]['order_time'] = $time; $data['data'][$key]['order_type_title'] = RevenueCost::$order_type[$value['order_type']] ?? ""; $data['data'][$key]['profit_rate'] = bcmul($value['profit_rate'], 100,2); } return $data; } //无用 public function statisticsRevenueCostFillData1($data){ if(empty($data)) return $data; $return = []; foreach ($data as $key => $value){ $time = date("Y-m", $value['order_time']); if($value['order_type'] == RevenueCost::ORDER_ONE){ $income = $value['price_3_total']; }elseif ($value['order_type'] == RevenueCost::ORDER_TWO){ $income = $value['price_1_total']; }else{ $income = $value['payment_amount']; } $adjust = $income < 0 ? $income : 0; $business = $value['price_4_total']; if(isset($return[$time][$value['order_type']])){ $income_total = bcadd($return[$time][$value['order_type']]['income'], $income,2); $adjust_total = bcadd($return[$time][$value['order_type']]['adjust'], $adjust,2); $business_total = bcadd($return[$time][$value['order_type']]['business'], $business,2); $return[$time][$value['order_type']]['income'] = $income_total; $return[$time][$value['order_type']]['adjust'] = $adjust_total; $return[$time][$value['order_type']]['business'] = $business_total; }else{ $return[$time][$value['order_type']] = [ 'income' => $income, 'adjust' => $adjust, 'business' => $business, 'time' => $time, ]; } } $final = []; foreach ($return as $value){ foreach ($value as $key => $val){ $title = RevenueCost::$order_type[$key] ?? ""; $val['title'] = $title; $profit = bcsub($val['income'], $val['business'],2); $profit_rate = $val['income'] > 0 ? bcdiv($profit, $val['income'],2) : 0; $profit_rate = bcmul($profit_rate, 100,2); $val['profit'] = $profit; $val['profit_rate'] = $profit_rate; $val['order_type'] = $key; $final[] = $val; } } return $final; } public function statisticsRevenueCostOneAndTwoCommon($data,$user, $field = []){ if(empty($data['order_type']) || ! isset(RevenueCost::$order_type[$data['order_type']])) return [false, '单据类型不存在或错误']; if(empty($field)) { if($data['order_type'] == 1){ $field = RevenueCost::$field_xhd; }else{ $field = RevenueCost::$field_xsfp; } } $model = RevenueCost::where('del_time',0) ->where('order_type',$data['order_type']) ->select($field) ->orderby('id', 'desc'); if(! empty($data['order_time'])){ list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false); if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"]; $model->where('order_time', '>=', $start_time) ->where('order_time', '<=', $end_time); } if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%'); if(! empty($data['customer_title'])) $model->where('customer_title', 'LIKE', '%'.$data['customer_title'].'%'); if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%'); return [true, $model]; } public function statisticsRevenueCostOneAndTwo($data,$user){ list($status, $model) = $this->statisticsRevenueCostOneAndTwoCommon($data, $user); if(! $status) return [false, $model]; $list = $this->limit($model,'',$data); $list = $this->statisticsRevenueCostOneAndTwoFillData($list); return [true, $list]; } public function statisticsRevenueCostOneAndTwoFillData($data){ if(empty($data['data'])) return $data; foreach ($data['data'] as $key => $value){ $data['data'][$key]['profit_rate'] = bcmul($value['profit_rate'], 100,2); $data['data'][$key]['order_time'] = $value['order_time'] ? date("Y-m-d", $value['order_time']) : ""; } return $data; } public function statisticsRevenueCostThreeCommon($data,$user, $field = []){ if(empty($field)) { $field = RevenueCost::$field_hkd_main; $field[] = DB::raw('sum(payment_amount) as payment_amount'); $field[] = DB::raw('sum(price_4_total) as price_4_total'); $field[] = DB::raw('sum(profit) as profit'); } $model = RevenueCost::where('del_time',0) ->where('order_type',RevenueCost::ORDER_THREE) ->select($field) ->groupby('order_id') ->orderby('id', 'desc'); if(! empty($data['order_time'])){ list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false); if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"]; $model->where('order_time', '>=', $start_time) ->where('order_time', '<=', $end_time); } if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%'); if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%'); return [true, $model]; } public function statisticsRevenueCostThree($data,$user){ list($status, $model) = $this->statisticsRevenueCostThreeCommon($data, $user); if(! $status) return [false, $model]; $list = $this->limit($model,'',$data); $list = $this->statisticsRevenueCostThreeFillData($list); return [true, $list]; } public function statisticsRevenueCostThreeFillData($data){ if(empty($data['data'])) return $data; foreach ($data['data'] as $key => $value){ $profit_rate = $value['payment_amount'] > 0 ? bcdiv($value['profit'], $value['payment_amount'],2) : 0; $data['data'][$key]['profit_rate'] = bcmul($profit_rate, 100,2); $data['data'][$key]['order_time'] = $value['order_time'] ? date("Y-m-d", $value['order_time']) : ""; } return $data; } public function statisticsRevenueCostThreeDetail($data,$user){ if(empty($data['order_number'])) return [false, '回款单号不能为空']; $result = RevenueCost::where('del_time',0) ->where('order_type',RevenueCost::ORDER_THREE) ->where('order_number',$data['order_number']) ->select(RevenueCost::$field_hkd_detail) ->get()->toArray(); if(empty($result)) return [false, "回款单不存在或已被删除"]; $detail = []; foreach ($result as $value){ $detail[] = [ 'order_number' => $value['order_number_upstream'], 'customer_code' => $value['customer_code'], 'customer_title' => $value['customer_title'], 'product_code' => $value['product_code'], 'product_title' => $value['product_title'], 'product_size' => $value['product_size'], 'unit' => $value['unit'], 'quantity' => $value['quantity'], 'payment_amount' => $value['payment_amount'], 'price_1' => $value['price_1'], 'price_1_total' => $value['price_1_total'], 'price_4' => $value['price_4'], 'price_4_total' => $value['price_4_total'], 'profit' => $value['profit'], 'profit_rate' => bcmul($value['profit_rate'],100,2), ]; } $first = $result[0]; $order = [ 'order_number' => $data['order_number'], 'order_time' => date("Y-m-d",$first['order_time']), 'employee_id_1_title' => $first['employee_id_1_title'], 'detail' => $detail ]; return [true, $order]; } }