Merge remote-tracking branch 'origin/main' into feature/WuYongJie-store-password-direct-display
This commit is contained in:
commit
c50fe5c40f
@ -189,15 +189,12 @@ SQL);
|
||||
*/
|
||||
private function storeMatchesFilters(array $row, array $filters): bool
|
||||
{
|
||||
foreach (['erp_store_name', 'store_id', 'profit_center', 'store_manager', 'department_manager', 'company_type'] as $key) {
|
||||
foreach (['erp_store_name', 'store_name', 'store_id', 'profit_center', 'store_manager', 'department_manager', 'company_type'] as $key) {
|
||||
$expected = trim((string) ($filters[$key] ?? ''));
|
||||
if ($expected === '') {
|
||||
continue;
|
||||
}
|
||||
// 页面“店铺ID(唯一值)”展示 ERP 店铺名称,筛选按同一列匹配。
|
||||
$actual = $key === 'store_id'
|
||||
? trim((string) ($row['erp_store_name'] ?? ''))
|
||||
: trim((string) ($row[$key] ?? ''));
|
||||
$actual = trim((string) ($row[$key] ?? ''));
|
||||
if ($actual !== $expected) {
|
||||
return false;
|
||||
}
|
||||
@ -231,7 +228,7 @@ SQL);
|
||||
{
|
||||
$rows = $query->select(<<<SQL
|
||||
SELECT s.Id AS id, s.sotreId AS store_id, s.openTime AS opened_at, s.renewalTime AS renewed_at,
|
||||
s.erpShopName AS erp_store_name, s.unifiedSocialCreditCode AS unified_social_credit_code,
|
||||
s.erpShopName AS erp_store_name, s.shopName AS store_name, s.unifiedSocialCreditCode AS unified_social_credit_code,
|
||||
c.businessLicenseName AS company_name, c.businessLicenseType AS company_type,
|
||||
s.trademarkNumber AS trademark_number, t.trademarkName AS trademark_name, s.platform AS platform,
|
||||
s.responsibleDepartment AS profit_center, NULL AS store_manager, NULL AS department_manager,
|
||||
@ -432,6 +429,7 @@ SELECT
|
||||
s.openTime AS opened_at,
|
||||
s.renewalTime AS renewed_at,
|
||||
s.erpShopName AS erp_store_name,
|
||||
s.shopName AS store_name,
|
||||
s.unifiedSocialCreditCode AS unified_social_credit_code,
|
||||
c.businessLicenseName AS company_name,
|
||||
c.businessLicenseType AS company_type,
|
||||
|
||||
@ -192,6 +192,7 @@ return [
|
||||
'empty' => '店铺维度报表尚未完成共享数据导入。',
|
||||
'fields' => [
|
||||
['name' => 'erp_store_name', 'label' => 'ERP系统店铺名称'],
|
||||
['name' => 'store_name', 'label' => '店铺名称'],
|
||||
['name' => 'store_id', 'label' => '店铺ID(唯一值)'],
|
||||
['name' => 'profit_center', 'label' => '店铺所属利润中心'],
|
||||
['name' => 'store_manager', 'label' => '店铺负责人'],
|
||||
|
||||
@ -110,8 +110,8 @@ SQL)
|
||||
{
|
||||
foreach ([
|
||||
'erp_store_name' => 's.erpShopName',
|
||||
// 页面“店铺ID(唯一值)”列展示的就是 ERP 店铺名称,筛选按同一列匹配。
|
||||
'store_id' => 's.erpShopName',
|
||||
'store_name' => 's.shopName',
|
||||
'store_id' => 's.sotreId',
|
||||
'profit_center' => 's.responsibleDepartment',
|
||||
'store_manager' => 's.shopHead',
|
||||
'department_manager' => 's.customerDeptManager',
|
||||
@ -225,6 +225,7 @@ s.sotreId AS store_id,
|
||||
s.openTime AS opened_at,
|
||||
s.renewalTime AS renewed_at,
|
||||
s.erpShopName AS erp_store_name,
|
||||
s.shopName AS store_name,
|
||||
s.unifiedSocialCreditCode AS unified_social_credit_code,
|
||||
c.businessLicenseName AS company_name,
|
||||
c.businessLicenseType AS company_type,
|
||||
|
||||
@ -49,7 +49,7 @@ class StoreReportRepository
|
||||
$rules[$prefix . '_to'][] = 'after_or_equal:' . $prefix . '_from';
|
||||
}
|
||||
}
|
||||
foreach (['erp_store_name', 'store_id', 'profit_center', 'store_manager', 'department_manager', 'entity', 'company_type'] as $key) {
|
||||
foreach (['erp_store_name', 'store_name', 'store_id', 'profit_center', 'store_manager', 'department_manager', 'entity', 'company_type'] as $key) {
|
||||
$rules[$key] = ['nullable', 'string', 'max:191'];
|
||||
}
|
||||
$rules['status'] = ['nullable', 'string', 'in:0,3,6'];
|
||||
@ -125,7 +125,6 @@ class StoreReportRepository
|
||||
$expiresAt = $this->date($period['expires_at'] ?? null, self::DEFAULT_EXPIRES_AT);
|
||||
$row = [
|
||||
...$store,
|
||||
'store_id' => $storeName,
|
||||
'status' => $this->status($store['store_status'] ?? null),
|
||||
'can_change' => $this->canChange($store['platform'] ?? null),
|
||||
'entity' => $period['company_name'] ?: ($store['company_name'] ?? null),
|
||||
|
||||
@ -388,7 +388,7 @@
|
||||
<form method="GET" action="{{ request()->url() }}" class="installation-filter-bar" aria-label="店铺维度报表筛选查询栏">
|
||||
@php
|
||||
$storeFilterTextFields = [
|
||||
['name' => 'erp_store_name', 'label' => '店铺名称:'],
|
||||
['name' => 'store_name', 'label' => '店铺名称:'],
|
||||
['name' => 'store_id', 'label' => '店铺ID:'],
|
||||
['name' => 'profit_center', 'label' => '利润中心:'],
|
||||
['name' => 'store_manager', 'label' => '店铺负责人:'],
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
],
|
||||
'store-report' => [
|
||||
'title' => '店铺维度报表', 'description' => '查看店铺销量及历史主体归属',
|
||||
'columns' => ['ERP系统店铺名称', '店铺ID(唯一值)', '店铺所属利润中心', '店铺负责人', '部门负责人', '开店时间', '状态', '能否变更', '主体', '公司类型', '生效时间', '失效时间', '期间销量', '1月销量', '2月销量', '3月销量', '4月销量', '5月销量', '6月销量', '7月销量', '8月销量', '9月销量', '10月销量', '11月销量', '12月销量'],
|
||||
'columns' => ['ERP系统店铺名称', '店铺名称', '店铺ID(唯一值)', '店铺所属利润中心', '店铺负责人', '部门负责人', '开店时间', '状态', '能否变更', '主体', '公司类型', '生效时间', '失效时间', '期间销量', '1月销量', '2月销量', '3月销量', '4月销量', '5月销量', '6月销量', '7月销量', '8月销量', '9月销量', '10月销量', '11月销量', '12月销量'],
|
||||
],
|
||||
];
|
||||
$definition = $definitions[$slug] ?? ['title' => $page['title'] ?? '业务页面', 'description' => '', 'columns' => [], 'rows' => []];
|
||||
|
||||
@ -227,8 +227,9 @@ class ManagementCrudTest extends FeatureTestCase
|
||||
$service = Mockery::mock(UpstreamBusinessInformation::class);
|
||||
$service->shouldReceive('paginate')->once()->with('store-management', 'store-report', 50)->andReturn(
|
||||
new LengthAwarePaginator([[
|
||||
'erp_store_name' => '测试店铺',
|
||||
'store_id' => '测试店铺',
|
||||
'erp_store_name' => 'ERP测试店铺',
|
||||
'store_name' => '前台测试店铺',
|
||||
'store_id' => 'SHOP-001',
|
||||
'profit_center' => '运营中心A',
|
||||
'store_manager' => '店铺负责人',
|
||||
'department_manager' => '部门负责人',
|
||||
@ -252,7 +253,9 @@ class ManagementCrudTest extends FeatureTestCase
|
||||
$response
|
||||
->assertOk()
|
||||
->assertSeeText('店铺维度报表')
|
||||
->assertSeeText('测试店铺')
|
||||
->assertSeeText('ERP测试店铺')
|
||||
->assertSeeText('前台测试店铺')
|
||||
->assertSeeText('SHOP-001')
|
||||
->assertSeeText('测试主体')
|
||||
->assertSeeText('2026-07-01')
|
||||
->assertSeeText('存续中')
|
||||
@ -261,7 +264,7 @@ class ManagementCrudTest extends FeatureTestCase
|
||||
->assertSeeText('共享镜像');
|
||||
|
||||
preg_match_all('/<th(?:\s|>)/', $response->getContent(), $headers);
|
||||
$this->assertCount(26, $headers[0]);
|
||||
$this->assertCount(27, $headers[0]);
|
||||
}
|
||||
|
||||
public function testTrademarkInformationShowsReadOnlyUpstreamRows(): void
|
||||
@ -385,7 +388,7 @@ class ManagementCrudTest extends FeatureTestCase
|
||||
['section' => 'company-management', 'page' => 'personnel-inventory', 'headers' => ['人员名称', '税务局密码', '可担任公司数量']],
|
||||
['section' => 'company-management', 'page' => 'company-progress', 'headers' => ['公司进度表字段尚未定义']],
|
||||
['section' => 'trademark-management', 'page' => 'trademark-progress', 'headers' => ['商标号', '是否完成', '办理人']],
|
||||
['section' => 'store-management', 'page' => 'store-report', 'headers' => ['店铺ID(唯一值)', '1月销量', '12月销量']],
|
||||
['section' => 'store-management', 'page' => 'store-report', 'headers' => ['ERP系统店铺名称', '店铺名称', '店铺ID(唯一值)', '1月销量', '12月销量']],
|
||||
['section' => 'store-management', 'page' => 'change-progress', 'headers' => ['接替公司', '完成时间', '办理人']],
|
||||
['section' => 'other', 'page' => 'todos', 'headers' => ['待办编号', '是否逾期', '关闭日期']],
|
||||
['section' => 'other', 'page' => 'warnings', 'headers' => ['风险等级', '影响金额', '处理证据']],
|
||||
|
||||
@ -65,6 +65,10 @@ class BusinessInformationMirrorRepositoryTest extends TestCase
|
||||
$store = $this->repository->paginate('store-information.read', 1, 20);
|
||||
$trademarks = $this->repository->paginate('trademark-information.read', 1, 20);
|
||||
$receivingStores = $this->repository->receivingAccountStores();
|
||||
$filteredStores = $this->repository->allStores([
|
||||
'store_name' => '上游店铺名',
|
||||
'store_id' => 'STORE-8',
|
||||
]);
|
||||
|
||||
$this->assertSame(3, $companies['total']);
|
||||
$this->assertSame(1, $companies['data'][0]['id']);
|
||||
@ -74,6 +78,9 @@ class BusinessInformationMirrorRepositoryTest extends TestCase
|
||||
$this->assertSame('有效商标', $trademarks['data'][0]['trademark_name']);
|
||||
$this->assertSame('2027-01-01', $companies['data'][0]['subscribed_at']);
|
||||
$this->assertSame('STORE-8', $store['data'][0]['store_id']);
|
||||
$this->assertSame('上游店铺名', $store['data'][0]['store_name']);
|
||||
$this->assertCount(1, $filteredStores);
|
||||
$this->assertSame([], $this->repository->allStores(['store_id' => '测试店']));
|
||||
$this->assertSame('2027-08-14', $store['data'][0]['renewed_at']);
|
||||
$this->assertSame('负责人', $store['data'][0]['store_manager']);
|
||||
$this->assertSame('上游店铺名', $receivingStores[0]['shop_name']);
|
||||
|
||||
@ -82,7 +82,7 @@ class StoreReportRepositoryTest extends TestCase
|
||||
$this->insertBill('店铺A', '2027-01-01 10:00:00', 5);
|
||||
|
||||
$rows = $this->repository->rows([
|
||||
['erp_store_name' => '店铺A', 'company_name' => '旧主体', 'store_status' => '3'],
|
||||
['erp_store_name' => '店铺A', 'store_name' => '前台店铺A', 'store_id' => 'SHOP-001', 'company_name' => '旧主体', 'store_status' => '3'],
|
||||
], 2026);
|
||||
|
||||
$this->assertSame(['主体甲', '主体乙'], array_column($rows, 'entity'));
|
||||
@ -91,6 +91,8 @@ class StoreReportRepositoryTest extends TestCase
|
||||
$this->assertSame([100.0, 0.0], array_column($rows, 'sales_05'));
|
||||
$this->assertSame([0.0, 70.0], array_column($rows, 'sales_07'));
|
||||
$this->assertSame(['关店中', '关店中'], array_column($rows, 'status'));
|
||||
$this->assertSame(['前台店铺A', '前台店铺A'], array_column($rows, 'store_name'));
|
||||
$this->assertSame(['SHOP-001', 'SHOP-001'], array_column($rows, 'store_id'));
|
||||
$this->assertSame(['2026-07-01', '存续中'], array_column($rows, 'invalid_at'));
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user