You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
ymww_backend/application/admin/controller/Order.php

299 lines
12 KiB

<?php
namespace app\admin\controller;
use app\common\controller\Backend;
use app\admin\model\order\Detail;
use think\Db;
use think\Config;
use app\common\service\UserService;
use app\admin\model\Goods;
use app\admin\model\Order as OrderModel;
/**
*
*
* @icon fa fa-circle-o
*/
class Order extends Backend
{
/**
* Order模型对象
* @var \app\admin\model\Order
*/
protected $model = null;
protected $relationSearch = true;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\Order;
$this->assignconfig('statusList', $this->model->getStatusList());
$this->view->assign("statusList", $this->model->getStatusList());
$this->view->assign("logisticsCompanyList", $this->model->getLogisticsCompanyList());
$this->view->assign("orderTypeList", ['买单',"卖单"]);
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
public function index(){
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams($this->searchFields, $this->relationSearch);
$list = $this->model
->with(['user','warehouse','detail'])
->where($where)
->order($sort, $order)
->paginate($limit);
$site = Config::get("site");
foreach ($list as $k => &$v) {
$v['detail']['goods_image'] = cdnurl($v['detail']['goods_image'], true);
$v['createtime_text'] = date("Y-m-d H:i:s", $v['createtime']);
$v['status_text'] = $this->model->getStatusList()[$v['status']] ?? "";
// $user = Db::name('user')->where('id', $v['buyer_id'])->field('pid')->find();
// $piduser = Db::name('user')->where('id', $user['pid'] ?? 0)->field('id,nickname')->find();
// $commission = bcmul($v['order_amount'], $site['primary_distribution'] * 0.01, 2);
// $v['tuiguang'] = $piduser ? $piduser['nickname']."(".$commission.")" : "";
}
// $single = Db::name('order')->alias('order')
// ->join('warehouse warehouse', 'order.warehouse_id = warehouse.id','left')
// ->join('user user', 'user.id = order.user_id', 'left')
// // ->join('user user1', 'user1.id = order.seller_id', 'left')
// ->join('order_detail detail', 'detail.order_id = order.id', 'left')
// ->field("count(order.id) as order_count,sum(order.order_amount) as order_amount,sum(order.coupon_price) as coupon_price,sum(detail.dikou_price) as dikou_price,count(distinct order.buyer_id) as user_count")
// ->where($where)
// ->find();
// var_dump($single);
// exit;
// $order_amount = $single['order_amount'] ?? 0;
// $coupon_price = $single['coupon_price'] ?? 0;
// $order_count = $single['order_count'] ?? 0;
// $user_count = $single['user_count'] ?? 0;
// $dikou_price = $single['dikou_price'] ?? 0;
// $info = Db::name('order')->alias('order')
// ->field("count(order.id) as order_count,createtime,buyer_id")
// // ->where("order_count",1)
// //->whereTime('createtime', 'today')
// ->group("buyer_id")
// ->order('createtime desc')
// ->select();
// var_dump($info);
// exit();
$new_user_count = $single['new_user_count'] ?? 0;
$result = array(
"total" => $list->total(),
"rows" => $list->items(),
// "extend" => [
// 'order_amount' => bcdiv($order_amount, 1, 2),
// 'coupon_price' => bcdiv($coupon_price, 1, 2),
// 'dikou_price' => bcdiv($dikou_price, 1, 2),
// 'order_count' => $order_count,
// 'user_count' => $user_count,
// 'new_user_count' => $new_user_count,
// ]
);
return json($result);
}
return $this->view->fetch();
}
public function add()
{
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
$order_sn = "ZH".date("YmdHis").rand(1000,9999);
//创建订单
$orderData = [
"order_type" => 1,
"add_type" => 1,
"user_id" => $params['user_id'],
"sell_order_id" => 0,
"buyer_id" => 0,
"seller_id" => $params['user_id'],
"order_sn" => $order_sn,
"warehouse_id" => $params['warehouse_id'],
"order_amount" => $params['pay_amount'],
"pay_amount" => $params['pay_amount'],
"actual_amount" => $params['pay_amount'],
"coupon_price" => 0,
"coupon_id" => 0,
"status" => $params['status'],
];
$order = OrderModel::create($orderData);
if ($order === false) {
$this->error("下单失败");
}
$goods = Goods::where('id', $params['goods_id'])->find();
$orderDetail = [
"order_id" => $order->id,
"buyer_id" => 0,
"seller_id" => $params['user_id'],
"goods_id" => $params['goods_id'],
"goods_name" => $goods['name'],
"goods_image" => $goods['image'],
"goods_price" => $params['pay_amount'],
"num" => 1,
];
$ret = Detail::create($orderDetail);
if ($ret === false) {
$this->error("下单失败");
}
Goods::where('id', $params['goods_id'])->update(['owner_id' => $params['user_id'],'status'=>'normal','price' => $params['pay_amount']]);
$this->success();
}
$this->error(__('Parameter %s can not be empty', ''));
}
return $this->view->fetch();
}
/**
* 编辑
* @internal
*/
public function send($ids = NULL,$type = null)
{
$row = $this->model->get($ids);
// var_dump($row);
// exit;
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost()){
$params = $this->request->post("row/a");
$params['send_time'] = time();
$params['status'] = 5;
$ret = $this->model->update($params, ['id'=>$ids]);
if(!$ret){
$this->error(__('Operation failed'));
}
return $this->success();
}
$arr = $row->toArray();
$this->view->assign("row", $arr);
$this->view->assign("type", $type);
return $this->view->fetch();
}
public function cancel($ids = NULL){
$row = $this->model->get($ids);
// var_dump($row);
// exit;
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost()){
$params = $this->request->post("row/a");
$info = OrderModel::where('id', $ids)->update(['status' => -1,'cancel_time' => time()]);
if ($info === false) {
$this->error("取消失败");
}
$detail = Detail::where("order_id", $ids)->find();
if (!$detail)
$this->error(__('No Results were found'));
//上架商品
Goods::where('id', $detail['goods_id'])->update(['status' => 'normal', "updatetime" => time()]);
//分佣给买家上级
$site = Config::get("site");
$commission = bcmul($row->order_amount, $site['primary_distribution'] * 0.01, 2);
$user = Db::name('user')->where('id', $row->buyer_id)->find();
$obj = new UserService();
$ret = $obj->userCommission(1, $user, $row->order_sn, -$commission);
if(!$ret){
$this->error(__('Operation failed'));
}
return $this->success();
}
}
public function split($ids = NULL){
$row = $this->model->get($ids);
$detail = Detail::where("order_id", $row->id)->find();
// var_dump($row);
// exit;
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost()){
$params = $this->request->post("row/a");
$datajson = json_decode($params['datajson'], true);
foreach ($datajson as $value) {
$order_sn = "ZH".date("YmdHis").rand(1000,9999);
//创建订单
$orderData = [
"order_type" => 1,
"user_id" => $params['user_id'],
"sell_order_id" => 0,
"buyer_id" => 0,
"seller_id" => $params['user_id'],
"order_sn" => $order_sn,
"warehouse_id" => $row->warehouse_id,
"order_amount" => $value['price'],
"pay_amount" => $value['price'],
"coupon_price" => 0,
"coupon_id" => 0,
"status" => 3,
];
$order = OrderModel::create($orderData);
if ($order === false) {
$this->error("下单失败");
}
$goods = Goods::where('id', $value['goods_id'])->find();
$orderDetail = [
"order_id" => $order->id,
"buyer_id" => 0,
"seller_id" => $params['user_id'],
"goods_id" => $value['goods_id'],
"goods_name" => $goods['name'],
"goods_image" => $goods['image'],
"goods_price" => $value['price'],
"num" => 1,
];
$ret = Detail::create($orderDetail);
if ($ret === false) {
$this->error("下单失败");
}
Goods::where('id', $value['goods_id'])->update(['owner_id' => $params['user_id'],'status'=>'normal','price' => $value['price']]);
}
//当前商品置为闲置商品
Goods::where('id', $params['goods_id'])->update(['owner_id' => 0,'status'=>'hidden','price' => 0]);
$ret = $this->model->update(['status' => 6, "updatetime" => time()], ['id'=>$ids]);
if ($ret === false) {
$this->error("下单失败");
}
return $this->success();
}
$arr = $row->toArray();
$arr['goods_id'] = $detail['goods_id'];
// echo "<pre>";
// print_r($arr);
// exit();
$this->view->assign("row", $arr);
return $this->view->fetch();
}
}