diff --git a/src/app/mock-api/apps/report/statistics/api.ts b/src/app/mock-api/apps/report/statistics/api.ts
index 69b7bee..ad55288 100644
--- a/src/app/mock-api/apps/report/statistics/api.ts
+++ b/src/app/mock-api/apps/report/statistics/api.ts
@@ -1,13 +1,19 @@
import { Injectable } from '@angular/core';
import { assign, cloneDeep } from 'lodash-es';
import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api';
-import { statisticss as statisticssData } from './data';
+import { statistics as statisticsData } from './data';
+import { casinoStatistics as casinoStatisticsData } from './data';
+import { slotStatistics as slotStatisticsData } from './data';
+import { powerballStatistics as powerballStatisticsData } from './data';
@Injectable({
providedIn: 'root',
})
export class ReportStatisticsMockApi {
- private _statisticss: any[] = statisticssData;
+ private _statistics: any[] = statisticsData;
+ private _casinoStatistics: any[] = casinoStatisticsData;
+ private _slotStatistics: any[] = slotStatisticsData;
+ private _powerballStatistics: any[] = powerballStatisticsData;
/**
* Constructor
@@ -26,24 +32,28 @@ export class ReportStatisticsMockApi {
*/
registerHandlers(): void {
// -----------------------------------------------------------------------------------------------------
- // @ Statisticss - GET
+ // @ Statistics - GET
// -----------------------------------------------------------------------------------------------------
this._fuseMockApiService
- .onGet('api/apps/report/statistics/statisticss', 300)
+ .onGet('api/apps/report/statistics', 300)
.reply(({ request }) => {
// Get available queries
const search = request.params.get('search');
- const sort = request.params.get('sort') || 'name';
+ const sort = request.params.get('sort') || 'casinoUse';
const order = request.params.get('order') || 'asc';
const page = parseInt(request.params.get('page') ?? '1', 10);
const size = parseInt(request.params.get('size') ?? '10', 10);
- // Clone the statisticss
- let statisticss: any[] | null = cloneDeep(this._statisticss);
+ // Clone the statistics
+ let statistics: any[] | null = cloneDeep(this._statistics);
- // Sort the statisticss
- if (sort === 'sku' || sort === 'name' || sort === 'active') {
- statisticss.sort((a, b) => {
+ // Sort the statistics
+ if (
+ sort === 'casinoUse' ||
+ sort === 'slotUse' ||
+ sort === 'powerballUse'
+ ) {
+ statistics.sort((a, b) => {
const fieldA = a[sort].toString().toUpperCase();
const fieldB = b[sort].toString().toUpperCase();
return order === 'asc'
@@ -51,15 +61,15 @@ export class ReportStatisticsMockApi {
: fieldB.localeCompare(fieldA);
});
} else {
- statisticss.sort((a, b) =>
+ statistics.sort((a, b) =>
order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort]
);
}
// If search exists...
if (search) {
- // Filter the statisticss
- statisticss = statisticss.filter(
+ // Filter the statistics
+ statistics = statistics.filter(
(contact: any) =>
contact.name &&
contact.name.toLowerCase().includes(search.toLowerCase())
@@ -67,32 +77,32 @@ export class ReportStatisticsMockApi {
}
// Paginate - Start
- const statisticssLength = statisticss.length;
+ const statisticsLength = statistics.length;
// Calculate pagination details
const begin = page * size;
- const end = Math.min(size * (page + 1), statisticssLength);
- const lastPage = Math.max(Math.ceil(statisticssLength / size), 1);
+ const end = Math.min(size * (page + 1), statisticsLength);
+ const lastPage = Math.max(Math.ceil(statisticsLength / size), 1);
// Prepare the pagination object
let pagination = {};
// If the requested page number is bigger than
// the last possible page number, return null for
- // statisticss but also send the last possible page so
+ // statistics but also send the last possible page so
// the app can navigate to there
if (page > lastPage) {
- statisticss = null;
+ statistics = null;
pagination = {
lastPage,
};
} else {
// Paginate the results by size
- statisticss = statisticss.slice(begin, end);
+ statistics = statistics.slice(begin, end);
// Prepare the pagination mock-api
pagination = {
- length: statisticssLength,
+ length: statisticsLength,
size: size,
page: page,
lastPage: lastPage,
@@ -105,7 +115,7 @@ export class ReportStatisticsMockApi {
return [
200,
{
- statisticss,
+ statistics,
pagination,
},
];
@@ -120,16 +130,73 @@ export class ReportStatisticsMockApi {
// Get the id from the params
const id = request.params.get('id');
- // Clone the statisticss
- const statisticss = cloneDeep(this._statisticss);
+ // Clone the statistics
+ const statistics = cloneDeep(this._statistics);
// Find the statistics
- const statistics = statisticss.find((item: any) => item.id === id);
+ statistics.find((item: any) => item.id === id);
// Return the response
return [200, statistics];
});
+ // -----------------------------------------------------------------------------------------------------
+ // @ CasinoStatistics - GET
+ // -----------------------------------------------------------------------------------------------------
+ this._fuseMockApiService
+ .onGet('api/apps/report/statistics/casino-statistics')
+ .reply(({ request }) => {
+ // Get the type from the params
+ const id = request.params.get('type');
+
+ // Clone the statistics
+ const casinoStatistics = cloneDeep(this._statistics);
+
+ // Find the statistics
+ casinoStatistics.find((item: any) => item.type === id);
+
+ // Return the response
+ return [200, casinoStatistics];
+ });
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ SlotStatistics - GET
+ // -----------------------------------------------------------------------------------------------------
+ this._fuseMockApiService
+ .onGet('api/apps/report/statistics/slot-statistics')
+ .reply(({ request }) => {
+ // Get the type from the params
+ const id = request.params.get('type');
+
+ // Clone the statistics
+ const slotStatistics = cloneDeep(this._statistics);
+
+ // Find the statistics
+ slotStatistics.find((item: any) => item.type === id);
+
+ // Return the response
+ return [200, slotStatistics];
+ });
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ PowerballStatistics - GET
+ // -----------------------------------------------------------------------------------------------------
+ this._fuseMockApiService
+ .onGet('api/apps/report/statistics/powerball-statistics')
+ .reply(({ request }) => {
+ // Get the type from the params
+ const id = request.params.get('type');
+
+ // Clone the statistics
+ const powerballStatistics = cloneDeep(this._statistics);
+
+ // Find the statistics
+ powerballStatistics.find((item: any) => item.type === id);
+
+ // Return the response
+ return [200, powerballStatistics];
+ });
+
// -----------------------------------------------------------------------------------------------------
// @ Statistics - POST
// -----------------------------------------------------------------------------------------------------
@@ -160,7 +227,7 @@ export class ReportStatisticsMockApi {
};
// Unshift the new statistics
- this._statisticss.unshift(newStatistics);
+ this._statistics.unshift(newStatistics);
// Return the response
return [200, newStatistics];
@@ -180,13 +247,13 @@ export class ReportStatisticsMockApi {
let updatedStatistics = null;
// Find the statistics and update it
- this._statisticss.forEach((item, index, statisticss) => {
+ this._statistics.forEach((item, index, statistics) => {
if (item.id === id) {
// Update the statistics
- statisticss[index] = assign({}, statisticss[index], statistics);
+ statistics[index] = assign({}, statistics[index], statistics);
// Store the updated Statistics
- updatedStatistics = statisticss[index];
+ updatedStatistics = statistics[index];
}
});
@@ -204,9 +271,9 @@ export class ReportStatisticsMockApi {
const id = request.params.get('id');
// Find the statistics and delete it
- this._statisticss.forEach((item, index) => {
+ this._statistics.forEach((item, index) => {
if (item.id === id) {
- this._statisticss.splice(index, 1);
+ this._statistics.splice(index, 1);
}
});
diff --git a/src/app/mock-api/apps/report/statistics/data.ts b/src/app/mock-api/apps/report/statistics/data.ts
index ab7f328..f7c7563 100644
--- a/src/app/mock-api/apps/report/statistics/data.ts
+++ b/src/app/mock-api/apps/report/statistics/data.ts
@@ -1,6 +1,111 @@
/* eslint-disable */
-export const statisticss = [
+export const statistics = [
+ {
+ id: '7eb7c859-1347-4317-96b6-9476a7e2ba3c',
+ gameName: '라이브카지노',
+ casinoUse: 2,
+ casinoBetting: 1183000,
+ casinoCancel: 10000,
+ casinoAvailable: 1140000,
+ casinoWinning: 979050,
+ casinoWinLoss: 193950,
+ casinoCommission: 14810,
+ casinoBetWinCalculate: 179140,
+ slotUse: 2,
+ slotBetting: 225000,
+ slotCancel: 0,
+ slotAvailable: 225000,
+ slotWinning: 114280,
+ slotWinLoss: 110720,
+ slotTotalCommission: 11250,
+ slotBetWinCalculate: 99470,
+ powerballUse: 0,
+ powerballBetting: 0,
+ powerballWinning: 0,
+ powerballWinLoss: 0,
+ powerballCommission: 0,
+ powerballBetWinCalculate: 0,
+ totalUse: 4,
+ totalAvailable: 1365000,
+ totalBetting: 1408000,
+ totalCancel: 10000,
+ totalWinLoss: 304670,
+ totalCommission: 26060,
+ totalBetWinCalculate: 278610,
+ },
+];
+export const casinoStatistics = [
+ {
+ id: '7eb7c859-1347-4317-96b6-9476a7e2ba3c',
+ gameName: '슬롯',
+ casinoUse: 2,
+ casinoBetting: 1183000,
+ casinoCancel: 10000,
+ casinoAvailable: 1140000,
+ casinoWinning: 979050,
+ casinoWinLoss: 193950,
+ casinoCommission: 14810,
+ casinoBetWinCalculate: 179140,
+ slotUse: 2,
+ slotBetting: 225000,
+ slotCancel: 0,
+ slotAvailable: 225000,
+ slotWinning: 114280,
+ slotWinLoss: 110720,
+ slotTotalCommission: 11250,
+ slotBetWinCalculate: 99470,
+ powerballUse: 0,
+ powerballBetting: 0,
+ powerballWinning: 0,
+ powerballWinLoss: 0,
+ powerballCommission: 0,
+ powerballBetWinCalculate: 0,
+ totalUse: 4,
+ totalAvailable: 1365000,
+ totalBetting: 1408000,
+ totalCancel: 10000,
+ totalWinLoss: 304670,
+ totalCommission: 26060,
+ totalBetWinCalculate: 278610,
+ },
+];
+export const slotStatistics = [
+ {
+ id: '7eb7c859-1347-4317-96b6-9476a7e2ba3c',
+ gameName: '파워볼',
+ casinoUse: 2,
+ casinoBetting: 1183000,
+ casinoCancel: 10000,
+ casinoAvailable: 1140000,
+ casinoWinning: 979050,
+ casinoWinLoss: 193950,
+ casinoCommission: 14810,
+ casinoBetWinCalculate: 179140,
+ slotUse: 2,
+ slotBetting: 225000,
+ slotCancel: 0,
+ slotAvailable: 225000,
+ slotWinning: 114280,
+ slotWinLoss: 110720,
+ slotTotalCommission: 11250,
+ slotBetWinCalculate: 99470,
+ powerballUse: 0,
+ powerballBetting: 0,
+ powerballWinning: 0,
+ powerballWinLoss: 0,
+ powerballCommission: 0,
+ powerballBetWinCalculate: 0,
+ totalUse: 4,
+ totalAvailable: 1365000,
+ totalBetting: 1408000,
+ totalCancel: 10000,
+ totalWinLoss: 304670,
+ totalCommission: 26060,
+ totalBetWinCalculate: 278610,
+ },
+];
+export const powerballStatistics = [
{
id: '7eb7c859-1347-4317-96b6-9476a7e2ba3c',
casinoUse: 2,
diff --git a/src/app/modules/admin/report/statistics/components/list.component.html b/src/app/modules/admin/report/statistics/components/list.component.html
index c61ef9e..36eff38 100644
--- a/src/app/modules/admin/report/statistics/components/list.component.html
+++ b/src/app/modules/admin/report/statistics/components/list.component.html
@@ -24,22 +24,8 @@
*ngIf="__isSearchOpened"
class="relative flex flex-col sm:flex-row flex-0 sm:items-center sm:justify-between py-4 px-6 md:px-8 border-b"
>
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -82,102 +97,70 @@
-
+
0; else noStatistics">
-
요율
-
-
카지노->캐쉬
+
구분
+
이용회원
+
유효배팅
+
배팅금액
+
당첨금액
+
취소
+
윈로스(A)
+
수수료(B)
+
뱃윈정산(A-B)
-
-
+
-
-
요율
-
-
-
-
-
-
+
{{ statistics.gameName }}
+
{{ statistics.casinoUse }}명
+
{{ statistics.casinoAvailable }}원
+
{{ statistics.casinoBetting }}원
+
+ {{ statistics.casinoWinning }}원
-
+
+ {{ statistics.casinoCancel }}원
+
+
+ {{ statistics.casinoWinLoss }}원
+
+
+ {{ statistics.casinoCommission }}P
+
+
+ {{ statistics.casinoBetWinCalculate }}원
+
+
+
{{ statistics.gameName }}
+
{{ statistics.casinoUse }}명
+
{{ statistics.casinoAvailable }}원
+
{{ statistics.casinoBetting }}원
+
+ {{ statistics.casinoWinning }}원
+
+
+ {{ statistics.casinoCancel }}원
+
+
+ {{ statistics.casinoWinLoss }}원
+
+
+ {{ statistics.casinoCommission }}P
+
+
+ {{ statistics.casinoBetWinCalculate }}원
+
+
diff --git a/src/app/modules/admin/report/statistics/components/list.component.ts b/src/app/modules/admin/report/statistics/components/list.component.ts
index dac93d0..a5f2a32 100644
--- a/src/app/modules/admin/report/statistics/components/list.component.ts
+++ b/src/app/modules/admin/report/statistics/components/list.component.ts
@@ -42,18 +42,22 @@ import { Router } from '@angular/router';
/* language=SCSS */
`
.inventory-grid {
- grid-template-columns: 60px auto 40px;
+ /* 구분 이용 유효 배팅 당첨 취소 */
+ grid-template-columns: 100px 100px auto 100px 100px 100px;
@screen sm {
- grid-template-columns: 60px 60px 60px 60px 60px 60px auto 60px;
+ /* 구분 이용 유효 배팅 당첨 취소 윈로스 수수료 뱃윈정산 */
+ grid-template-columns: 100px 100px auto 100px 100px 100px 100px 100px 100px;
}
@screen md {
- grid-template-columns: 60px 60px 60px 60px 60px 60px auto 60px 60px;
+ /* 구분 이용 유효 배팅 당첨 취소 윈로스 수수료 뱃윈정산 */
+ grid-template-columns: 100px 100px auto 100px 100px 100px 100px 100px 100px;
}
@screen lg {
- grid-template-columns: 60px 70px 70px 70px 70px 100px 60px 60px auto 60px 60px 60px 60px;
+ /* 구분 이용 유효 배팅 당첨 취소 윈로스 수수료 뱃윈정산 */
+ grid-template-columns: 100px 100px auto 100px 100px 100px 100px 100px 100px;
}
}
`,
@@ -66,7 +70,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy {
@ViewChild(MatPaginator) private _paginator!: MatPaginator;
@ViewChild(MatSort) private _sort!: MatSort;
- statisticss$!: Observable;
+ statistics$!: Observable;
users$!: Observable;
__isSearchOpened = false;
@@ -108,7 +112,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy {
});
// Get the products
- this.statisticss$ = this._statisticsService.statisticss$;
+ this.statistics$ = this._statisticsService.statistics$;
}
/**
@@ -139,7 +143,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy {
.pipe(
switchMap(() => {
this.isLoading = true;
- return this._statisticsService.getStatisticss(
+ return this._statisticsService.getStatistics(
this._paginator.pageIndex,
this._paginator.pageSize,
this._sort.active,
diff --git a/src/app/modules/admin/report/statistics/components/view.component.html b/src/app/modules/admin/report/statistics/components/view.component.html
new file mode 100644
index 0000000..e1ea46a
--- /dev/null
+++ b/src/app/modules/admin/report/statistics/components/view.component.html
@@ -0,0 +1,4 @@
+
+
diff --git a/src/app/modules/admin/report/statistics/components/view.component.ts b/src/app/modules/admin/report/statistics/components/view.component.ts
new file mode 100644
index 0000000..82c933b
--- /dev/null
+++ b/src/app/modules/admin/report/statistics/components/view.component.ts
@@ -0,0 +1,183 @@
+import {
+ AfterViewInit,
+ ChangeDetectionStrategy,
+ ChangeDetectorRef,
+ Component,
+ OnDestroy,
+ OnInit,
+ ViewChild,
+ ViewEncapsulation,
+} from '@angular/core';
+import {
+ FormBuilder,
+ FormControl,
+ FormGroup,
+ Validators,
+} from '@angular/forms';
+import { MatCheckboxChange } from '@angular/material/checkbox';
+import { MatPaginator } from '@angular/material/paginator';
+import { MatSort } from '@angular/material/sort';
+import {
+ debounceTime,
+ map,
+ merge,
+ Observable,
+ Subject,
+ switchMap,
+ takeUntil,
+} from 'rxjs';
+import { fuseAnimations } from '@fuse/animations';
+import { FuseConfirmationService } from '@fuse/services/confirmation';
+
+import { User } from 'app/modules/admin/member/user/models/user';
+import { UserService } from 'app/modules/admin/member/user/services/user.service';
+
+@Component({
+ selector: 'customer-view',
+ templateUrl: './view.component.html',
+ styles: [
+ /* language=SCSS */
+ `
+ .inventory-grid {
+ grid-template-columns: 48px auto 40px;
+
+ @screen sm {
+ grid-template-columns: 48px auto 112px 72px;
+ }
+
+ @screen md {
+ grid-template-columns: 48px 112px auto 112px 72px;
+ }
+
+ @screen lg {
+ grid-template-columns: 48px 112px auto 112px 96px 96px 72px;
+ }
+ }
+ `,
+ ],
+ encapsulation: ViewEncapsulation.None,
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ animations: fuseAnimations,
+})
+export class ViewComponent implements OnInit, AfterViewInit, OnDestroy {
+ @ViewChild(MatPaginator) private _paginator!: MatPaginator;
+ @ViewChild(MatSort) private _sort!: MatSort;
+
+ isLoading = false;
+ searchInputControl = new FormControl();
+ selectedProductForm!: FormGroup;
+ selectedUser?: User;
+
+ private _unsubscribeAll: Subject = new Subject();
+
+ /**
+ * Constructor
+ */
+ constructor(
+ private _changeDetectorRef: ChangeDetectorRef,
+ private _fuseConfirmationService: FuseConfirmationService,
+ private _formBuilder: FormBuilder,
+ private _userService: UserService
+ ) {}
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ Lifecycle hooks
+ // -----------------------------------------------------------------------------------------------------
+
+ /**
+ * On init
+ */
+ ngOnInit(): void {
+ this.selectedProductForm = this._formBuilder.group({
+ id: [''],
+ signinId: [{ value: '', disabled: true }],
+ signinPw: [{ value: '' }],
+ exchangePw: [''],
+ description: [''],
+ tags: [[]],
+ nickname: [{ value: '', disabled: true }],
+ ownCash: [''],
+ phoneNumber: [''],
+ level: [''],
+ status: [''],
+ isExcahngeMoney: [''],
+ bankname: [''],
+ accountNumber: [''],
+ accountHolder: [''],
+ comp: [''],
+ coupon: [''],
+ recommender: [{ value: '', disabled: true }],
+ changeSite: [''],
+ recommendCount: [''],
+ hodingGameMoney: [{ value: '0', disabled: true }],
+ memo: [''],
+ bacaraRate: [],
+ rulletRate: [],
+ dragonRate: [],
+ etcRate: [],
+ slotRate: [],
+ casinoRusingRate: [],
+ slotRusingRate: [],
+ });
+
+ // Get the User
+ this._userService.user$
+ .pipe(takeUntil(this._unsubscribeAll))
+ .subscribe((user: User | undefined) => {
+ if (!user) {
+ return;
+ }
+ this.selectedUser = user;
+
+ this.selectedProductForm.patchValue(user);
+ // Mark for check
+ this._changeDetectorRef.markForCheck();
+ });
+
+ /* this.user$ = this._userService.user$; */
+ }
+
+ /**
+ * After view init
+ */
+ ngAfterViewInit(): void {}
+
+ /**
+ * On destroy
+ */
+ ngOnDestroy(): void {
+ // Unsubscribe from all subscriptions
+ this._unsubscribeAll.next(null);
+ this._unsubscribeAll.complete();
+ }
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ Public methods
+ // -----------------------------------------------------------------------------------------------------
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ Private methods
+ // -----------------------------------------------------------------------------------------------------
+
+ /**
+ * Create product
+ */
+ __createProduct(): void {}
+
+ /**
+ * Toggle product details
+ *
+ * @param productId
+ */
+ __toggleDetails(productId: string): void {}
+
+ /**
+ * Track by function for ngFor loops
+ *
+ * @param index
+ * @param item
+ */
+ __trackByFn(index: number, item: any): any {
+ return item.id || index;
+ }
+}
diff --git a/src/app/modules/admin/report/statistics/models/casino-statistics.ts b/src/app/modules/admin/report/statistics/models/casino-statistics.ts
new file mode 100644
index 0000000..ddacf5e
--- /dev/null
+++ b/src/app/modules/admin/report/statistics/models/casino-statistics.ts
@@ -0,0 +1,32 @@
+export interface CasinoStatistics {
+ id: string;
+ casinoUse?: number;
+ slotUse?: number;
+ powerballUse?: number;
+ casinoBetting?: number; // 카지노배팅
+ casinoCancel?: number; // 카지노취소
+ casinoAvailable?: number; // 카지노유효
+ casinoWinning?: number; // 카지노당첨
+ casinoWinLoss?: number; // 카지노윈로스(A)
+ casinoCommission?: number; // 카지노수수료(B)
+ casinoBetWinCalculate?: number; // 카지노벳윈정산 (A-B)
+ slotBetting?: number; // 슬롯배팅
+ slotCancel?: number; // 슬롯취소
+ slotAvailable?: number; // 슬롯유효
+ slotWinning?: number; // 슬롯당첨
+ slotWinLoss?: number; // 슬롯윈로스(D)
+ slotTotalCommission?: number; // 슬롯전체수수료(E)
+ slotBetWinCalculate?: number; // 슬롯벳윈정산(D-E)
+ powerballBetting?: number; // 파워볼배팅
+ powerballWinning?: number; // 파워볼당첨
+ powerballWinLoss?: number; // 파워볼윈로스(H)
+ powerballCommission?: number; // 파워볼수수료(I)
+ powerballBetWinCalculate?: number; // 파워볼벳윈정산(H-I)
+ totalUse?: number; // 총이용회원
+ totalAvailable?: number; // 총유효배팅
+ totalBetting?: number; // 총배팅
+ totalCancel?: number; // 총취소
+ totalWinLoss?: number; // 총윈로스
+ totalCommission?: number; // 총수수료
+ totalBetWinCalculate?: number; // 총벳윈정산
+}
diff --git a/src/app/modules/admin/report/statistics/models/powerball-statistics.ts b/src/app/modules/admin/report/statistics/models/powerball-statistics.ts
new file mode 100644
index 0000000..daee810
--- /dev/null
+++ b/src/app/modules/admin/report/statistics/models/powerball-statistics.ts
@@ -0,0 +1,32 @@
+export interface PowerballStatistics {
+ id: string;
+ casinoUse?: number;
+ slotUse?: number;
+ powerballUse?: number;
+ casinoBetting?: number; // 카지노배팅
+ casinoCancel?: number; // 카지노취소
+ casinoAvailable?: number; // 카지노유효
+ casinoWinning?: number; // 카지노당첨
+ casinoWinLoss?: number; // 카지노윈로스(A)
+ casinoCommission?: number; // 카지노수수료(B)
+ casinoBetWinCalculate?: number; // 카지노벳윈정산 (A-B)
+ slotBetting?: number; // 슬롯배팅
+ slotCancel?: number; // 슬롯취소
+ slotAvailable?: number; // 슬롯유효
+ slotWinning?: number; // 슬롯당첨
+ slotWinLoss?: number; // 슬롯윈로스(D)
+ slotTotalCommission?: number; // 슬롯전체수수료(E)
+ slotBetWinCalculate?: number; // 슬롯벳윈정산(D-E)
+ powerballBetting?: number; // 파워볼배팅
+ powerballWinning?: number; // 파워볼당첨
+ powerballWinLoss?: number; // 파워볼윈로스(H)
+ powerballCommission?: number; // 파워볼수수료(I)
+ powerballBetWinCalculate?: number; // 파워볼벳윈정산(H-I)
+ totalUse?: number; // 총이용회원
+ totalAvailable?: number; // 총유효배팅
+ totalBetting?: number; // 총배팅
+ totalCancel?: number; // 총취소
+ totalWinLoss?: number; // 총윈로스
+ totalCommission?: number; // 총수수료
+ totalBetWinCalculate?: number; // 총벳윈정산
+}
diff --git a/src/app/modules/admin/report/statistics/models/slot-statistics.ts b/src/app/modules/admin/report/statistics/models/slot-statistics.ts
new file mode 100644
index 0000000..e79f221
--- /dev/null
+++ b/src/app/modules/admin/report/statistics/models/slot-statistics.ts
@@ -0,0 +1,32 @@
+export interface SlotStatistics {
+ id: string;
+ casinoUse?: number;
+ slotUse?: number;
+ powerballUse?: number;
+ casinoBetting?: number; // 카지노배팅
+ casinoCancel?: number; // 카지노취소
+ casinoAvailable?: number; // 카지노유효
+ casinoWinning?: number; // 카지노당첨
+ casinoWinLoss?: number; // 카지노윈로스(A)
+ casinoCommission?: number; // 카지노수수료(B)
+ casinoBetWinCalculate?: number; // 카지노벳윈정산 (A-B)
+ slotBetting?: number; // 슬롯배팅
+ slotCancel?: number; // 슬롯취소
+ slotAvailable?: number; // 슬롯유효
+ slotWinning?: number; // 슬롯당첨
+ slotWinLoss?: number; // 슬롯윈로스(D)
+ slotTotalCommission?: number; // 슬롯전체수수료(E)
+ slotBetWinCalculate?: number; // 슬롯벳윈정산(D-E)
+ powerballBetting?: number; // 파워볼배팅
+ powerballWinning?: number; // 파워볼당첨
+ powerballWinLoss?: number; // 파워볼윈로스(H)
+ powerballCommission?: number; // 파워볼수수료(I)
+ powerballBetWinCalculate?: number; // 파워볼벳윈정산(H-I)
+ totalUse?: number; // 총이용회원
+ totalAvailable?: number; // 총유효배팅
+ totalBetting?: number; // 총배팅
+ totalCancel?: number; // 총취소
+ totalWinLoss?: number; // 총윈로스
+ totalCommission?: number; // 총수수료
+ totalBetWinCalculate?: number; // 총벳윈정산
+}
diff --git a/src/app/modules/admin/report/statistics/models/statistics.ts b/src/app/modules/admin/report/statistics/models/statistics.ts
index 1d95e1e..d2d027f 100644
--- a/src/app/modules/admin/report/statistics/models/statistics.ts
+++ b/src/app/modules/admin/report/statistics/models/statistics.ts
@@ -1,5 +1,6 @@
export interface Statistics {
id: string;
+ gameName?: string; // 구분
casinoUse?: number;
slotUse?: number;
powerballUse?: number;
diff --git a/src/app/modules/admin/report/statistics/resolvers/statistics.resolver.ts b/src/app/modules/admin/report/statistics/resolvers/statistics.resolver.ts
index af676e0..79407fd 100644
--- a/src/app/modules/admin/report/statistics/resolvers/statistics.resolver.ts
+++ b/src/app/modules/admin/report/statistics/resolvers/statistics.resolver.ts
@@ -8,6 +8,9 @@ import {
import { catchError, Observable, throwError } from 'rxjs';
import { Statistics } from '../models/statistics';
+import { CasinoStatistics } from '../models/casino-statistics';
+import { SlotStatistics } from '../models/slot-statistics';
+import { PowerballStatistics } from '../models/powerball-statistics';
import { StatisticsPagination } from '../models/statistics-pagination';
import { StatisticsService } from '../services/statistics.service';
@@ -27,6 +30,12 @@ export class StatisticsResolver implements Resolve {
// @ Public methods
// -----------------------------------------------------------------------------------------------------
+ /**
+ * Resolver
+ *
+ * @param route
+ * @param state
+ */
/**
* Resolver
*
@@ -36,9 +45,65 @@ export class StatisticsResolver implements Resolve {
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
- ): Observable {
+ ): Observable<{
+ pagination: StatisticsPagination;
+ statistics: Statistics[];
+ }> {
+ return this._statisticsService.getStatistics();
+ }
+ // resolve(
+ // route: ActivatedRouteSnapshot,
+ // state: RouterStateSnapshot
+ // ): Observable {
+ // return this._statisticsService
+ // .getStatisticsById(route.paramMap.get('id'))
+ // .pipe(
+ // // Error here means the requested product is not available
+ // catchError((error) => {
+ // // Log the error
+ // console.error(error);
+
+ // // Get the parent url
+ // const parentUrl = state.url.split('/').slice(0, -1).join('/');
+
+ // // Navigate to there
+ // this._router.navigateByUrl(parentUrl);
+
+ // // Throw an error
+ // return throwError(error);
+ // })
+ // );
+ // }
+}
+
+@Injectable({
+ providedIn: 'root',
+})
+export class CasinoStatisticsResolver implements Resolve {
+ /**
+ * Constructor
+ */
+ constructor(
+ private _statisticsService: StatisticsService,
+ private _router: Router
+ ) {}
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ Public methods
+ // -----------------------------------------------------------------------------------------------------
+
+ /**
+ * Resolver
+ *
+ * @param route
+ * @param state
+ */
+ resolve(
+ route: ActivatedRouteSnapshot,
+ state: RouterStateSnapshot
+ ): Observable {
return this._statisticsService
- .getStatisticsById(route.paramMap.get('id'))
+ .getCasinoStatisticsByType(route.paramMap.get('type'))
.pipe(
// Error here means the requested product is not available
catchError((error) => {
@@ -57,15 +122,17 @@ export class StatisticsResolver implements Resolve {
);
}
}
-
@Injectable({
providedIn: 'root',
})
-export class StatisticssResolver implements Resolve {
+export class SlotStatisticsResolver implements Resolve {
/**
* Constructor
*/
- constructor(private _statisticsService: StatisticsService) {}
+ constructor(
+ private _statisticsService: StatisticsService,
+ private _router: Router
+ ) {}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
@@ -80,10 +147,70 @@ export class StatisticssResolver implements Resolve {
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
- ): Observable<{
- pagination: StatisticsPagination;
- statisticss: Statistics[];
- }> {
- return this._statisticsService.getStatisticss();
+ ): Observable {
+ return this._statisticsService
+ .getSlotStatisticsByType(route.paramMap.get('type'))
+ .pipe(
+ // Error here means the requested product is not available
+ catchError((error) => {
+ // Log the error
+ console.error(error);
+
+ // Get the parent url
+ const parentUrl = state.url.split('/').slice(0, -1).join('/');
+
+ // Navigate to there
+ this._router.navigateByUrl(parentUrl);
+
+ // Throw an error
+ return throwError(error);
+ })
+ );
+ }
+}
+@Injectable({
+ providedIn: 'root',
+})
+export class PowerballStatisticsResolver implements Resolve {
+ /**
+ * Constructor
+ */
+ constructor(
+ private _statisticsService: StatisticsService,
+ private _router: Router
+ ) {}
+
+ // -----------------------------------------------------------------------------------------------------
+ // @ Public methods
+ // -----------------------------------------------------------------------------------------------------
+
+ /**
+ * Resolver
+ *
+ * @param route
+ * @param state
+ */
+ resolve(
+ route: ActivatedRouteSnapshot,
+ state: RouterStateSnapshot
+ ): Observable {
+ return this._statisticsService
+ .getPowerballStatisticsByType(route.paramMap.get('type'))
+ .pipe(
+ // Error here means the requested product is not available
+ catchError((error) => {
+ // Log the error
+ console.error(error);
+
+ // Get the parent url
+ const parentUrl = state.url.split('/').slice(0, -1).join('/');
+
+ // Navigate to there
+ this._router.navigateByUrl(parentUrl);
+
+ // Throw an error
+ return throwError(error);
+ })
+ );
}
}
diff --git a/src/app/modules/admin/report/statistics/services/statistics.service.ts b/src/app/modules/admin/report/statistics/services/statistics.service.ts
index f2e2c72..4c08f90 100644
--- a/src/app/modules/admin/report/statistics/services/statistics.service.ts
+++ b/src/app/modules/admin/report/statistics/services/statistics.service.ts
@@ -13,6 +13,9 @@ import {
} from 'rxjs';
import { Statistics } from '../models/statistics';
+import { CasinoStatistics } from '../models/casino-statistics';
+import { SlotStatistics } from '../models/slot-statistics';
+import { PowerballStatistics } from '../models/powerball-statistics';
import { StatisticsPagination } from '../models/statistics-pagination';
@Injectable({
@@ -23,10 +26,18 @@ export class StatisticsService {
private __pagination = new BehaviorSubject(
undefined
);
- private __statistics = new BehaviorSubject(undefined);
- private __statisticss = new BehaviorSubject(
+ private __statistics = new BehaviorSubject(
undefined
);
+ private __casinoStatistics = new BehaviorSubject<
+ CasinoStatistics | undefined
+ >(undefined);
+ private __slotStatistics = new BehaviorSubject(
+ undefined
+ );
+ private __powerballStatistics = new BehaviorSubject<
+ PowerballStatistics | undefined
+ >(undefined);
/**
* Constructor
@@ -43,27 +54,45 @@ export class StatisticsService {
get pagination$(): Observable {
return this.__pagination.asObservable();
}
-
/**
* Getter for statistics
*/
- get statistics$(): Observable {
+ get statistics$(): Observable {
return this.__statistics.asObservable();
}
/**
- * Getter for statisticss
+ * Getter for casino-statistics
*/
- get statisticss$(): Observable {
- return this.__statisticss.asObservable();
+ get casinoStatistics$(): Observable {
+ return this.__casinoStatistics.asObservable();
}
-
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
- * Get statisticss
+ * Getter for casino-statistics
+ */
+ get slotStatistics$(): Observable {
+ return this.__slotStatistics.asObservable();
+ }
+ // -----------------------------------------------------------------------------------------------------
+ // @ Public methods
+ // -----------------------------------------------------------------------------------------------------
+
+ /**
+ * Getter for casino-statistics
+ */
+ get powerballStatistics$(): Observable {
+ return this.__powerballStatistics.asObservable();
+ }
+ // -----------------------------------------------------------------------------------------------------
+ // @ Public methods
+ // -----------------------------------------------------------------------------------------------------
+
+ /**
+ * Get statistics
*
*
* @param page
@@ -72,21 +101,21 @@ export class StatisticsService {
* @param order
* @param search
*/
- getStatisticss(
+ getStatistics(
page: number = 0,
size: number = 10,
- sort: string = 'name',
+ sort: string = 'casinoUse',
order: 'asc' | 'desc' | '' = 'asc',
search: string = ''
): Observable<{
pagination: StatisticsPagination;
- statisticss: Statistics[];
+ statistics: Statistics[];
}> {
return this._httpClient
.get<{
pagination: StatisticsPagination;
- statisticss: Statistics[];
- }>('api/apps/report/statistics/statisticss', {
+ statistics: Statistics[];
+ }>('api/apps/report/statistics', {
params: {
page: '' + page,
size: '' + size,
@@ -98,7 +127,7 @@ export class StatisticsService {
.pipe(
tap((response) => {
this.__pagination.next(response.pagination);
- this.__statisticss.next(response.statisticss);
+ this.__statistics.next(response.statistics);
})
);
}
@@ -106,13 +135,12 @@ export class StatisticsService {
/**
* Get product by id
*/
- getStatisticsById(id: string | null): Observable {
- return this.__statisticss.pipe(
+ getStatisticsById(id: string | null): Observable {
+ return this.__statistics.pipe(
take(1),
- map((statisticss) => {
+ map((statistics) => {
// Find the product
- const statistics =
- statisticss?.find((item) => item.id === id) || undefined;
+ statistics?.find((item) => item.id === id) || undefined;
// Update the product
this.__statistics.next(statistics);
@@ -130,20 +158,95 @@ export class StatisticsService {
);
}
+ /**
+ * Get product by type
+ */
+ getCasinoStatisticsByType(type: string | null): Observable {
+ return this.__statistics.pipe(
+ take(1),
+ map((statistics) => {
+ // Find the product
+ const casinoStatistics =
+ statistics?.find((item) => item.id === type) || undefined;
+
+ // Update the product
+ this.__casinoStatistics.next(casinoStatistics);
+
+ // Return the product
+ return casinoStatistics;
+ }),
+ switchMap((product) => {
+ if (!product) {
+ return throwError('Could not found product with id of ' + type + '!');
+ }
+
+ return of(product);
+ })
+ );
+ }
+ getSlotStatisticsByType(type: string | null): Observable {
+ return this.__statistics.pipe(
+ take(1),
+ map((statistics) => {
+ // Find the product
+ const slotStatistics =
+ statistics?.find((item) => item.id === type) || undefined;
+
+ // Update the product
+ this.__slotStatistics.next(slotStatistics);
+
+ // Return the product
+ return slotStatistics;
+ }),
+ switchMap((product) => {
+ if (!product) {
+ return throwError('Could not found product with id of ' + type + '!');
+ }
+
+ return of(product);
+ })
+ );
+ }
+ getPowerballStatisticsByType(
+ type: string | null
+ ): Observable {
+ return this.__statistics.pipe(
+ take(1),
+ map((statistics) => {
+ // Find the product
+ const powerballStatistics =
+ statistics?.find((item) => item.id === type) || undefined;
+
+ // Update the product
+ this.__powerballStatistics.next(powerballStatistics);
+
+ // Return the product
+ return powerballStatistics;
+ }),
+ switchMap((product) => {
+ if (!product) {
+ return throwError('Could not found product with id of ' + type + '!');
+ }
+
+ return of(product);
+ })
+ );
+ }
+
/**
* Create product
*/
createStatistics(): Observable {
- return this.statisticss$.pipe(
+ return this.statistics$.pipe(
take(1),
- switchMap((statisticss) =>
+ switchMap((statistics) =>
this._httpClient
.post('api/apps/report/statistics/product', {})
.pipe(
map((newStatistics) => {
- // Update the statisticss with the new product
- if (!!statisticss) {
- this.__statisticss.next([newStatistics, ...statisticss]);
+ // Update the statistics with the new product
+ if (!!statistics) {
+ this.__statistics.next([newStatistics, ...statistics]);
}
// Return the new product
diff --git a/src/app/modules/admin/report/statistics/statistics.routing.ts b/src/app/modules/admin/report/statistics/statistics.routing.ts
index 9a4b51c..eedda3a 100644
--- a/src/app/modules/admin/report/statistics/statistics.routing.ts
+++ b/src/app/modules/admin/report/statistics/statistics.routing.ts
@@ -3,7 +3,7 @@ import { Route } from '@angular/router';
import { ListComponent } from './components/list.component';
import { ViewComponent } from '../../member/user/components/view.component';
-import { StatisticssResolver } from './resolvers/statistics.resolver';
+import { StatisticsResolver } from './resolvers/statistics.resolver';
import { UserResolver } from '../../member/user/resolvers/user.resolver';
export const statisticsRoutes: Route[] = [
@@ -11,7 +11,7 @@ export const statisticsRoutes: Route[] = [
path: '',
component: ListComponent,
resolve: {
- statisticss: StatisticssResolver,
+ statistics: StatisticsResolver,
},
},
{