From ab4132693a2a88803dab7b5e734b7a048355ec07 Mon Sep 17 00:00:00 2001 From: shengchanzhe <179998674@qq.com> Date: Fri, 15 Dec 2023 17:25:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/api/server/StoreOrderOther.php | 380 ++++++++++++++++++ route/api.php | 22 +- 2 files changed, 399 insertions(+), 3 deletions(-) create mode 100644 app/controller/api/server/StoreOrderOther.php diff --git a/app/controller/api/server/StoreOrderOther.php b/app/controller/api/server/StoreOrderOther.php new file mode 100644 index 00000000..ca8f5510 --- /dev/null +++ b/app/controller/api/server/StoreOrderOther.php @@ -0,0 +1,380 @@ + +// +---------------------------------------------------------------------- + + +namespace app\controller\api\server; + + +use app\common\model\store\order\StoreGroupOrder; +use app\common\repositories\delivery\DeliveryStationRepository; +use app\common\repositories\store\order\StoreOtherOrderCreateRepository; +use app\common\repositories\store\order\StoreRefundOrderRepository; +use app\common\repositories\store\service\StoreServiceRepository; +use app\controller\merchant\Common; +use crmeb\basic\BaseController; +use think\App; +use think\exception\HttpResponseException; +use think\exception\ValidateException; +use think\facade\Db; +use think\response\Json; + +class StoreOrderOther extends BaseController +{ + public function __construct(App $app) + { + parent::__construct($app); + } + + public function orderDetail($merId, StoreOtherOrderCreateRepository $repository) + { + [$page, $limit] = $this->getPage(); + list($start, $stop) = $this->request->params([ + ['start', strtotime(date('Y-m'))], + ['stop', time()], + ], true); + if ($start == $stop) return app('json')->fail('参数有误'); + if ($start > $stop) { + $middle = $stop; + $stop = $start; + $start = $middle; + } + $where = $this->request->has('start') ? ['dateRange' => compact('start', 'stop')] : []; + $list = $repository->orderGroupNumPage($where, $page, $limit, $merId); + return app('json')->success($list); + } + + public function orderList($merId, StoreOtherOrderCreateRepository $repository) + { + [$page, $limit] = $this->getPage(); + $where['status'] = $this->request->param('status'); + $where['pay_time'] = $this->request->param('pay_time'); + $where['product_type'] = $this->request->param('product_type',0); + if ($where['product_type']==0){ + unset($where['product_type']); + } + $where['is_verify'] = $this->request->param('is_verify'); + $where['search'] = $this->request->param('store_name'); + $where['order_search'] = $this->request->param('search_info'); + $where['mer_id'] = $merId; + $where['is_del'] = 0; + return app('json')->success($repository->merchantGetList($where, $page, $limit)); + } + + public function order($merId, $id, StoreOtherOrderCreateRepository $repository) + { + $detail = $repository->getDetail($id); + if (!$detail) + return app('json')->fail('订单不存在'); + if ($detail['mer_id'] != $merId) + return app('json')->fail('没有权限'); + return app('json')->success($detail->toArray()); + } + + + protected function checkOrderAuth($merId, $id) + { + if (!app()->make(StoreOtherOrderCreateRepository::class)->existsWhere(['mer_id' => $merId, 'order_id' => $id])) + throw new ValidateException('没有权限'); + } + + public function mark($merId, $id, StoreOtherOrderCreateRepository $repository) + { + $this->checkOrderAuth($merId, $id); + $data = $this->request->params(['remark']); + $repository->update($id, $data); + return app('json')->success('备注成功'); + } + + /** + * TODO 发货操作 + * @param $merId + * @param $id + * @param StoreOtherOrderCreateRepository $repository + * @return Json + * @author Qinii + * @day 6/1/22 + */ + public function delivery($merId, $id, StoreOtherOrderCreateRepository $repository) + { + $this->checkOrderAuth($merId, $id); + $type = $this->request->param('delivery_type'); + $split = $this->request->params(['is_split',['split',[]]]); + if (!$repository->merDeliveryExists($id, $merId)) + return app('json')->fail('订单信息或状态错误'); + switch ($type) + { + case 3: //虚拟发货 + $data = $this->request->params([ + 'delivery_type', + 'remark', + ]); + $data['delivery_name'] = ''; + $data['delivery_id'] = ''; + $method = 'delivery'; + break; + case 4: //电子面单 + if (!systemConfig('crmeb_serve_dump')) + return app('json')->fail('电子面单功能未开启'); + $data = $this->request->params([ + 'delivery_type', + 'delivery_name', + 'from_name', + 'from_tel', + 'from_addr', + 'temp_id', + 'remark', + ]); + if (!$data['from_name'] || + !$data['delivery_name'] || + !$data['from_tel'] || + !$data['from_addr'] || + !$data['temp_id'] + ) + return app('json')->fail('填写配送信息'); + $method = 'dump'; + break; + case 5: //同城配送 + if (systemConfig('delivery_status') != 1) + return app('json')->fail('未开启同城配送'); + $data = $this->request->params([ + 'delivery_type', + 'station_id', + 'mark', + ['cargo_weight',0], + 'remark', + ]); + if ($data['cargo_weight'] < 0) return app('json')->fail('包裹重量能为负数'); + if (!$data['station_id']) return app('json')->fail('请选择门店'); + $method = 'cityDelivery'; + break; + default: //快递 + $data = $this->request->params([ + 'delivery_type', + 'delivery_type', + 'delivery_name', + 'delivery_id', + 'remark', + ]); + if (!$data['delivery_type'] || !$data['delivery_name'] || !$data['delivery_id']) + return app('json')->fail('填写配送信息'); + + $method = 'delivery'; + break; + } + $repository->runDelivery($id,$merId, $data, $split, $method, $this->request->serviceInfo()->service_id); + return app('json')->success('发货成功'); + } + + /** + * TODO 扫描发货 + * @param $orderId + * @param $orderSn + */ + public function deliveryGoods($orderId, $orderSn, StoreOtherOrderCreateRepository $repository) + { + app()->make(StoreOtherOrderCreateRepository::class)->takeGoods($orderId, $orderSn); + return app('json')->success('扫描发货成功'); + } + + public function payPrice($merId, StoreOtherOrderCreateRepository $repository) + { + list($start, $stop, $month) = $this->request->params([ + ['start', strtotime(date('Y-m'))], + ['stop', time()], + 'month' + ], true); + + if ($month) { + $start = date('Y/m/d', strtotime(getStartModelTime('month'))); + $stop = date('Y/m/d H:i:s', strtotime('+ 1day')); + $front = date('Y/m/d', strtotime('first Day of this month', strtotime('-1 day', strtotime('first Day of this month')))); + $end = date('Y/m/d H:i:s', strtotime($start . ' -1 second')); + } else { + if ($start == $stop) return app('json')->fail('参数有误'); + if ($start > $stop) { + $middle = $stop; + $stop = $start; + $start = $middle; + } + $space = bcsub($stop, $start, 0);//间隔时间段 + $front = bcsub($start, $space, 0);//第一个时间段 + + $front = date('Y/m/d H:i:s', $front); + $start = date('Y/m/d H:i:s', $start); + $stop = date('Y/m/d H:i:s', $stop); + $end = date('Y/m/d H:i:s', strtotime($start . ' -1 second')); + } + $frontPrice = $repository->dateOrderPrice($front . '-' . $end, $merId); + $afterPrice = $repository->dateOrderPrice($start . '-' . date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId); + $chartInfo = $repository->chartTimePrice($start, date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId); + $data['chart'] = $chartInfo;//营业额图表数据 + $data['time'] = $afterPrice;//时间区间营业额 + $increase = (float)bcsub((string)$afterPrice, (string)$frontPrice, 2); //同比上个时间区间增长营业额 + $growthRate = abs($increase); + if ($growthRate == 0) $data['growth_rate'] = 0; + else if ($frontPrice == 0) $data['growth_rate'] = bcmul($growthRate, 100, 0); + else $data['growth_rate'] = (int)bcmul((string)bcdiv((string)$growthRate, (string)$frontPrice, 2), '100', 0);//时间区间增长率 + $data['increase_time'] = abs($increase); //同比上个时间区间增长营业额 + $data['increase_time_status'] = $increase >= 0 ? 1 : 2; //同比上个时间区间增长营业额增长 1 减少 2 + + return app('json')->success($data); + } + + /** + * @param StoreOtherOrderCreateRepository $repository + * @return Json + * @author xaboy + * @day 2020/8/27 + */ + public function payNumber($merId, StoreOtherOrderCreateRepository $repository) + { + list($start, $stop, $month) = $this->request->params([ + ['start', strtotime(date('Y-m'))], + ['stop', time()], + 'month' + ], true); + + if ($month) { + $start = date('Y/m/d', strtotime(getStartModelTime('month'))); + $stop = date('Y/m/d H:i:s', strtotime('+ 1day')); + $front = date('Y/m/d', strtotime('first Day of this month', strtotime('-1 day', strtotime('first Day of this month')))); + $end = date('Y/m/d H:i:s', strtotime($start . ' -1 second')); + } else { + if ($start == $stop) return app('json')->fail('参数有误'); + if ($start > $stop) { + $middle = $stop; + $stop = $start; + $start = $middle; + } + $space = bcsub($stop, $start, 0);//间隔时间段 + $front = bcsub($start, $space, 0);//第一个时间段 + + $front = date('Y/m/d H:i:s', $front); + $start = date('Y/m/d H:i:s', $start); + $stop = date('Y/m/d H:i:s', $stop); + $end = date('Y/m/d H:i:s', strtotime($start . ' -1 second')); + } + $frontNumber = $repository->dateOrderNum($front . '-' . $end, $merId); + $afterNumber = $repository->dateOrderNum($start . '-' . date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId); + $chartInfo = $repository->chartTimeNum($start . '-' . date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId); + $data['chart'] = $chartInfo;//订单数图表数据 + $data['time'] = $afterNumber;//时间区间订单数 + $increase = $afterNumber - $frontNumber; //同比上个时间区间增长订单数 + $growthRate = abs($increase); + if ($growthRate == 0) $data['growth_rate'] = 0; + else if ($frontNumber == 0) $data['growth_rate'] = bcmul($growthRate, 100, 0); + else $data['growth_rate'] = (int)bcmul((string)bcdiv((string)$growthRate, (string)$frontNumber, 2), '100', 0);//时间区间增长率 + $data['increase_time'] = abs($increase); //同比上个时间区间增长营业额 + $data['increase_time_status'] = $increase >= 0 ? 1 : 2; //同比上个时间区间增长营业额增长 1 减少 2 + + return app('json')->success($data); + } + + public function getFormData($merId) + { + $config = [ + 'mer_from_com', + 'mer_from_name', + 'mer_from_tel', + 'mer_from_addr', + 'mer_config_siid', + 'mer_config_temp_id' + ]; + $data = merchantConfig($merId,$config); + return app('json')->success($data); + } + + public function getDeliveryConfig() + { + $data = systemConfig(['crmeb_serve_dump','delivery_status']); + return app('json')->success($data); + } + + public function getDeliveryOptions($merId, DeliveryStationRepository $repository) + { + if (!systemConfig('delivery_status')) { + return app('json')->success([]); + } + $where = [ + 'status' => 1, + 'mer_id' => $merId, + 'type' => systemConfig('delivery_type'), + ]; + $data = $repository->getOptions($where)->toArray(); + $type = systemConfig('delivery_type') == 1 ? 'UU' : '达达'; + if (empty($data)) return app('json')->fail('请前往商户后台添加'.$type.'发货点'); + return app('json')->success($data); + } + + public function verify($merId,$id,StoreOtherOrderCreateRepository $orderRepository) + { + $order = $orderRepository->getWhere(['order_id' => $id,'mer_id' => $merId]); + if (!$order) return app('json')->fail('数据不存在'); + $data = $this->request->params(['verify_code','data']); + $orderRepository->verifyOrder($order->verify_code, $merId, $data, $this->request->serviceInfo()->service_id); + return app('json')->success('订单核销成功'); + } + + /** + * 订单结算 + * @return mixed + * @throws \Psr\SimpleCache\InvalidArgumentException + */ + public function settle(StoreOtherOrderCreateRepository $repository) + { + $id = $this->request->param('id/d'); + $payType = $this->request->param('pay_type'); + if ($payType == 'creditBuy') { + return app('json')->fail('支付方式不支持'); + } + try { + $data = $repository->settle($id, $payType, $this->request->userInfo()); + return app('json')->success('success', $data); + } catch (\Exception $e) { + return app('json')->fail($e->getMessage()); + } + } + + /** + * 确认接单 + * @return mixed + */ + public function confirm(StoreOtherOrderCreateRepository $repository) + { + $id = $this->request->param('id/d'); + $type = $this->request->param('type/d'); + try { + $repository->confirm($id, $type); + return app('json')->success('success'); + } catch (\Exception $e) { + return app('json')->fail($e->getMessage()); + } + } + + /** + * 采购订单列表 + * @param $merId + * @param StoreOtherOrderCreateRepository $orderRepository + * @return \think\Collection + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public function purchaseOrder($merId, StoreOtherOrderCreateRepository $orderRepository) + { + [$page, $limit] = $this->getPage(); + $keyword = $this->request->param('keyword'); + $list = $orderRepository->purchaseOrder(['mer_id' => $merId], $keyword, $page, $limit); + return app('json')->success($list); + } + +} diff --git a/route/api.php b/route/api.php index 8adc0fbb..1d8d75db 100644 --- a/route/api.php +++ b/route/api.php @@ -130,8 +130,6 @@ Route::group('api/', function () { Route::get('detail/:id', '/detail'); Route::post('create', '/otherOrder'); //创建其他订单 Route::get('number', '/number'); - - })->prefix('api.store.order.StoreOrderOther'); // 预售 Route::group('presell', function () { @@ -354,7 +352,25 @@ Route::group('api/', function () { Route::post('/settle', '/settle'); Route::post('/confirm', '/confirm'); })->prefix('api.server.StoreOrder')->middleware(\app\common\middleware\MerchantServerMiddleware::class, 0); - + //管理员其他订单 + Route::group('admin/other/:merId', function () { + Route::get('/order_price', '/orderDetail'); + Route::get('/order_list', '/orderList'); + Route::get('/order/:id', '/order'); + Route::post('/mark/:id', '/mark'); + Route::post('/price/:id', '/price'); + Route::post('/delivery/:id', '/delivery'); + Route::post('/verify/:id', '/verify'); + Route::get('/pay_price', '/payPrice'); + Route::get('/pay_number', '/payNumber'); + Route::get('/mer_form', '/getFormData'); + Route::get('/dump_temp', '/getFormData'); + Route::get('/delivery_config', '/getDeliveryConfig'); + Route::get('/delivery_options', '/getDeliveryOptions'); + Route::get('/purchaseOrder', '/purchaseOrder'); + Route::post('/settle', '/settle'); + Route::post('/confirm', '/confirm'); + })->prefix('api.server.StoreOrderOther')->middleware(\app\common\middleware\MerchantServerMiddleware::class, 0); //代发货订单 Route::group('behalf_admin', function () { Route::get('/order_list', '/lst');