mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-12-01 14:40:44 +00:00
鲜花2.0-接口测试bug修复
This commit is contained in:
parent
05b5cd400a
commit
9e50b007eb
@ -8,7 +8,7 @@ use App\Http\Resources\DailySalesReportResource;
|
|||||||
use App\Models\BusinessOrderItem;
|
use App\Models\BusinessOrderItem;
|
||||||
use App\Models\DailySalesReport;
|
use App\Models\DailySalesReport;
|
||||||
use App\Models\GoodsSku;
|
use App\Models\GoodsSku;
|
||||||
use App\Services\Service\SaleDataService;
|
use App\Services\Statistic\SaleDataService;
|
||||||
use App\Utils\FormatUtils;
|
use App\Utils\FormatUtils;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@ -58,7 +58,9 @@ class DataCenterController extends Controller
|
|||||||
$validator = Validator::make($allParams, [
|
$validator = Validator::make($allParams, [
|
||||||
'type' => 'required|integer', //1表示今日
|
'type' => 'required|integer', //1表示今日
|
||||||
'start_day' => 'sometimes|date_format:Y-m-d',
|
'start_day' => 'sometimes|date_format:Y-m-d',
|
||||||
'end_day' => 'sometimes|date_format:Y-m-d'
|
'end_day' => 'sometimes|date_format:Y-m-d',
|
||||||
|
'start_time' => 'sometimes|date_format:Y-m-d H:i:s',
|
||||||
|
'end_time' => 'sometimes|date_format:Y-m-d H:i:s'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
@ -80,7 +82,9 @@ class DataCenterController extends Controller
|
|||||||
$validator = Validator::make($request->all(), [
|
$validator = Validator::make($request->all(), [
|
||||||
'type' => 'required|integer', //1表示今日
|
'type' => 'required|integer', //1表示今日
|
||||||
'start_day' => 'sometimes|date_format:Y-m-d',
|
'start_day' => 'sometimes|date_format:Y-m-d',
|
||||||
'end_day' => 'sometimes|date_format:Y-m-d'
|
'end_day' => 'sometimes|date_format:Y-m-d',
|
||||||
|
'start_time' => 'sometimes|date_format:Y-m-d H:i:s',
|
||||||
|
'end_time' => 'sometimes|date_format:Y-m-d H:i:s'
|
||||||
]);
|
]);
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
//校验失败返回异常
|
//校验失败返回异常
|
||||||
@ -97,7 +101,10 @@ class DataCenterController extends Controller
|
|||||||
'type' => 'required|integer', //1表示今日
|
'type' => 'required|integer', //1表示今日
|
||||||
'start_day' => 'required_unless:type,1|date_format:Y-m-d',
|
'start_day' => 'required_unless:type,1|date_format:Y-m-d',
|
||||||
'end_day' => 'required_unless:type,1|date_format:Y-m-d',
|
'end_day' => 'required_unless:type,1|date_format:Y-m-d',
|
||||||
"interval" => 'sometimes|integer|max:120|min:1'
|
"interval" => 'sometimes|integer|max:120|min:1',
|
||||||
|
'start_time' => 'sometimes|date_format:Y-m-d H:i:s',
|
||||||
|
'end_time' => 'sometimes|date_format:Y-m-d H:i:s',
|
||||||
|
'sku_id' => 'sometimes|integer'
|
||||||
]);
|
]);
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
//校验失败返回异常
|
//校验失败返回异常
|
||||||
@ -106,4 +113,20 @@ class DataCenterController extends Controller
|
|||||||
}
|
}
|
||||||
return $this->success(SaleDataService::gmvStatistics($request));
|
return $this->success(SaleDataService::gmvStatistics($request));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function lossRecordStatistics(Request $request)
|
||||||
|
{
|
||||||
|
//进行校验验证
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'start_time' => 'sometimes|date_format:Y-m-d H:i:s',
|
||||||
|
'end_time' => 'sometimes|date_format:Y-m-d H:i:s',
|
||||||
|
'sku_id' => 'sometimes|integer',
|
||||||
|
]);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
//校验失败返回异常
|
||||||
|
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||||
|
return response($this->res, $this->res['httpCode']);
|
||||||
|
}
|
||||||
|
return $this->success(SaleDataService::lossRecordStatistics($request));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -9,6 +9,7 @@ use App\Models\BusinessOrderItem;
|
|||||||
use App\Models\CombinationGood;
|
use App\Models\CombinationGood;
|
||||||
use App\Models\Goods;
|
use App\Models\Goods;
|
||||||
use App\Models\GoodsSku;
|
use App\Models\GoodsSku;
|
||||||
|
use App\Utils\GeneratorUtils;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
@ -96,7 +97,7 @@ class GoodsCombinationController extends Controller
|
|||||||
{
|
{
|
||||||
$validator = Validator::make($request->all(), [
|
$validator = Validator::make($request->all(), [
|
||||||
'title' => 'required',
|
'title' => 'required',
|
||||||
'external_sku_id' => 'required',
|
'external_sku_id' => 'sometimes',
|
||||||
'combination_goods.*' => 'required',
|
'combination_goods.*' => 'required',
|
||||||
'combination_goods.*.item_id' => 'required',
|
'combination_goods.*.item_id' => 'required',
|
||||||
'combination_goods.*.item_num' => 'required|gt:0',
|
'combination_goods.*.item_num' => 'required|gt:0',
|
||||||
@ -118,9 +119,10 @@ class GoodsCombinationController extends Controller
|
|||||||
$stock = [];
|
$stock = [];
|
||||||
$saleStock = [];
|
$saleStock = [];
|
||||||
foreach ($combinationGoods as $item) {
|
foreach ($combinationGoods as $item) {
|
||||||
|
if(!empty($skus[$item['item_id']])){
|
||||||
$stock[] = (int)($skus[$item['item_id']]['stock'] / $item['item_num']);
|
$stock[] = (int)($skus[$item['item_id']]['stock'] / $item['item_num']);
|
||||||
$saleStock[] = (int)($skus[$item['item_id']]['sale_stock'] / $item['item_num']);
|
$saleStock[] = (int)($skus[$item['item_id']]['sale_stock'] / $item['item_num']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$stock = min($stock);
|
$stock = min($stock);
|
||||||
$saleStock = min($saleStock);
|
$saleStock = min($saleStock);
|
||||||
@ -133,10 +135,14 @@ class GoodsCombinationController extends Controller
|
|||||||
$sku->goods_id = 0;
|
$sku->goods_id = 0;
|
||||||
$sku->is_combination = 1;
|
$sku->is_combination = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$externalSkuId = $request->input('external_sku_id') ??
|
||||||
|
GeneratorUtils::generateCombinationGoodNumber($request->combination_goods);
|
||||||
$sku->status = $status;
|
$sku->status = $status;
|
||||||
$sku->title = $request->input('title');
|
$sku->title = $request->input('title');
|
||||||
$sku->sku_code = $request->input('external_sku_id');
|
$sku->name = $request->input('title');
|
||||||
$sku->external_sku_id = $request->input('external_sku_id');
|
$sku->sku_code = $externalSkuId;
|
||||||
|
$sku->external_sku_id = $externalSkuId;
|
||||||
$sku->stock = $stock;
|
$sku->stock = $stock;
|
||||||
$sku->sale_stock = $saleStock;
|
$sku->sale_stock = $saleStock;
|
||||||
$sku->save();
|
$sku->save();
|
||||||
|
|||||||
@ -51,6 +51,7 @@ class GoodsController extends Controller
|
|||||||
$goodService = new GoodService();
|
$goodService = new GoodService();
|
||||||
$goods = $goodService->saveDefaultGoodsByGoodType($request->type_id);
|
$goods = $goodService->saveDefaultGoodsByGoodType($request->type_id);
|
||||||
$goodsSkus = [];
|
$goodsSkus = [];
|
||||||
|
|
||||||
foreach ($request->skus as $item) {
|
foreach ($request->skus as $item) {
|
||||||
$item['goods_id'] = $goods->id;
|
$item['goods_id'] = $goods->id;
|
||||||
$item['stock'] = $item['num'] ?? 0;
|
$item['stock'] = $item['num'] ?? 0;
|
||||||
|
|||||||
@ -114,8 +114,7 @@ class GoodsSkusController extends Controller
|
|||||||
->whereIn('id', $finalIds)
|
->whereIn('id', $finalIds)
|
||||||
->orderByRaw("FIELD(id, {$idField})")
|
->orderByRaw("FIELD(id, {$idField})")
|
||||||
->paginate($request->get('per_page'));
|
->paginate($request->get('per_page'));
|
||||||
$user = $request->user()->toArray();
|
$rolesName = $request->user()->getRoleNames()->toArray();
|
||||||
$adminRoleIds = DeveloperConfigService::getSkuAdminRoleIds();
|
|
||||||
foreach ($goodsSkus as &$sku) {
|
foreach ($goodsSkus as &$sku) {
|
||||||
$lastInventoryTime = !empty($sku['daily']['inventory_time']) ? $sku['daily']['inventory_time'] : date('Y-m-d 07:00:00');
|
$lastInventoryTime = !empty($sku['daily']['inventory_time']) ? $sku['daily']['inventory_time'] : date('Y-m-d 07:00:00');
|
||||||
if (isset($externals[$sku['external_sku_id']])) {
|
if (isset($externals[$sku['external_sku_id']])) {
|
||||||
@ -127,14 +126,9 @@ class GoodsSkusController extends Controller
|
|||||||
}
|
}
|
||||||
$sku['order_goods_num'] -= $sku['daily']['reissue_num'] ?? 0;
|
$sku['order_goods_num'] -= $sku['daily']['reissue_num'] ?? 0;
|
||||||
$sku['inventory_time'] = $lastInventoryTime;
|
$sku['inventory_time'] = $lastInventoryTime;
|
||||||
if ('销售' === ($user['roles'][0]['name'] ?? "")) {
|
if ('销售' === $rolesName[0]) {
|
||||||
$sku['cost'] = 0;
|
$sku['cost'] = 0;
|
||||||
}
|
}
|
||||||
if (in_array($user['roles'][0]['id'] ?? 0, $adminRoleIds)) {
|
|
||||||
$sku['is_admin'] = 1;
|
|
||||||
} else {
|
|
||||||
$sku['is_admin'] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($sku['yesterday_num'])) {
|
if (!empty($sku['yesterday_num'])) {
|
||||||
$sku['sale_ratio'] = round($sku['stock'] / $sku['yesterday_num'], 2)*100;
|
$sku['sale_ratio'] = round($sku['stock'] / $sku['yesterday_num'], 2)*100;
|
||||||
|
|||||||
@ -101,4 +101,9 @@ class UsersController extends Controller
|
|||||||
|
|
||||||
return response($this->res, $this->res['httpCode']);
|
return response($this->res, $this->res['httpCode']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function userRoles(Request $request)
|
||||||
|
{
|
||||||
|
return $request->user()->toArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,7 +66,7 @@ class CombinationGoodsImport implements ToArray, SkipsEmptyRows, WithStartRow
|
|||||||
$status = $saleStock ? (5 < $saleStock ? 1 : 2) : 0;
|
$status = $saleStock ? (5 < $saleStock ? 1 : 2) : 0;
|
||||||
$sku = GoodsSku::query()->updateOrCreate(
|
$sku = GoodsSku::query()->updateOrCreate(
|
||||||
['external_sku_id' => $info['external_sku_id'], 'is_combination' => 1],
|
['external_sku_id' => $info['external_sku_id'], 'is_combination' => 1],
|
||||||
['title' => $info['title'], 'goods_id' => 0, 'sku_code' => $info['external_sku_id']
|
['title' => $info['title'],'name' => $info['title'], 'goods_id' => 0, 'sku_code' => $info['external_sku_id']
|
||||||
, 'stock' => $stock, "sale_stock" => $saleStock, 'status' => $status]
|
, 'stock' => $stock, "sale_stock" => $saleStock, 'status' => $status]
|
||||||
);
|
);
|
||||||
CombinationGood::query()
|
CombinationGood::query()
|
||||||
|
|||||||
@ -54,11 +54,7 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log::info("组合时间监听:", [
|
|
||||||
"event" => (array)$event,
|
|
||||||
"combinationGoodsIds" => $combinationGoodsIds,
|
|
||||||
"combinationGoodsItemIds" => $combinationGoodsItemIds
|
|
||||||
]);
|
|
||||||
if ($combinationGoodsIds) {
|
if ($combinationGoodsIds) {
|
||||||
$combinationGoods = CombinationGood::query()
|
$combinationGoods = CombinationGood::query()
|
||||||
->with('goodsSku:id,stock')
|
->with('goodsSku:id,stock')
|
||||||
@ -77,7 +73,6 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue
|
|||||||
$updateIds[] = $goodsSku->id;
|
$updateIds[] = $goodsSku->id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log::info("updateIds:", $updateIds);
|
|
||||||
// 计算主商品库存
|
// 计算主商品库存
|
||||||
if ($combinationGoodsItemIds) {
|
if ($combinationGoodsItemIds) {
|
||||||
$goodsSkuIds = CombinationGood::query()
|
$goodsSkuIds = CombinationGood::query()
|
||||||
|
|||||||
@ -11,8 +11,8 @@ class GoodsType extends Model
|
|||||||
*/
|
*/
|
||||||
protected $hidden = ['deleted_at'];
|
protected $hidden = ['deleted_at'];
|
||||||
|
|
||||||
public function parent_type()
|
public function parentType()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(GoodsType::class, 'id', 'parent_id');
|
return $this->hasOne(GoodsType::class, 'id', 'parent_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,15 +19,17 @@ class GoodService
|
|||||||
{
|
{
|
||||||
public function saveDefaultGoodsByGoodType($typeId)
|
public function saveDefaultGoodsByGoodType($typeId)
|
||||||
{
|
{
|
||||||
$goodsType = GoodsType::query()->with("parent_type")->where('id', "=", $typeId)
|
$goodsType = GoodsType::query()->with("parentType")->where('id', "=", $typeId)
|
||||||
->first()->toArray();
|
->first()->toArray();
|
||||||
$params['type_id'] = $typeId;
|
$params['type_id'] = $typeId;
|
||||||
|
$parentName = "";
|
||||||
$params['goods_code'] = static::getChCode($goodsType['id']);
|
$params['goods_code'] = static::getChCode($goodsType['id']);
|
||||||
if (!empty($goodsType['parent_type']['id'])) {
|
if (!empty($goodsType['parent_type']['id'])) {
|
||||||
$params['goods_code'] .= "|" . static::getChCode($goodsType['parent_type']['id']);
|
$params['goods_code'] .= "Z". static::getChCode($goodsType['parent_type']['id']);
|
||||||
|
$parentName = $goodsType['parent_type']['name'] ?? '';
|
||||||
}
|
}
|
||||||
$saveData = $params;
|
$saveData = $params;
|
||||||
$saveData['title'] = $goodsType['name'] . " " . $goodsType['parent_type']['name'] ?? '';
|
$saveData['title'] = $goodsType['name'] . " " .$parentName;
|
||||||
return Goods::query()->firstOrCreate($params, $saveData);
|
return Goods::query()->firstOrCreate($params, $saveData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,13 +62,18 @@ class GoodService
|
|||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取非z的字符串
|
||||||
|
* @param $intValue
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function getChCode($intValue)
|
public function getChCode($intValue)
|
||||||
{
|
{
|
||||||
$ch = range('A', 'Z');
|
$ch = range('A', 'Y');
|
||||||
$result = '';
|
$result = '';
|
||||||
while ($intValue) {
|
while ($intValue) {
|
||||||
$result = $ch[$intValue % 26] . $result;
|
$result = $ch[$intValue % 25] . $result;
|
||||||
$intValue = intval($intValue / 26);
|
$intValue = intval($intValue / 25);
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,8 +34,7 @@ class GoodSkuService
|
|||||||
foreach ($sku['combination_goods'] as $combinationGoods) {
|
foreach ($sku['combination_goods'] as $combinationGoods) {
|
||||||
if (!isset($inventoryKeyBySkuIdMap[$combinationGoods["item_id"]])) {
|
if (!isset($inventoryKeyBySkuIdMap[$combinationGoods["item_id"]])) {
|
||||||
//没有盘点到的sku需要在原先的sku库存
|
//没有盘点到的sku需要在原先的sku库存
|
||||||
$inventoryKeyBySkuIdMap[$combinationGoods["item_id"]] = GoodsSku::query()
|
$inventoryKeyBySkuIdMap[$combinationGoods["item_id"]] = 0;
|
||||||
->where('id', $combinationGoods["item_id"])->pluck('stock')->first() ?? 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$inventoryKeyBySkuIdMap[$combinationGoods["item_id"]] += $combinationGoods['item_num'] * $sku['real_stock'];
|
$inventoryKeyBySkuIdMap[$combinationGoods["item_id"]] += $combinationGoods['item_num'] * $sku['real_stock'];
|
||||||
@ -61,7 +60,6 @@ class GoodSkuService
|
|||||||
"inventory_time" => $dateTime,
|
"inventory_time" => $dateTime,
|
||||||
"batch_number" => $batchNumber
|
"batch_number" => $batchNumber
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($inventoryKeyBySkuIdMap as $skuId => $realStock) {
|
foreach ($inventoryKeyBySkuIdMap as $skuId => $realStock) {
|
||||||
@ -71,9 +69,11 @@ class GoodSkuService
|
|||||||
]);
|
]);
|
||||||
$updateIds[] = $skuId;
|
$updateIds[] = $skuId;
|
||||||
}
|
}
|
||||||
|
DB::commit();
|
||||||
} catch (\Exception $exception) {
|
} catch (\Exception $exception) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
$this->info('盘点保存失败' . $exception->getMessage());
|
Log::error("库存盘点异常", ["error" => $exception->getMessage()]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量更新
|
// 批量更新
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Services\Service;
|
namespace App\Services\Statistic;
|
||||||
|
|
||||||
use App\Events\BatchStockUpdateEvent;
|
use App\Events\BatchStockUpdateEvent;
|
||||||
use App\Http\Enum\CacheKeyEnum;
|
use App\Http\Enum\CacheKeyEnum;
|
||||||
@ -9,6 +9,7 @@ use App\Models\BusinessOrderItem;
|
|||||||
use App\Models\CombinationGood;
|
use App\Models\CombinationGood;
|
||||||
use App\Models\DailyStockRecord;
|
use App\Models\DailyStockRecord;
|
||||||
use App\Models\GoodsSku;
|
use App\Models\GoodsSku;
|
||||||
|
use App\Models\LossRecords;
|
||||||
use App\Utils\DateTimeUtils;
|
use App\Utils\DateTimeUtils;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@ -33,8 +34,7 @@ class SaleDataService
|
|||||||
|
|
||||||
public static function skuSaleStatisticsByToday(Request $request)
|
public static function skuSaleStatisticsByToday(Request $request)
|
||||||
{
|
{
|
||||||
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
|
[$startTime,$endTime] = static::getTimeRange($request);
|
||||||
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
|
||||||
$orderItems = BusinessOrderItem::query()
|
$orderItems = BusinessOrderItem::query()
|
||||||
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
|
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
|
||||||
->select("business_order_items.external_sku_id"
|
->select("business_order_items.external_sku_id"
|
||||||
@ -61,8 +61,7 @@ class SaleDataService
|
|||||||
|
|
||||||
public static function skuSaleStatisticsByHistory(Request $request)
|
public static function skuSaleStatisticsByHistory(Request $request)
|
||||||
{
|
{
|
||||||
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
|
[$startTime,$endTime] = static::getTimeRange($request);
|
||||||
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
|
||||||
$dailyRecord = DailyStockRecord::query()
|
$dailyRecord = DailyStockRecord::query()
|
||||||
->select("sku_id", DB::raw("sum(order_goods_num) as goods_total")
|
->select("sku_id", DB::raw("sum(order_goods_num) as goods_total")
|
||||||
, DB::raw("sum(order_total_amount) as goods_total_amount"))
|
, DB::raw("sum(order_total_amount) as goods_total_amount"))
|
||||||
@ -100,7 +99,7 @@ class SaleDataService
|
|||||||
$startTime = Carbon::now()->subDays(8)->startOfDay()->toDateTimeString();
|
$startTime = Carbon::now()->subDays(8)->startOfDay()->toDateTimeString();
|
||||||
$endTime = Carbon::yesterday()->endOfDay()->toDateTimeString();
|
$endTime = Carbon::yesterday()->endOfDay()->toDateTimeString();
|
||||||
$dailyRecord = DailyStockRecord::query()->whereIn("sku_id", $skuIds)
|
$dailyRecord = DailyStockRecord::query()->whereIn("sku_id", $skuIds)
|
||||||
->whereBetween("created_at", [$startTime, $endTime])
|
->whereBetween("day", [$startTime, $endTime])
|
||||||
->get()->toArray();
|
->get()->toArray();
|
||||||
$dailyRecordGroupBySkuId = collect($dailyRecord)->groupBy("sku_id")->toArray();
|
$dailyRecordGroupBySkuId = collect($dailyRecord)->groupBy("sku_id")->toArray();
|
||||||
Log::info("dailyRecordGroupBySkuId", $dailyRecordGroupBySkuId);
|
Log::info("dailyRecordGroupBySkuId", $dailyRecordGroupBySkuId);
|
||||||
@ -146,10 +145,22 @@ class SaleDataService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function spuSaleStatisticsByToday(Request $request)
|
public static function getTimeRange(Request $request)
|
||||||
{
|
{
|
||||||
|
if(!empty($request->input("start_time"))&&!empty($request->input("start_time"))){
|
||||||
|
$startTime = Carbon::parse($request->input("start_time"))->toDateTimeString();
|
||||||
|
$endTime = Carbon::parse($request->input("end_time"))->toDateTimeString();
|
||||||
|
}else{
|
||||||
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
|
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
|
||||||
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
||||||
|
}
|
||||||
|
return [$startTime,$endTime];
|
||||||
|
}
|
||||||
|
|
||||||
|
public
|
||||||
|
static function spuSaleStatisticsByToday(Request $request)
|
||||||
|
{
|
||||||
|
[$startTime,$endTime] = static::getTimeRange($request);
|
||||||
//实时统计 sku维度
|
//实时统计 sku维度
|
||||||
$orderItems = BusinessOrderItem::query()
|
$orderItems = BusinessOrderItem::query()
|
||||||
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
|
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
|
||||||
@ -194,10 +205,10 @@ class SaleDataService
|
|||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function spuSaleStatisticsByHistoryCache(Request $request)
|
public
|
||||||
|
static function spuSaleStatisticsByHistoryCache(Request $request)
|
||||||
{
|
{
|
||||||
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
|
[$startTime,$endTime] = static::getTimeRange($request);
|
||||||
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
|
||||||
$cacheKey = CacheKeyEnum::SPU_STATISTIC_BY_DATE . $request->input("start_day") . "_" . $request->input("end_day");
|
$cacheKey = CacheKeyEnum::SPU_STATISTIC_BY_DATE . $request->input("start_day") . "_" . $request->input("end_day");
|
||||||
$expireTime = Carbon::now()->addHour();
|
$expireTime = Carbon::now()->addHour();
|
||||||
return Cache::remember($cacheKey, $expireTime, function () use ($startTime, $endTime) {
|
return Cache::remember($cacheKey, $expireTime, function () use ($startTime, $endTime) {
|
||||||
@ -211,12 +222,13 @@ class SaleDataService
|
|||||||
* @param $endTime
|
* @param $endTime
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function spuSaleStatisticsByHistory($startTime, $endTime)
|
public
|
||||||
|
static function spuSaleStatisticsByHistory($startTime, $endTime)
|
||||||
{
|
{
|
||||||
$dailyAllRecord = DailyStockRecord::query()
|
$dailyAllRecord = DailyStockRecord::query()
|
||||||
->select("sku_id", DB::raw("sum(order_goods_num) as goods_total")
|
->select("sku_id", DB::raw("sum(order_goods_num) as goods_total")
|
||||||
, DB::raw("sum(order_total_amount) as goods_total_amount"))
|
, DB::raw("sum(order_total_amount) as goods_total_amount"))
|
||||||
->whereBetween("created_at", [$startTime, $endTime])
|
->whereBetween("day", [$startTime, $endTime])
|
||||||
->groupBy("sku_id")
|
->groupBy("sku_id")
|
||||||
->having(DB::raw("sum(order_goods_num)"), ">", 0)
|
->having(DB::raw("sum(order_goods_num)"), ">", 0)
|
||||||
->get()->toArray();
|
->get()->toArray();
|
||||||
@ -244,13 +256,23 @@ class SaleDataService
|
|||||||
})->values()->toArray();
|
})->values()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function gmvStatistics(Request $request)
|
public
|
||||||
|
static function gmvStatistics(Request $request)
|
||||||
{
|
{
|
||||||
if (StaticTypeEnum::TODAY == $request->type) {
|
if (StaticTypeEnum::TODAY == $request->type) {
|
||||||
$startTime = Carbon::parse($request->input("start_day"))->startOfDay()->toDateTimeString();
|
[$startTime,$endTime] = static::getTimeRange($request);
|
||||||
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
$build = BusinessOrderItem::query();
|
||||||
$orderItems = BusinessOrderItem::query()
|
if (!empty($request->sku_id)) {
|
||||||
->select("business_order_items.external_sku_id", "goods_number", "already_cancel_number", "goods_amount", "created_at")
|
$externalSkuId = GoodsSku::query()->where("id", "=", $request->sku_id)
|
||||||
|
->pluck("external_sku_id")->first();
|
||||||
|
if (!empty($externalSkuId)) {
|
||||||
|
$build->where("external_sku_id", "=", $externalSkuId);
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$orderItems = $build->select("business_order_items.external_sku_id"
|
||||||
|
, "goods_number", "already_cancel_number", "goods_amount", "created_at")
|
||||||
->whereBetween("business_order_items.created_at", [$startTime, $endTime])
|
->whereBetween("business_order_items.created_at", [$startTime, $endTime])
|
||||||
->where("business_order_items.cancel_status", "=", 0)
|
->where("business_order_items.cancel_status", "=", 0)
|
||||||
->get()->toArray();
|
->get()->toArray();
|
||||||
@ -270,17 +292,41 @@ class SaleDataService
|
|||||||
})->sort()->values()->toArray();
|
})->sort()->values()->toArray();
|
||||||
} else {
|
} else {
|
||||||
//gmv 目前只统计历史数据 后续看看是否需要拓展
|
//gmv 目前只统计历史数据 后续看看是否需要拓展
|
||||||
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
|
[$startTime,$endTime] = static::getTimeRange($request);
|
||||||
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
|
$build = DailyStockRecord::query();
|
||||||
return DailyStockRecord::query()
|
if (!empty($request->sku_id)) {
|
||||||
->select("day", DB::raw("sum(order_total_amount) as goods_total_amount")
|
$build->where("sku_id", "=", $request->sku_id);
|
||||||
|
}
|
||||||
|
return $build->select("day", DB::raw("sum(order_total_amount) as goods_total_amount")
|
||||||
, DB::raw("sum(order_goods_num) as goods_total"))
|
, DB::raw("sum(order_goods_num) as goods_total"))
|
||||||
->whereBetween("created_at", [$startTime, $endTime])
|
->whereBetween("day", [$startTime, $endTime])
|
||||||
->groupBy("day")->orderBy("day")
|
->groupBy("day")->orderBy("day")
|
||||||
->get()->toArray();
|
->get()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public
|
||||||
|
static function lossRecordStatistics(Request $request)
|
||||||
|
{
|
||||||
|
$startTime = Carbon::parse($request->input("start_time"))->toDateTimeString();
|
||||||
|
$endTime = Carbon::parse($request->input("end_time"))->toDateTimeString();
|
||||||
|
$build = LossRecords::query();
|
||||||
|
if (!empty($request->sku_id)) {
|
||||||
|
$externalSkuId = GoodsSku::query()->where("id", "=", $request->sku_id)
|
||||||
|
->pluck("external_sku_id")->first();
|
||||||
|
if (!empty($externalSkuId)) {
|
||||||
|
$build->where("external_sku_id", "=", $externalSkuId);
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $build->select("date", DB::raw("sum(num) as total_num")
|
||||||
|
, DB::raw("sum(num*cost) as total_loss_amount"))
|
||||||
|
->whereBetween("date", [$startTime, $endTime])
|
||||||
|
->groupBy("date")->orderBy("date")
|
||||||
|
->get()->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -16,4 +16,29 @@ class GeneratorUtils
|
|||||||
}
|
}
|
||||||
return $code.date("YmdHis") . rand(1000, 10000);
|
return $code.date("YmdHis") . rand(1000, 10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function generateCombinationGoodNumber($goods)
|
||||||
|
{
|
||||||
|
$code = "";
|
||||||
|
foreach ($goods as $v){
|
||||||
|
$code.=static::getChCode($v['item_id'])."Z".static::getChCode($v['item_num'])."Z";
|
||||||
|
}
|
||||||
|
rtrim($code,"Z");
|
||||||
|
return $code;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取非z的字符串
|
||||||
|
* @param $intValue
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getChCode($intValue)
|
||||||
|
{
|
||||||
|
$ch = range('A', 'Y');
|
||||||
|
$result = '';
|
||||||
|
while ($intValue) {
|
||||||
|
$result = $ch[$intValue % 25] . $result;
|
||||||
|
$intValue = intval($intValue / 25);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -304,6 +304,11 @@ return [
|
|||||||
'name' => '删除',
|
'name' => '删除',
|
||||||
'parent_id' => 6,
|
'parent_id' => 6,
|
||||||
],
|
],
|
||||||
|
'users.user_roles' => [
|
||||||
|
'id' => 65,
|
||||||
|
'name' => '获取用户权限',
|
||||||
|
'parent_id' => 6,
|
||||||
|
],
|
||||||
// 系统管理
|
// 系统管理
|
||||||
'SYSTEM_MANAGE' => [
|
'SYSTEM_MANAGE' => [
|
||||||
'id' => 7,
|
'id' => 7,
|
||||||
@ -626,13 +631,13 @@ return [
|
|||||||
],
|
],
|
||||||
'spu_sale_statistics' => [
|
'spu_sale_statistics' => [
|
||||||
'id' => 182,
|
'id' => 182,
|
||||||
'name' => 'spu销售统计',
|
'name' => '品种销售统计',
|
||||||
'parent_id' => 18,
|
'parent_id' => 18,
|
||||||
'show' => 1,
|
'show' => 1,
|
||||||
],
|
],
|
||||||
'data_center.spu_sale_statistics' => [
|
'data_center.spu_sale_statistics' => [
|
||||||
'id' => 1820,
|
'id' => 1820,
|
||||||
'name' => 'spu销售统计接口',
|
'name' => '品种销售统计接口',
|
||||||
'parent_id' => 18
|
'parent_id' => 18
|
||||||
],
|
],
|
||||||
'gmv_statistics' => [
|
'gmv_statistics' => [
|
||||||
@ -646,6 +651,17 @@ return [
|
|||||||
'name' => 'gmv统计',
|
'name' => 'gmv统计',
|
||||||
'parent_id' => 18,
|
'parent_id' => 18,
|
||||||
],
|
],
|
||||||
|
'loss_record_statistics' => [
|
||||||
|
'id' => 184,
|
||||||
|
'name' => '报损统计',
|
||||||
|
'parent_id' => 18,
|
||||||
|
'show' => 1,
|
||||||
|
],
|
||||||
|
'data_center.loss_record_statistics' => [
|
||||||
|
'id' => 1840,
|
||||||
|
'name' => '报损统计接口',
|
||||||
|
'parent_id' => 184,
|
||||||
|
],
|
||||||
// 订单列表
|
// 订单列表
|
||||||
'PLAT_AFTER_SALE_ORDER_LIST' => [
|
'PLAT_AFTER_SALE_ORDER_LIST' => [
|
||||||
'id' => 141,
|
'id' => 141,
|
||||||
|
|||||||
@ -17,6 +17,7 @@ use App\Http\Controllers\Supplier\LossRecordController;
|
|||||||
use App\Http\Controllers\Supplier\PurchaseRecordController;
|
use App\Http\Controllers\Supplier\PurchaseRecordController;
|
||||||
use App\Http\Controllers\Business\BusinessAfterSaleOrderController;
|
use App\Http\Controllers\Business\BusinessAfterSaleOrderController;
|
||||||
use App\Http\Controllers\Goods\GoodsTypesController;
|
use App\Http\Controllers\Goods\GoodsTypesController;
|
||||||
|
use App\Http\Controllers\User\UsersController;
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| API Routes
|
| API Routes
|
||||||
@ -91,6 +92,7 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () {
|
|||||||
Route::get('data_center/sale_statistics', [DataCenterController::class, 'saleStatistics'])->name('data_center.sale_statistics');
|
Route::get('data_center/sale_statistics', [DataCenterController::class, 'saleStatistics'])->name('data_center.sale_statistics');
|
||||||
Route::get('data_center/spu_sale_statistics', [DataCenterController::class, 'spuSaleStatistics'])->name('data_center.spu_sale_statistics');
|
Route::get('data_center/spu_sale_statistics', [DataCenterController::class, 'spuSaleStatistics'])->name('data_center.spu_sale_statistics');
|
||||||
Route::get('data_center/gmv_statistics', [DataCenterController::class, 'gmvStatistics'])->name('data_center.gmv_statistics');
|
Route::get('data_center/gmv_statistics', [DataCenterController::class, 'gmvStatistics'])->name('data_center.gmv_statistics');
|
||||||
|
Route::get('data_center/loss_record_statistics', [DataCenterController::class, 'lossRecordStatistics'])->name('data_center.loss_record_statistics');
|
||||||
|
|
||||||
Route::get('plat_after_sale_orders', [BusinessAfterSaleOrderController::class, 'index'])->name('plat_after_sale_orders.index');
|
Route::get('plat_after_sale_orders', [BusinessAfterSaleOrderController::class, 'index'])->name('plat_after_sale_orders.index');
|
||||||
//获取树
|
//获取树
|
||||||
@ -100,6 +102,8 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () {
|
|||||||
Route::post('purchase_record/purchase_batch_store', [PurchaseRecordController::class, 'purchaseBatchStore'])->name('purchase_record.purchase_batch_store');
|
Route::post('purchase_record/purchase_batch_store', [PurchaseRecordController::class, 'purchaseBatchStore'])->name('purchase_record.purchase_batch_store');
|
||||||
Route::post('daily_stock_record/inventory_batch_store', [DailyStockRecordController::class, 'inventoryBatchStore'])->name('daily_stock_record.inventory_batch_store');
|
Route::post('daily_stock_record/inventory_batch_store', [DailyStockRecordController::class, 'inventoryBatchStore'])->name('daily_stock_record.inventory_batch_store');
|
||||||
|
|
||||||
|
Route::get('user/user_roles', [UsersController::class, 'userRoles'])->name('users.user_roles');
|
||||||
|
|
||||||
});
|
});
|
||||||
Route::get('stock/goods_skus', [GoodsSkusController::class, 'stockNum'])->middleware('auth:api');
|
Route::get('stock/goods_skus', [GoodsSkusController::class, 'stockNum'])->middleware('auth:api');
|
||||||
Route::get('goods/filter/{title}', [GoodsCombinationController::class, 'goodsSkus'])->middleware('auth:api');
|
Route::get('goods/filter/{title}', [GoodsCombinationController::class, 'goodsSkus'])->middleware('auth:api');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user