diff --git a/app/admin/controller/system_store_storage/SystemStoreStorageController.php b/app/admin/controller/system_store_storage/SystemStoreStorageController.php index 146f97de0..fe21f824f 100644 --- a/app/admin/controller/system_store_storage/SystemStoreStorageController.php +++ b/app/admin/controller/system_store_storage/SystemStoreStorageController.php @@ -56,6 +56,7 @@ class SystemStoreStorageController extends BaseAdminController public function edit() { $params = (new SystemStoreStorageValidate())->post()->goCheck('edit'); + $params['admin_id']=$this->adminId; $result = SystemStoreStorageLogic::edit($params); if (true === $result) { return $this->success('编辑成功', [], 1, 1); diff --git a/app/admin/lists/store_finance_flow/StoreFinanceFlowLists.php b/app/admin/lists/store_finance_flow/StoreFinanceFlowLists.php index c4e39bbd3..c3ef16898 100644 --- a/app/admin/lists/store_finance_flow/StoreFinanceFlowLists.php +++ b/app/admin/lists/store_finance_flow/StoreFinanceFlowLists.php @@ -49,33 +49,6 @@ class StoreFinanceFlowLists extends BaseAdminDataLists implements ListsSearchInt public function lists(): array { return StoreFinanceFlow::where($this->searchWhere) - ->when(!empty($this->request->adminInfo['store_id']), function ($query) { - $query->where('store_id', $this->request->adminInfo['store_id']); - }) - ->when(!empty($this->params['keyword']), function (Query $query) { - $userIds = User::where('nickname', 'like', "%{$this->params['keyword']}%")->column('id'); - $query->where(function ($query) use($userIds) { - $query->where('user_id', 'in', $userIds)->whereOr('financial_record_sn', 'like', "%{$this->params['keyword']}%"); - }); - }) - ->when(!empty($this->params['date_type']) && !empty($this->params['date']), function (Query $query) { - switch ($this->params['date_type']) { - case 2: - $start = new \DateTime($this->params['date']); - $start = $start->getTimestamp(); - $end = $start + (86400 * 7); - break; - case 3: - $start = strtotime($this->params['date']); - $end = strtotime('+1 month', strtotime($this->params['date'])); - break; - default: - $start = strtotime($this->params['date']); - $end = strtotime($this->params['date']) + 86400; - break; - } - $query->whereBetweenTime('create_time', $start, $end); - }) ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) ->select()->each(function ($item) { @@ -110,44 +83,7 @@ class StoreFinanceFlowLists extends BaseAdminDataLists implements ListsSearchInt */ public function count(): int { - return StoreFinanceFlow::where($this->searchWhere) - ->when(!empty($this->params['start_time']), function ($query) { - $query->whereTime('create_time', '>=', $this->params['start_time']); - }) - ->when(!empty($this->params['end_time']), function ($query) { - if ($this->params['end_time'] == $this->params['start_time']) { - $this->params['end_time'] = strtotime($this->params['end_time']) + 86399; - } - $query->whereTime('create_time', '<=', $this->params['end_time']); - }) - ->when(!empty($this->request->adminInfo['store_id']), function ($query) { - $query->where('store_id', $this->request->adminInfo['store_id']); - }) - ->when(!empty($this->params['keyword']), function (Query $query) { - $userIds = User::where('nickname', 'like', "%{$this->params['keyword']}%")->column('id'); - $query->where(function ($query) use($userIds) { - $query->where('user_id', 'in', $userIds)->whereOr('financial_record_sn', 'like', "%{$this->params['keyword']}%"); - }); - }) - ->when(!empty($this->params['date_type']) && !empty($this->params['date']), function (Query $query) { - switch ($this->params['date_type']) { - case 2: - $start = new \DateTime($this->params['date']); - $start = $start->getTimestamp(); - $end = $start + (86400 * 7); - break; - case 3: - $start = strtotime($this->params['date']); - $end = strtotime('+1 month', strtotime($this->params['date'])); - break; - default: - $start = strtotime($this->params['date']); - $end = strtotime($this->params['date']) + 86400; - break; - } - $query->whereBetweenTime('create_time', $start, $end); - }) - ->count(); + return StoreFinanceFlow::where($this->searchWhere)->count(); } } diff --git a/app/admin/logic/system_store_storage/SystemStoreStorageLogic.php b/app/admin/logic/system_store_storage/SystemStoreStorageLogic.php index c59a2b52d..f9f75441f 100644 --- a/app/admin/logic/system_store_storage/SystemStoreStorageLogic.php +++ b/app/admin/logic/system_store_storage/SystemStoreStorageLogic.php @@ -7,6 +7,7 @@ use app\common\model\store_branch_product\StoreBranchProduct; use app\common\model\store_branch_product_attr_value\StoreBranchProductAttrValue; use app\common\model\system_store_storage\SystemStoreStorage; use app\common\logic\BaseLogic; +use app\common\model\store_product\StoreProduct; use think\facade\Db; @@ -58,17 +59,20 @@ class SystemStoreStorageLogic extends BaseLogic */ public static function edit(array $params): bool { + $stock=StoreProduct::where('id', $params['product_id'])->value('stock'); + $nums=SystemStoreStorage::where('id', $params['id'])->value('nums'); + $stock=bcadd($stock,$nums); + if($stock<$params['nums']){ + self::setError('库存不足,主库为:'.$stock); + return false; + } Db::startTrans(); try { SystemStoreStorage::where('id', $params['id'])->update([ - 'store_id' => $params['store_id'], - 'admin_id' => $params['admin_id'], - 'staff_id' => $params['staff_id'], - 'product_id' => $params['product_id'], 'nums' => $params['nums'], - 'status' => $params['status'] + 'admin_id' => $params['admin_id'], ]); - + StoreProduct::where('id', $params['product_id'])->update(['stock'=>bcsub($stock,$params['nums'])]); Db::commit(); return true; } catch (\Exception $e) { diff --git a/app/admin/validate/system_store_storage/SystemStoreStorageValidate.php b/app/admin/validate/system_store_storage/SystemStoreStorageValidate.php index b7959cfae..5391edcea 100644 --- a/app/admin/validate/system_store_storage/SystemStoreStorageValidate.php +++ b/app/admin/validate/system_store_storage/SystemStoreStorageValidate.php @@ -20,6 +20,8 @@ class SystemStoreStorageValidate extends BaseValidate */ protected $rule = [ 'id' => 'require', + 'product_id' => 'require', + 'nums' => 'require', ]; @@ -29,6 +31,8 @@ class SystemStoreStorageValidate extends BaseValidate */ protected $field = [ 'id' => 'id', + 'product_id' => '商品id', + 'nums' => '入库数量', ]; @@ -52,7 +56,7 @@ class SystemStoreStorageValidate extends BaseValidate */ public function sceneEdit() { - return $this->only(['id']); + return $this->only(['id','product_id','nums']); } diff --git a/app/api/controller/order/OrderController.php b/app/api/controller/order/OrderController.php index 431c3568f..66e1f40d2 100644 --- a/app/api/controller/order/OrderController.php +++ b/app/api/controller/order/OrderController.php @@ -7,8 +7,10 @@ use app\api\controller\BaseApiController; use app\api\lists\order\OrderList; use app\api\validate\OrderValidate; use app\common\enum\PayEnum; +use app\common\enum\YesNoEnum; use app\common\logic\PaymentLogic; use app\common\logic\PayNotifyLogic; +use app\common\model\dict\DictData; use app\common\model\store_order\StoreOrder; use app\common\model\system_store\SystemStoreStaff; use app\common\model\user\UserAddress; @@ -18,6 +20,7 @@ use hg\apidoc\annotation as ApiDoc; #[ApiDoc\title('订单')] class OrderController extends BaseApiController { + public $notNeedLogin = ['refund_reason']; /** * 订单列表 @@ -350,6 +353,15 @@ class OrderController extends BaseApiController return $this->fail('支付失败'); } + + #[ + ApiDoc\Title('订单详情'), + ApiDoc\url('/api/order/order/detail'), + ApiDoc\Method('GET'), + ApiDoc\Param(name: "order_id", type: "int", require: true, desc: "订单id"), + ApiDoc\NotHeaders(), + ApiDoc\ResponseSuccess("data", type: "array"), + ] public function detail() { $order_id = (int)$this->request->get('order_id'); @@ -484,6 +496,7 @@ class OrderController extends BaseApiController ApiDoc\Param(name: "refund_num", type: "int", require: true, desc: "退款数量"), ApiDoc\Param(name: "id", type: "int", require: true, desc: "订单id"), ApiDoc\Param(name: "old_cart_id", type: "int", require: true, desc: "购物车id"), + ApiDoc\Param(name: "refund_type", type: "int", require: true, desc: "退款申请类型"), ApiDoc\NotHeaders(), ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"), ApiDoc\ResponseSuccess("data", type: "array"), @@ -496,6 +509,46 @@ class OrderController extends BaseApiController OrderLogic::dealRefund($uid,$params); return $this->success('申请成功'); } + + #[ + ApiDoc\Title('订单退款原因'), + ApiDoc\url('/api/order/order/refund_reason'), + ApiDoc\Method('GET'), + ApiDoc\Param(), + ApiDoc\NotHeaders(), + ApiDoc\ResponseSuccess("data", type: "array"), + ] + public function refund_reason() + { + $data = DictData::where('type_value','reason')->where('status',YesNoEnum::YES) + ->select()->toArray(); + return $this->success('ok',$data); + } + + + #[ + ApiDoc\Title('取消售后'), + ApiDoc\url('/api/order/order/cancel_sale'), + ApiDoc\Method('GET'), + ApiDoc\Param(name: "order_id", type: "int", require: true, desc: "订单id"), + ApiDoc\NotHeaders(), + ApiDoc\ResponseSuccess("data", type: "array"), + ] + public function cancel_sale() + { + $order_id = (int)$this->request->get('order_id'); + $where = [ + 'id' => $order_id, + 'uid' => $this->userId, + ]; + $order = OrderLogic::cancelSell($where); + if ($order) { + return $this->success(); + } else { + return $this->fail('取消失败'); + } + + } diff --git a/app/api/controller/store/ProductRecordController.php b/app/api/controller/store/ProductRecordController.php new file mode 100644 index 000000000..f9d1f6e46 --- /dev/null +++ b/app/api/controller/store/ProductRecordController.php @@ -0,0 +1,321 @@ +userInfo); + $data = [ + "browse" => [ + "num" => 11353, + "percent" => "330.03" + ], + "user" => [ + "num" => 538, + "percent" => "47.39" + ], + "cart" => [ + "num" => 1181, + "percent" => "43.67" + ], + "order" => [ + "num" => 105753, + "percent" => "-68.07" + ], + "pay" => [ + "num" => 2476, + "percent" => "-99.24" + ], + "payPrice" => [ + "num" => 163490.54, + "percent" => "-87.50" + ], + "cost" => [ + "num" => 72147.8, + "percent" => "-93.33" + ], + "refundPrice" => [ + "num" => 2321.81, + "percent" => "1447.87" + ], + "refund" => [ + "num" => 39, + "percent" => "8.33" + ], + "payPercent" => [ + "num" => "15.61", + "percent" => "-6.58" + ] + ]; + return $this->data($data); + } + + /** + * 商品趋势 + */ + public function get_trend() + { + $data = [ + "xAxis" => [ + "2024-05-06", + "2024-05-07", + "2024-05-08", + "2024-05-09", + "2024-05-10", + "2024-05-11", + "2024-05-12", + "2024-05-13", + "2024-05-14", + "2024-05-15", + "2024-05-16", + "2024-05-17", + "2024-05-18", + "2024-05-19", + "2024-05-20", + "2024-05-21", + "2024-05-22", + "2024-05-23", + "2024-05-24", + "2024-05-25", + "2024-05-26", + "2024-05-27", + "2024-05-28", + "2024-05-29", + "2024-05-30", + "2024-05-31", + "2024-06-01", + "2024-06-02", + "2024-06-03", + "2024-06-04" + ], + "series" => [ + [ + "name" => "商品浏览量", + "data" => [ + 131, + 275, + 137, + 100, + 221, + 76, + 64, + 83, + 161, + 125, + 120, + 971, + 169, + 84, + 68, + 153, + 470, + 1310, + 621, + 827, + 113, + 595, + 485, + 484, + 535, + 227, + 714, + 144, + 1159, + 731 + ], + "type" => "line", + "smooth" => "true", + "yAxisIndex" => 1 + ], + [ + "name" => "商品访客量", + "data" => [ + 21, + 26, + 26, + 32, + 26, + 14, + 6, + 13, + 17, + 26, + 24, + 18, + 7, + 6, + 23, + 23, + 23, + 33, + 29, + 61, + 25, + 103, + 55, + 45, + 45, + 30, + 28, + 25, + 41, + 21 + ], + "type" => "line", + "smooth" => "true", + "yAxisIndex" => 1 + ], + [ + "name" => "支付金额", + "data" => [ + 53.6, + 0.25, + 1231.84, + 0.8, + 0, + 10, + 0, + 0.66, + 7919.2, + 0, + 8040.38, + 0.01, + 0, + 0, + 10.49, + 0, + 0.01, + 599.01, + 100100, + 908.81, + 0, + 1887.06, + 588, + 184.3, + 665.11, + 0, + 0, + 219.2, + 24.09, + 16.99 + ], + "type" => "bar" + ], + [ + "name" => "退款金额", + "data" => [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 730.8, + 49, + 219, + 0, + 1323.01, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "type" => "bar" + ] + ] + ]; + return $this->data($data); + } + + /** + * 获取商品排名数据 + */ + public function get_product_ranking() + { + $data = [ + [ + "product_id" => 1661, + "visit" => "1331", + "user" => 119, + "cart" => "26", + "orders" => "22", + "pay" => "11", + "price" => "690.02", + "cost" => "0.00", + "profit" => "1.00", + "collect" => "4", + "changes" => "0.06", + "repeats" => "0.28", + "store_name" => "瞌睡兔 美式复古圆领卫衣外套女春秋款小个子宽松百搭休闲上衣", + "image" => "https://multi-store.crmeb.net/uploads/attach/2024/02/19/2f3f938d720fc4212216ab855808bf85.jpg", + "product_price" => "100.00", + "stock" => 16777213, + "is_show" => 1 + ], + [ + "product_id" => 1670, + "visit" => "949", + "user" => 161, + "cart" => "20", + "orders" => "47", + "pay" => "34", + "price" => "4347.45", + "cost" => "0.00", + "profit" => "1.00", + "collect" => "2", + "changes" => "0.13", + "repeats" => "0.14", + "store_name" => "ECOK2024年春秋季美式复古美拉德风高级感撞色领拉链夹克外套女潮", + "image" => "https://multi-store.crmeb.net/uploads/attach/2024/02/19/5bf089c30da5bdddd815fbf2cba148e6.jpg", + "product_price" => "169.90", + "stock" => 2980, + "is_show" => 1 + ], + [ + "product_id" => 2033, + "visit" => "743", + "user" => 139, + "cart" => "30", + "orders" => "52", + "pay" => "20", + "price" => "3930.50", + "cost" => "0.00", + "profit" => "1.00", + "collect" => "1", + "changes" => "0.04", + "repeats" => "0.50", + "store_name" => "【618抢先购】CT四色眼影盘新色枕边话哑光亮片粉棕彩妆官方正品", + "image" => "https://multi-store.crmeb.net/uploads/attach/2024/05/24/fc63ee052b9dc66bd70a1e013510ded2.jpg", + "product_price" => "490.00", + "stock" => 139994, + "is_show" => 1 + ], + ]; + return $this->data($data); + } + +} \ No newline at end of file diff --git a/app/api/controller/store/TransactionRecordController.php b/app/api/controller/store/TransactionRecordController.php new file mode 100644 index 000000000..c0b2bb023 --- /dev/null +++ b/app/api/controller/store/TransactionRecordController.php @@ -0,0 +1,790 @@ + [ + "num" => 1086, + "last_num" => 20904, + "percent" => "-94.80" + ], + "browse" => [ + "num" => 11296, + "last_num" => 363632, + "percent" => "-96.89" + ], + "newUser" => [ + "num" => 391, + "last_num" => 21790, + "percent" => "-98.20" + ], + "payPeople" => [ + "num" => 84, + "last_num" => 1314, + "percent" => "-93.60" + ], + "payPercent" => [ + "num" => "7.73", + "last_num" => "6.28", + "percent" => "23.08" + ], + "payUser" => [ + "num" => 27, + "last_num" => 431, + "percent" => "-93.73" + ], + "rechargePeople" => [ + "num" => 13, + "last_num" => 121, + "percent" => "-89.25" + ], + "payPrice" => [ + "num" => 2042.04, + "last_num" => 10352.37, + "percent" => "-80.27" + ], + "cumulativeUser" => [ + "num" => 22852, + "last_num" => 21790, + "percent" => "4.87" + ], + "cumulativePayUser" => [ + "num" => 552, + "last_num" => 521, + "percent" => "5.95" + ], + "cumulativeRechargePeople" => [ + "num" => 134, + "last_num" => 121, + "percent" => "10.74" + ], + "cumulativePayPeople" => [ + "num" => 1380, + "last_num" => 1314, + "percent" => "5.02" + ] + ]; + return $this->data($data); + } + //-------------------------------交易统计---------------------------------------// + //当日订单金额 + public function top_trade() + { + $data = [ + "left" => [ + "name" => "当日订单金额", + "x" => [ + "00", + "01", + "02", + "03", + "04", + "05", + "06", + "07", + "08", + "09", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" + ], + "series" => [ + [ + "money" => 279.47, + "value" => [ + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "4.48", + "257.20", + "0.00", + "16.99", + "0.80", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00" + ] + ], + [ + "money" => 10175.64, + "value" => [ + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.01", + "0.00", + "0.00", + "40.00", + "0.10", + "9938.00", + "0.08", + "30.16", + "0.00", + "0.00", + "0.00", + "163.20", + "4.09", + "0.00", + "0.00" + ] + ] + ] + ], + "right" => [ + "today" => [ + "x" => [ + "00", + "01", + "02", + "03", + "04", + "05", + "06", + "07", + "08", + "09", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" + ], + "series" => [ + [ + "name" => "今日订单数", + "now_money" => 8, + "last_money" => 13, + "rate" => "-38.46", + "value" => [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 1, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + [ + "name" => "今日支付人数", + "now_money" => 5, + "last_money" => 8, + "rate" => "-37.50", + "value" => [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ] + ] + ], + "month" => [ + [ + "name" => "本月订单数", + "now_money" => 30, + "last_money" => 285, + "rate" => "-89.47", + "value" => [ + "2024-06-01" => 2, + "2024-06-02" => 7, + "2024-06-03" => 13, + "2024-06-04" => 8, + "2024-06-05" => 0, + "2024-06-06" => 0, + "2024-06-07" => 0, + "2024-06-08" => 0, + "2024-06-09" => 0, + "2024-06-10" => 0, + "2024-06-11" => 0, + "2024-06-12" => 0, + "2024-06-13" => 0, + "2024-06-14" => 0, + "2024-06-15" => 0, + "2024-06-16" => 0, + "2024-06-17" => 0, + "2024-06-18" => 0, + "2024-06-19" => 0, + "2024-06-20" => 0, + "2024-06-21" => 0, + "2024-06-22" => 0, + "2024-06-23" => 0, + "2024-06-24" => 0, + "2024-06-25" => 0, + "2024-06-26" => 0, + "2024-06-27" => 0, + "2024-06-28" => 0, + "2024-06-29" => 0, + "2024-06-30" => 0 + ] + ], + [ + "name" => "本月支付人数", + "now_money" => 15, + "last_money" => 79, + "rate" => "-81.01", + "value" => [ + "2024-06-01" => 1, + "2024-06-02" => 4, + "2024-06-03" => 8, + "2024-06-04" => 5, + "2024-06-05" => 0, + "2024-06-06" => 0, + "2024-06-07" => 0, + "2024-06-08" => 0, + "2024-06-09" => 0, + "2024-06-10" => 0, + "2024-06-11" => 0, + "2024-06-12" => 0, + "2024-06-13" => 0, + "2024-06-14" => 0, + "2024-06-15" => 0, + "2024-06-16" => 0, + "2024-06-17" => 0, + "2024-06-18" => 0, + "2024-06-19" => 0, + "2024-06-20" => 0, + "2024-06-21" => 0, + "2024-06-22" => 0, + "2024-06-23" => 0, + "2024-06-24" => 0, + "2024-06-25" => 0, + "2024-06-26" => 0, + "2024-06-27" => 0, + "2024-06-28" => 0, + "2024-06-29" => 0, + "2024-06-30" => 0 + ] + ] + ] + ] + ]; + return $this->data($data); + } + + //交易趋势 + public function bottom_trade() + { + $data = [ + "x" => [ + "2024-05-06", + "2024-05-07", + "2024-05-08", + "2024-05-09", + "2024-05-10", + "2024-05-11", + "2024-05-12", + "2024-05-13", + "2024-05-14", + "2024-05-15", + "2024-05-16", + "2024-05-17", + "2024-05-18", + "2024-05-19", + "2024-05-20", + "2024-05-21", + "2024-05-22", + "2024-05-23", + "2024-05-24", + "2024-05-25", + "2024-05-26", + "2024-05-27", + "2024-05-28", + "2024-05-29", + "2024-05-30", + "2024-05-31", + "2024-06-01", + "2024-06-02", + "2024-06-03", + "2024-06-04" + ], + "series" => [ + [ + "name" => "营业额", + "desc" => "商品支付金额、充值金额、购买付费会员金额、线下收银金额", + "money" => "3538021.24", + "type" => 1, + "rate" => 353802124, + "value" => [ + "85.61", + "161.06", + "1215.65", + "38.96", + "324.79", + "214.88", + "228.82", + "34.24", + "8249.85", + "573.35", + "8586.24", + "10.19", + "90.19", + "105.40", + "62.59", + "1051.34", + "160.66", + "241651.20", + "111325.41", + "2085393.05", + "267.40", + "1063972.04", + "1217.31", + "582.40", + "757.02", + "597.00", + "0.08", + "609.40", + "10175.64", + "279.47" + ] + ], + [ + "name" => "交易毛利金额", + "desc" => "交易毛利金额 = 营业额 - 支出金额", + "money" => "3408415.79", + "type" => 1, + "rate" => 340841579, + "value" => [ + "32.01", + "79.21", + "194.81", + "38.16", + "324.79", + "204.88", + "228.82", + "31.88", + "330.64", + "553.64", + "545.58", + "1.28", + "90.19", + "105.40", + "44.00", + "1043.16", + "45.94", + "240254.48", + "10346.41", + "2080946.30", + "189.00", + "1060654.82", + "629.30", + "398.10", + "91.70", + "597.00", + "0.08", + "0.10", + "10151.63", + "262.48" + ] + ], + [ + "name" => "商品支付金额", + "desc" => "选定条件下,用户购买商品的实际支付金额,包括微信支付、余额支付、支付宝支付、线下支付金额(拼团商品在成团之后计入,线下支付订单在后台确认支付后计入)", + "money" => 157433.34, + "type" => 1, + "rate" => 15743334, + "value" => [ + "85.61", + "161.06", + "1215.65", + "38.96", + "324.69", + "214.88", + "228.82", + "34.24", + "8249.85", + "573.35", + "8586.24", + "10.19", + "90.19", + "105.40", + "62.59", + "1051.34", + "160.66", + "1693.20", + "111325.41", + "5365.05", + "189.00", + "3448.64", + "1217.31", + "582.40", + "757.02", + "597.00", + "0.08", + "609.40", + "10175.64", + "279.47" + ] + ], + [ + "name" => "购买会员金额", + "desc" => "选定条件下,用户成功购买付费会员的金额", + "money" => 0, + "type" => 1, + "rate" => 0, + "value" => [ + 0, + "0.00", + "0.00", + 0, + 0, + 0, + 0, + 0, + "0.00", + "0.00", + 0, + "0.00", + 0, + 0, + 0, + 0, + 0, + "0.00", + "0.00", + "0.00", + 0, + "0.00", + "0.00", + 0, + 0, + "0.00", + 0, + "0.00", + "0.00", + 0 + ] + ], + [ + "name" => "充值金额", + "desc" => "选定条件下,用户成功充值的金额", + "money" => "3380587.90", + "type" => 1, + "rate" => 338058790, + "value" => [ + "0.00", + "0.00", + "0.00", + "0.00", + "0.10", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "239958.00", + "0.00", + "2080028.00", + "78.40", + "1060523.40", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00", + "0.00" + ] + ], + [ + "name" => "线下收银金额", + "desc" => "选定条件下,用户在线下扫码支付的金额", + "money" => 0, + "type" => 0, + "rate" => 0, + "value" => [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + [ + "name" => "支出金额", + "desc" => "余额支付金额、支付佣金金额", + "money" => "129605.45", + "type" => 1, + "rate" => 12960545, + "value" => [ + "53.60", + "81.85", + "1020.84", + "0.80", + "0.00", + "10.00", + "0.00", + "2.36", + "7919.21", + "19.71", + "8040.66", + "8.91", + "0.00", + "0.00", + "18.59", + "8.18", + "114.72", + "1396.72", + "100979.00", + "4446.75", + "78.40", + "3317.22", + "588.01", + "184.30", + "665.32", + "0.00", + "0.00", + "609.30", + "24.01", + "16.99" + ] + ], + [ + "name" => "余额支付金额", + "desc" => "用户下单时使用余额实际支付的金额", + "money" => "128943.25", + "type" => 0, + "rate" => 1289432500, + "value" => [ + "53.60", + "81.85", + "1020.84", + "0.80", + "0.00", + "10.00", + "0.00", + "2.36", + "7919.21", + "19.71", + "8040.66", + "8.91", + "0.00", + "0.00", + "18.59", + "8.18", + "114.72", + "1396.72", + "100979.00", + "4416.75", + "0.00", + "2763.42", + "588.01", + "184.30", + "665.32", + "0.00", + "0.00", + "609.30", + "24.01", + "16.99" + ] + ], + [ + "name" => "支付佣金金额", + "desc" => "后台给推广员支付的推广佣金,以实际支付为准", + "money" => 662.2, + "type" => 0, + "rate" => 66220, + "value" => [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "30.00", + "78.40", + "553.80", + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + [ + "name" => "商品退款金额", + "desc" => "用户成功退款的商品金额", + "money" => 2321.81, + "type" => 0, + "rate" => 232181, + "value" => [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "0.00", + 0, + 0, + 0, + 0, + 0, + "0.00", + "730.80", + "49.00", + "219.00", + 0, + "1323.01", + "0.00", + 0, + "0.00", + 0, + 0, + 0, + 0, + "0.00" + ] + ] + ], + ]; + return $this->data($data); + } + +} \ No newline at end of file diff --git a/app/api/lists/order/OrderList.php b/app/api/lists/order/OrderList.php index d4d9f4e3a..482b38719 100644 --- a/app/api/lists/order/OrderList.php +++ b/app/api/lists/order/OrderList.php @@ -7,6 +7,7 @@ use app\admin\lists\BaseAdminDataLists; use app\common\lists\ListsSearchInterface; use app\common\model\store_order\StoreOrder; use app\common\model\store_order_cart_info\StoreOrderCartInfo; +use app\common\model\store_product_unit\StoreProductUnit; /** * 零售订单列表 @@ -44,7 +45,7 @@ class OrderList extends BaseAdminDataLists implements ListsSearchInterface { $userId=$this->request->userId; if(!$userId) return []; - return StoreOrder::with(['store'])->where($this->searchWhere)->where('uid',$userId) + $data = StoreOrder::with(['store'])->where($this->searchWhere)->where('uid',$userId) ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) ->select() @@ -55,6 +56,18 @@ class OrderList extends BaseAdminDataLists implements ListsSearchInterface $item['goods_count']=count(explode(',',$item['cart_id'])); }) ->toArray(); + foreach ($data as &$value){ + if($value['refund_reason_time']){ + $value['refund_reason_time'] = date('Y-m-d H:i:s',$value['refund_reason_time']); + } + if($value['pay_time']){ + $value['pay_time'] = date('Y-m-d H:i:s',$value['pay_time']); + } + foreach ($value['goods_list'] as &$vv){ + $vv['unit'] =StoreProductUnit::where('id',$vv['unit'])->value('name')??''; + } + } + return $data; } diff --git a/app/api/lists/product/ProductLists.php b/app/api/lists/product/ProductLists.php index bb6dc9537..e43bdd698 100644 --- a/app/api/lists/product/ProductLists.php +++ b/app/api/lists/product/ProductLists.php @@ -4,6 +4,7 @@ namespace app\api\lists\product; use app\admin\lists\BaseAdminDataLists; +use app\common\model\dict\DictType; use app\common\model\store_branch_product\StoreBranchProduct; use app\common\model\store_product\StoreProduct; use app\common\lists\ListsSearchInterface; @@ -134,7 +135,11 @@ class ProductLists extends BaseAdminDataLists implements ListsSearchInterface ->toArray(); } + $check = DictType::where('type','activities')->find(); foreach ($data as &$value){ + if(isset($check) && $check['status'] == 1){ + $value['price'] = StoreProduct::where('product_id',$value['product_id'])->value('ot_price'); + } $value['is_default'] = 0; if($store_id == 2){ $value['is_default'] = 1; diff --git a/app/api/logic/order/OrderLogic.php b/app/api/logic/order/OrderLogic.php index 42e288ea3..f61c16aed 100644 --- a/app/api/logic/order/OrderLogic.php +++ b/app/api/logic/order/OrderLogic.php @@ -57,11 +57,15 @@ class OrderLogic extends BaseLogic try { self::$total = 0; /** 计算价格 */ + $check = DictType::where('type','activities')->find(); foreach ($cart_select as $k => $v) { - $find = StoreBranchProduct::where(['id' => $v['goods']])->field('store_name,image,unit,price')->find(); + $find = StoreBranchProduct::where(['id' => $v['goods']])->field('store_name,image,unit,price,product_id')->find(); if (!$find) { continue; } + if(isset($check) && $check['status'] == 1){ + $find['price'] = StoreProduct::where('product_id',$find['product_id'])->value('ot_price'); + } $cart_select[$k]['total'] = bcmul($v['cart_num'], $find['price'], 2);//钱 $cart_select[$k]['price'] = $find['price']; $cart_select[$k]['product_id'] = $v['goods']; @@ -87,7 +91,6 @@ class OrderLogic extends BaseLogic //TODO 收单打9.9折 会员按照比例打折 等级按照充值去升级 $pay_price = self::$total; // $check = StoreOrder::where('uid',\request()->userId)->count();//首单逻辑 - $check = DictType::where('type','activities')->find(); $vipPrice = 0; if(isset($check) && $check['status'] == 1){ // $discountRate = '0.99';//首单逻辑 @@ -445,6 +448,20 @@ class OrderLogic extends BaseLogic return $find; } + //取消售后 + public static function cancelSell($where) + { + return StoreOrder::where($where)->update( + [ + 'refund_status'=>OrderEnum::CANCEL_SALE, + 'status'=>OrderEnum::CANCEL_ORDER, + 'refund_cancle_time'=>date('Y-m-d H:i:s',time()) + ] + ); + + + } + //核销 @@ -619,6 +636,7 @@ class OrderLogic extends BaseLogic $price =bcsub($price, $onePrice); } $order->refund_price = $price; + $order->refund_type = $params['refund_type']; $order->save(); }else{ // 多单的情况 拆主订单为新的2单 修改新的2单的核销码 修改cart_info的核销码 和订单id 退款直接退一单的钱 @@ -631,7 +649,7 @@ class OrderLogic extends BaseLogic ->whereNotIn('old_cart_id',$params['old_cart_id']) ->select()->toArray(); if($cart_info){ - $leftOrder = self::dealCreateLeftOrder($order,$cart_info); + $leftOrder = self::dealCreateLeftOrder($order,$cart_info,$params); self::dealChangeCartInfo($leftOrder); } $refundOrder = self::dealCreateRefundOrder($order,$params); @@ -666,7 +684,7 @@ class OrderLogic extends BaseLogic - public static function dealCreateLeftOrder($order,$cart_info) + public static function dealCreateLeftOrder($order,$cart_info,$params) { //查出不在这个退货中的数据 $order['order_id'] = $order['order_id'].'-2'; @@ -694,6 +712,7 @@ class OrderLogic extends BaseLogic } $order['cart_id'] = implode(',',$allOldCartIds); $order['total_num'] = count($cart_info); + $order['refund_type'] = $params['refund_type']; $order['total_price'] = number_format($totalTotal, 2); $order['pay_price'] = number_format($totalPrice, 2); $order['vip_price'] = number_format($totalVipPrice, 2); @@ -740,6 +759,7 @@ class OrderLogic extends BaseLogic $order['vip_price'] = number_format($totalVipPrices, 2); $order['refund_price'] = number_format($totalPrice, 2); $order['verify_code'] = verificationCode(); + $order['refund_reason_time'] = time(); $order['create_time'] = time()+1; $order['update_time'] = null; $order['delete_time'] = null; diff --git a/app/api/validate/OrderValidate.php b/app/api/validate/OrderValidate.php index b1bb8a593..f7e076323 100644 --- a/app/api/validate/OrderValidate.php +++ b/app/api/validate/OrderValidate.php @@ -22,6 +22,7 @@ class OrderValidate extends BaseValidate 'refund_num' => 'require|number', 'id' => 'require|number', 'old_cart_id' => 'require|array', + 'refund_type' => 'require|number', ]; @@ -35,6 +36,7 @@ class OrderValidate extends BaseValidate 'refund_num' => '退款数量', 'id' => '订单id', 'old_cart_id' => '购物车id', + 'refund_type' => '退款申请类型', ]; @@ -55,7 +57,7 @@ class OrderValidate extends BaseValidate */ public function sceneAdd() { - return $this->only(['refund_message','refund_num','id','old_cart_id']); + return $this->only(['refund_message','refund_num','id','old_cart_id','refund_type']); } diff --git a/app/common/enum/OrderEnum.php b/app/common/enum/OrderEnum.php index 1234e32e3..747e3ae55 100644 --- a/app/common/enum/OrderEnum.php +++ b/app/common/enum/OrderEnum.php @@ -95,9 +95,19 @@ class OrderEnum const SUPPLIER = 3; const SYSTEM = 4; + + + /** + * 订单状态 + * @CANCEL_ORDER 取消售后 + */ + const CANCEL_ORDER = 5; + + //退款状态 const REFUND_STATUS_NO = 0; const REFUND_STATUS_YES = 1; const REFUND_STATUS_FINISH = 2; + const CANCEL_SALE = 3; /** * @notes 获取支付类型 diff --git a/app/common/logic/store_order/StoreOrderLogic.php b/app/common/logic/store_order/StoreOrderLogic.php index c5b4780e6..1b7d0d487 100644 --- a/app/common/logic/store_order/StoreOrderLogic.php +++ b/app/common/logic/store_order/StoreOrderLogic.php @@ -11,6 +11,9 @@ use app\common\model\store_order_cart_info\StoreOrderCartInfo; use app\common\model\store_product\StoreProduct; use app\common\model\store_product_unit\StoreProductUnit; use app\common\model\user\UserAddress; +use app\common\service\pay\PayService; +use Exception; +use support\Cache; use think\facade\Db; class StoreOrderLogic extends BaseLogic @@ -178,4 +181,46 @@ class StoreOrderLogic extends BaseLogic return StoreOrder::where('store_id', $storeId)->where('paid', 1)->where($extra)->whereBetweenTime('create_time', $start, $end)->sum('pay_price'); } + /** + * 退款 + * @param $order_sn + * @param $refund_money + * @param $total + * @return bool + * @throws Exception + */ + public function refund($order_sn,$refund_money,$total) + { + try { + $wechat = new PayService(1); + $time = time(); + $order = [ + 'out_trade_no' => $order_sn, + 'out_refund_no' => 'BO'.$time, + 'amount' => [ + 'refund' => $refund_money, + 'total' => $total, + 'currency' => 'CNY', + ], + // '_action' => 'jsapi', // jsapi 退款,默认 + // '_action' => 'app', // app 退款 + // '_action' => 'combine', // 合单退款 + // '_action' => 'h5', // h5 退款 + // '_action' => 'miniapp', // 小程序退款 + // '_action' => 'native', // native 退款 + + ]; + + $res = $wechat->wechat->refund($order); + if($res['status'] == 'PROCESSING'){ + return true; + } + return false; + } catch (Exception $e) { + \support\Log::info($e->extra['message']?? $e->getMessage()); + throw new \Exception($e->extra['message']?? $e->getMessage()); + } + + } + }