diff --git a/lib/common/api/product_api.dart b/lib/common/api/product_api.dart index ff483db..8e4d927 100644 --- a/lib/common/api/product_api.dart +++ b/lib/common/api/product_api.dart @@ -44,24 +44,32 @@ abstract class ProductApi { } /// 超市 spu - static Future?> supermarketSpu( - dynamic pa) async { + static Future supermarketSpu( + dynamic pa, + ) async { final res = await HttpManage().dio.post( - "supermarket/supermarketSpu/ad/selectListAll", - queryParameters: pa, + "/supermarket/supermarketSpu/ad/selectListAll", + queryParameters: { + "current": pa["current"] ?? 1, + "size": pa["size"] ?? 100, + }, + data: pa, ); if (res.data == null) return null; - return res.data?.map((e) => ServiceSupermarketSpuPage.fromJson(e)).toList(); + return ServiceSupermarketSpuPage.fromJson(res.data); } /// 超市 spu 详情 - static Future?> supermarketSupDetial( - dynamic pa) async { + static Future?> supermarketSupDetial( + dynamic pa, + ) async { final res = await HttpManage().dio.get( - "supermarket/supermarketSpu/ad/SpuDetails", + "/supermarket/supermarketSpu/ad/SpuDetails", queryParameters: pa, ); if (res.data == null) return null; - return res.data?.map((e) => ServiceSupermarketSkuPage.fromJson(e)).toList(); + return res.data + ?.map((e) => ServiceSupermarketSku.fromJson(e)) + .toList(); } } diff --git a/lib/common/models/api/product_api_models.dart b/lib/common/models/api/product_api_models.dart index 0185656..7f23f24 100644 --- a/lib/common/models/api/product_api_models.dart +++ b/lib/common/models/api/product_api_models.dart @@ -120,13 +120,13 @@ class ServiceSupermarketSpu { String? picUrl; /// 剩余库存 - String? stock; + double? stock; /// 商品性质(字典) String? productNature; /// 零售价 - String? retailPrice; + int? retailPrice; /// 促销价 int? promotionPrice; @@ -323,20 +323,6 @@ class ServiceSupermarketSkuPackage { Map toJson() => _$ServiceSupermarketSkuPackageToJson(this); } -@JsonSerializable() -class ServiceSupermarketSkuPage extends ServicePageBase { - List? records; - - ServiceSupermarketSkuPage({ - this.records, - }); - - factory ServiceSupermarketSkuPage.fromJson(Map json) => - _$ServiceSupermarketSkuPageFromJson(json); - - Map toJson() => _$ServiceSupermarketSkuPageToJson(this); -} - // ************************************************************************** // 超市 sku end // ************************************************************************** diff --git a/lib/common/models/api/product_api_models.g.dart b/lib/common/models/api/product_api_models.g.dart index e14fd57..ef0a2cc 100644 --- a/lib/common/models/api/product_api_models.g.dart +++ b/lib/common/models/api/product_api_models.g.dart @@ -67,9 +67,9 @@ ServiceSupermarketSpu _$ServiceSupermarketSpuFromJson( spec: json['spec'] as String?, categoryId: json['categoryId'] as String?, picUrl: json['picUrl'] as String?, - stock: json['stock'] as String?, + stock: (json['stock'] as num?)?.toDouble(), productNature: json['productNature'] as String?, - retailPrice: json['retailPrice'] as String?, + retailPrice: (json['retailPrice'] as num?)?.toInt(), promotionPrice: (json['promotionPrice'] as num?)?.toInt(), salesCount: (json['salesCount'] as num?)?.toInt(), ); @@ -208,26 +208,3 @@ Map _$ServiceSupermarketSkuPackageToJson( 'retailPrice': instance.retailPrice, 'promotionPrice': instance.promotionPrice, }; - -ServiceSupermarketSkuPage _$ServiceSupermarketSkuPageFromJson( - Map json) => - ServiceSupermarketSkuPage( - records: (json['records'] as List?) - ?.map( - (e) => ServiceSupermarketSku.fromJson(e as Map)) - .toList(), - ) - ..current = (json['current'] as num).toInt() - ..pages = (json['pages'] as num).toInt() - ..size = (json['size'] as num).toInt() - ..total = (json['total'] as num).toInt(); - -Map _$ServiceSupermarketSkuPageToJson( - ServiceSupermarketSkuPage instance) => - { - 'current': instance.current, - 'pages': instance.pages, - 'size': instance.size, - 'total': instance.total, - 'records': instance.records, - }; diff --git a/lib/common/models/database/database_enum_models.dart b/lib/common/models/database/database_enum_models.dart index b00140e..ad72faf 100644 --- a/lib/common/models/database/database_enum_models.dart +++ b/lib/common/models/database/database_enum_models.dart @@ -124,3 +124,17 @@ enum WalletType implements BaseEnum { const WalletType(this.code, this.title); } + +/// 商品性质 +enum SupermarketNature implements BaseEnum { + DEFAULT("1", "普通商品"), + WEIGHT("2", "电子称称重商品"), + ; + + @override + final String code; + @override + final String title; + + const SupermarketNature(this.code, this.title); +} diff --git a/lib/common/services/database/dao/supermarket_code_dao.dart b/lib/common/services/database/dao/supermarket_code_dao.dart new file mode 100644 index 0000000..07c0f9a --- /dev/null +++ b/lib/common/services/database/dao/supermarket_code_dao.dart @@ -0,0 +1,28 @@ +import 'package:common_utils/common_utils.dart'; +import 'package:floor/floor.dart'; +import 'package:get/get.dart'; + +import 'package:pj_supermarket_cloud/common/index.dart'; + +// supermarket_code +@dao +abstract class SupermarketCodeDao { + Future delBySpuIds(List spuIds) async { + if (ObjectUtil.isEmptyList(spuIds)) return -1; + final app = Get.find(); + final database = app.dataBase.database; + final placeholders = List.generate( + spuIds.length, + (index) => '?', + ).join(', '); + final sql = ''' + DELETE FROM supermarket_code + WHERE + spuId IN ($placeholders) + '''; + return await database.rawUpdate(sql, [...spuIds]); + } + + @insert + Future batchSave(List changeList); +} diff --git a/lib/common/services/database/dao/supermarket_sku_dao.dart b/lib/common/services/database/dao/supermarket_sku_dao.dart index d360fb1..16222db 100644 --- a/lib/common/services/database/dao/supermarket_sku_dao.dart +++ b/lib/common/services/database/dao/supermarket_sku_dao.dart @@ -1,7 +1,28 @@ +import 'package:common_utils/common_utils.dart'; import 'package:floor/floor.dart'; +import 'package:get/get.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; // supermarket_sku @dao -abstract class SupermarketSkuDao {} +abstract class SupermarketSkuDao { + Future delBySpuIds(List spuIds) async { + if (ObjectUtil.isEmptyList(spuIds)) return -1; + final app = Get.find(); + final database = app.dataBase.database; + final placeholders = List.generate( + spuIds.length, + (index) => '?', + ).join(', '); + final sql = ''' + DELETE FROM supermarket_sku + WHERE + spuId IN ($placeholders) + '''; + return await database.rawUpdate(sql, [...spuIds]); + } + + @insert + Future batchSave(List changeList); +} diff --git a/lib/common/services/database/dao/supermarket_spu_dao.dart b/lib/common/services/database/dao/supermarket_spu_dao.dart index 26efb8c..07015c7 100644 --- a/lib/common/services/database/dao/supermarket_spu_dao.dart +++ b/lib/common/services/database/dao/supermarket_spu_dao.dart @@ -1,4 +1,6 @@ +import 'package:common_utils/common_utils.dart'; import 'package:floor/floor.dart'; +import 'package:get/get.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; @@ -12,12 +14,12 @@ abstract class SupermarketSpuDao { WHERE supermarket_spu.delFlag = 0 AND (:classifyServiceUniqueCode = '-1' OR supermarket_spu.classifyServiceUniqueCode = :classifyServiceUniqueCode) - ORDER BY classify.sort, supermarket_spu.price + ORDER BY classify.sort ''') Future> getAll(String classifyServiceUniqueCode); @Query(""" - SELECT DISTINCT COUNT(0) FROM canteen_spu + SELECT DISTINCT COUNT(0) FROM supermarket_spu WHERE delFlag = 0 """) @@ -30,7 +32,7 @@ abstract class SupermarketSpuDao { WHERE supermarket_spu.delFlag = 0 AND (:classifyServiceUniqueCode = '-1' OR supermarket_spu.classifyServiceUniqueCode = :classifyServiceUniqueCode) - ORDER BY classify.sort, supermarket_spu.price + ORDER BY classify.sort LIMIT :pageSize OFFSET :offset ''') Future> getAllPage( @@ -38,4 +40,28 @@ abstract class SupermarketSpuDao { int pageSize, int offset, ); + + @Query(''' + SELECT * FROM supermarket_spu WHERE delFlag = 0 AND serviceUniqueCode = :code + ''') + Future getByCode(String code); + + @update + Future batchEdit(List changeList); + + @insert + Future batchSave(List changeList); + + Future delByIds(List codes) async { + if (ObjectUtil.isEmptyList(codes)) return -1; + final app = Get.find(); + final database = app.dataBase.database; + final placeholders = List.generate(codes.length, (index) => '?').join(', '); + final sql = ''' + UPDATE supermarket_spu SET delFlag = 1 + WHERE + serviceUniqueCode IN ($placeholders) + '''; + return await database.rawUpdate(sql, [...codes]); + } } diff --git a/lib/common/services/database/database.dart b/lib/common/services/database/database.dart index c1ab665..dee1237 100644 --- a/lib/common/services/database/database.dart +++ b/lib/common/services/database/database.dart @@ -12,6 +12,7 @@ const entities = [ CanteenSpuEntity, SupermarketSkuEntity, SupermarketSpuEntity, + SupermarketCodeEntity, ShopCardEntity, ClassifyEntity, PrintHistoryEntity, @@ -28,6 +29,7 @@ const typeConverters = [ OrderPayTypeConverter, SysTypeConverter, PrintStatusConverter, + SupermarketNatureConverter, ListIntConverter, BoolConverter, ]; @@ -39,6 +41,7 @@ abstract class AppDatabase extends FloorDatabase { CanteenSpuDao get getCanteenSpuDao; SupermarketSkuDao get getSupermarketSkuDao; SupermarketSpuDao get getSupermarketSpuDao; + SupermarketCodeDao get getSupermarketCodeDao; ShopCardDao get getShopCardDao; ClassifyDao get getClassifyDao; PrintHistoryDao get getPrintHistoryDao; diff --git a/lib/common/services/database/database.g.dart b/lib/common/services/database/database.g.dart index 294e38f..335cd42 100644 --- a/lib/common/services/database/database.g.dart +++ b/lib/common/services/database/database.g.dart @@ -80,6 +80,8 @@ class _$AppDatabase extends AppDatabase { SupermarketSpuDao? _getSupermarketSpuDaoInstance; + SupermarketCodeDao? _getSupermarketCodeDaoInstance; + ShopCardDao? _getShopCardDaoInstance; ClassifyDao? _getClassifyDaoInstance; @@ -118,9 +120,11 @@ class _$AppDatabase extends AppDatabase { await database.execute( 'CREATE TABLE IF NOT EXISTS `canteen_spu` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `serviceUniqueCode` TEXT NOT NULL, `classifyServiceUniqueCode` TEXT NOT NULL, `hourType` INTEGER, `saleDate` TEXT, `name` TEXT NOT NULL, `price` INTEGER NOT NULL, `image` TEXT, `isDefault` INTEGER NOT NULL, `status` INTEGER NOT NULL, `sort` INTEGER NOT NULL, `createTime` TEXT NOT NULL, `updateTime` TEXT NOT NULL, `delFlag` INTEGER NOT NULL)'); await database.execute( - 'CREATE TABLE IF NOT EXISTS `supermarket_sku` (`id` INTEGER PRIMARY KEY AUTOINCREMENT)'); + 'CREATE TABLE IF NOT EXISTS `supermarket_sku` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `serviceUniqueCode` TEXT NOT NULL, `spuId` TEXT NOT NULL, `barCode` TEXT NOT NULL, `spec` TEXT NOT NULL, `unit` TEXT NOT NULL, `packageNum` INTEGER NOT NULL, `purchasePrice` INTEGER NOT NULL, `retailPrice` INTEGER NOT NULL, `promotionPrice` INTEGER NOT NULL)'); await database.execute( - 'CREATE TABLE IF NOT EXISTS `supermarket_spu` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `serviceUniqueCode` TEXT NOT NULL, `classifyServiceUniqueCode` TEXT NOT NULL, `price` INTEGER NOT NULL, `sort` INTEGER NOT NULL, `createTime` TEXT NOT NULL, `updateTime` TEXT NOT NULL, `delFlag` INTEGER NOT NULL)'); + 'CREATE TABLE IF NOT EXISTS `supermarket_spu` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `serviceUniqueCode` TEXT NOT NULL, `classifyServiceUniqueCode` TEXT NOT NULL, `productCode` TEXT NOT NULL, `productName` TEXT NOT NULL, `productNature` TEXT NOT NULL, `unit` TEXT NOT NULL, `spec` TEXT NOT NULL, `picUrl` TEXT, `stock` REAL, `salesCount` REAL, `retailPrice` INTEGER NOT NULL, `promotionPrice` INTEGER NOT NULL, `sort` INTEGER NOT NULL, `createTime` TEXT NOT NULL, `updateTime` TEXT NOT NULL, `delFlag` INTEGER NOT NULL)'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `supermarket_code` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `serviceUniqueCode` TEXT NOT NULL, `spuId` TEXT NOT NULL, `unitId` TEXT NOT NULL, `barCode` TEXT NOT NULL)'); await database.execute( 'CREATE TABLE IF NOT EXISTS `shop_card` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `orderId` INTEGER NOT NULL, `productServiceUniqueCode` TEXT NOT NULL, `productName` TEXT NOT NULL, `productPic` TEXT NOT NULL, `productPrice` INTEGER NOT NULL, `productNumber` INTEGER NOT NULL, `productWidget` REAL NOT NULL, `totalPrice` INTEGER NOT NULL)'); await database.execute( @@ -163,6 +167,12 @@ class _$AppDatabase extends AppDatabase { _$SupermarketSpuDao(database, changeListener); } + @override + SupermarketCodeDao get getSupermarketCodeDao { + return _getSupermarketCodeDaoInstance ??= + _$SupermarketCodeDao(database, changeListener); + } + @override ShopCardDao get getShopCardDao { return _getShopCardDaoInstance ??= _$ShopCardDao(database, changeListener); @@ -628,18 +638,88 @@ class _$SupermarketSkuDao extends SupermarketSkuDao { _$SupermarketSkuDao( this.database, this.changeListener, - ); + ) : _supermarketSkuEntityInsertionAdapter = InsertionAdapter( + database, + 'supermarket_sku', + (SupermarketSkuEntity item) => { + 'id': item.id, + 'serviceUniqueCode': item.serviceUniqueCode, + 'spuId': item.spuId, + 'barCode': item.barCode, + 'spec': item.spec, + 'unit': item.unit, + 'packageNum': item.packageNum, + 'purchasePrice': item.purchasePrice, + 'retailPrice': item.retailPrice, + 'promotionPrice': item.promotionPrice + }); final sqflite.DatabaseExecutor database; final StreamController changeListener; + + final InsertionAdapter + _supermarketSkuEntityInsertionAdapter; + + @override + Future batchSave(List changeList) async { + await _supermarketSkuEntityInsertionAdapter.insertList( + changeList, OnConflictStrategy.abort); + } } class _$SupermarketSpuDao extends SupermarketSpuDao { _$SupermarketSpuDao( this.database, this.changeListener, - ) : _queryAdapter = QueryAdapter(database); + ) : _queryAdapter = QueryAdapter(database), + _supermarketSpuEntityInsertionAdapter = InsertionAdapter( + database, + 'supermarket_spu', + (SupermarketSpuEntity item) => { + 'id': item.id, + 'serviceUniqueCode': item.serviceUniqueCode, + 'classifyServiceUniqueCode': item.classifyServiceUniqueCode, + 'productCode': item.productCode, + 'productName': item.productName, + 'productNature': + _supermarketNatureConverter.encode(item.productNature), + 'unit': item.unit, + 'spec': item.spec, + 'picUrl': item.picUrl, + 'stock': item.stock, + 'salesCount': item.salesCount, + 'retailPrice': item.retailPrice, + 'promotionPrice': item.promotionPrice, + 'sort': item.sort, + 'createTime': _dateTimeConverter.encode(item.createTime), + 'updateTime': _dateTimeConverter.encode(item.updateTime), + 'delFlag': _boolConverter.encode(item.delFlag) + }), + _supermarketSpuEntityUpdateAdapter = UpdateAdapter( + database, + 'supermarket_spu', + ['id'], + (SupermarketSpuEntity item) => { + 'id': item.id, + 'serviceUniqueCode': item.serviceUniqueCode, + 'classifyServiceUniqueCode': item.classifyServiceUniqueCode, + 'productCode': item.productCode, + 'productName': item.productName, + 'productNature': + _supermarketNatureConverter.encode(item.productNature), + 'unit': item.unit, + 'spec': item.spec, + 'picUrl': item.picUrl, + 'stock': item.stock, + 'salesCount': item.salesCount, + 'retailPrice': item.retailPrice, + 'promotionPrice': item.promotionPrice, + 'sort': item.sort, + 'createTime': _dateTimeConverter.encode(item.createTime), + 'updateTime': _dateTimeConverter.encode(item.updateTime), + 'delFlag': _boolConverter.encode(item.delFlag) + }); final sqflite.DatabaseExecutor database; @@ -647,19 +727,24 @@ class _$SupermarketSpuDao extends SupermarketSpuDao { final QueryAdapter _queryAdapter; + final InsertionAdapter + _supermarketSpuEntityInsertionAdapter; + + final UpdateAdapter _supermarketSpuEntityUpdateAdapter; + @override Future> getAll( String classifyServiceUniqueCode) async { return _queryAdapter.queryList( - 'SELECT supermarket_spu.* FROM supermarket_spu LEFT JOIN classify ON supermarket_spu.classifyServiceUniqueCode = classify.serviceUniqueCode WHERE supermarket_spu.delFlag = 0 AND (?1 = \'-1\' OR supermarket_spu.classifyServiceUniqueCode = ?1) ORDER BY classify.sort, supermarket_spu.price', - mapper: (Map row) => SupermarketSpuEntity(id: row['id'] as int?, serviceUniqueCode: row['serviceUniqueCode'] as String, classifyServiceUniqueCode: row['classifyServiceUniqueCode'] as String, price: row['price'] as int, sort: row['sort'] as int, createTime: _dateTimeConverter.decode(row['createTime'] as String), updateTime: _dateTimeConverter.decode(row['updateTime'] as String), delFlag: _boolConverter.decode(row['delFlag'] as int)), + 'SELECT supermarket_spu.* FROM supermarket_spu LEFT JOIN classify ON supermarket_spu.classifyServiceUniqueCode = classify.serviceUniqueCode WHERE supermarket_spu.delFlag = 0 AND (?1 = \'-1\' OR supermarket_spu.classifyServiceUniqueCode = ?1) ORDER BY classify.sort', + mapper: (Map row) => SupermarketSpuEntity(id: row['id'] as int?, serviceUniqueCode: row['serviceUniqueCode'] as String, classifyServiceUniqueCode: row['classifyServiceUniqueCode'] as String, productCode: row['productCode'] as String, productName: row['productName'] as String, productNature: _supermarketNatureConverter.decode(row['productNature'] as String), unit: row['unit'] as String, spec: row['spec'] as String, picUrl: row['picUrl'] as String?, stock: row['stock'] as double?, salesCount: row['salesCount'] as double?, retailPrice: row['retailPrice'] as int, promotionPrice: row['promotionPrice'] as int, sort: row['sort'] as int, createTime: _dateTimeConverter.decode(row['createTime'] as String), updateTime: _dateTimeConverter.decode(row['updateTime'] as String), delFlag: _boolConverter.decode(row['delFlag'] as int)), arguments: [classifyServiceUniqueCode]); } @override Future getCount() async { return _queryAdapter.query( - 'SELECT DISTINCT COUNT(0) FROM canteen_spu WHERE delFlag = 0', + 'SELECT DISTINCT COUNT(0) FROM supermarket_spu WHERE delFlag = 0', mapper: (Map row) => row.values.first as int); } @@ -670,10 +755,59 @@ class _$SupermarketSpuDao extends SupermarketSpuDao { int offset, ) async { return _queryAdapter.queryList( - 'SELECT supermarket_spu.* FROM supermarket_spu LEFT JOIN classify ON supermarket_spu.classifyServiceUniqueCode = classify.serviceUniqueCode WHERE supermarket_spu.delFlag = 0 AND (?1 = \'-1\' OR supermarket_spu.classifyServiceUniqueCode = ?1) ORDER BY classify.sort, supermarket_spu.price LIMIT ?2 OFFSET ?3', - mapper: (Map row) => SupermarketSpuEntity(id: row['id'] as int?, serviceUniqueCode: row['serviceUniqueCode'] as String, classifyServiceUniqueCode: row['classifyServiceUniqueCode'] as String, price: row['price'] as int, sort: row['sort'] as int, createTime: _dateTimeConverter.decode(row['createTime'] as String), updateTime: _dateTimeConverter.decode(row['updateTime'] as String), delFlag: _boolConverter.decode(row['delFlag'] as int)), + 'SELECT supermarket_spu.* FROM supermarket_spu LEFT JOIN classify ON supermarket_spu.classifyServiceUniqueCode = classify.serviceUniqueCode WHERE supermarket_spu.delFlag = 0 AND (?1 = \'-1\' OR supermarket_spu.classifyServiceUniqueCode = ?1) ORDER BY classify.sort LIMIT ?2 OFFSET ?3', + mapper: (Map row) => SupermarketSpuEntity(id: row['id'] as int?, serviceUniqueCode: row['serviceUniqueCode'] as String, classifyServiceUniqueCode: row['classifyServiceUniqueCode'] as String, productCode: row['productCode'] as String, productName: row['productName'] as String, productNature: _supermarketNatureConverter.decode(row['productNature'] as String), unit: row['unit'] as String, spec: row['spec'] as String, picUrl: row['picUrl'] as String?, stock: row['stock'] as double?, salesCount: row['salesCount'] as double?, retailPrice: row['retailPrice'] as int, promotionPrice: row['promotionPrice'] as int, sort: row['sort'] as int, createTime: _dateTimeConverter.decode(row['createTime'] as String), updateTime: _dateTimeConverter.decode(row['updateTime'] as String), delFlag: _boolConverter.decode(row['delFlag'] as int)), arguments: [classifyServiceUniqueCode, pageSize, offset]); } + + @override + Future getByCode(String code) async { + return _queryAdapter.query( + 'SELECT * FROM supermarket_spu WHERE delFlag = 0 AND serviceUniqueCode = ?1', + mapper: (Map row) => SupermarketSpuEntity(id: row['id'] as int?, serviceUniqueCode: row['serviceUniqueCode'] as String, classifyServiceUniqueCode: row['classifyServiceUniqueCode'] as String, productCode: row['productCode'] as String, productName: row['productName'] as String, productNature: _supermarketNatureConverter.decode(row['productNature'] as String), unit: row['unit'] as String, spec: row['spec'] as String, picUrl: row['picUrl'] as String?, stock: row['stock'] as double?, salesCount: row['salesCount'] as double?, retailPrice: row['retailPrice'] as int, promotionPrice: row['promotionPrice'] as int, sort: row['sort'] as int, createTime: _dateTimeConverter.decode(row['createTime'] as String), updateTime: _dateTimeConverter.decode(row['updateTime'] as String), delFlag: _boolConverter.decode(row['delFlag'] as int)), + arguments: [code]); + } + + @override + Future batchSave(List changeList) async { + await _supermarketSpuEntityInsertionAdapter.insertList( + changeList, OnConflictStrategy.abort); + } + + @override + Future batchEdit(List changeList) async { + await _supermarketSpuEntityUpdateAdapter.updateList( + changeList, OnConflictStrategy.abort); + } +} + +class _$SupermarketCodeDao extends SupermarketCodeDao { + _$SupermarketCodeDao( + this.database, + this.changeListener, + ) : _supermarketCodeEntityInsertionAdapter = InsertionAdapter( + database, + 'supermarket_code', + (SupermarketCodeEntity item) => { + 'id': item.id, + 'serviceUniqueCode': item.serviceUniqueCode, + 'spuId': item.spuId, + 'unitId': item.unitId, + 'barCode': item.barCode + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final InsertionAdapter + _supermarketCodeEntityInsertionAdapter; + + @override + Future batchSave(List changeList) async { + await _supermarketCodeEntityInsertionAdapter.insertList( + changeList, OnConflictStrategy.abort); + } } class _$ShopCardDao extends ShopCardDao { @@ -1439,5 +1573,6 @@ final _orderTypeConverter = OrderTypeConverter(); final _orderPayTypeConverter = OrderPayTypeConverter(); final _sysTypeConverter = SysTypeConverter(); final _printStatusConverter = PrintStatusConverter(); +final _supermarketNatureConverter = SupermarketNatureConverter(); final _listIntConverter = ListIntConverter(); final _boolConverter = BoolConverter(); diff --git a/lib/common/services/database/entity/supermarket_code_entity.dart b/lib/common/services/database/entity/supermarket_code_entity.dart new file mode 100644 index 0000000..8f7a982 --- /dev/null +++ b/lib/common/services/database/entity/supermarket_code_entity.dart @@ -0,0 +1,37 @@ +import 'package:floor/floor.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'supermarket_code_entity.g.dart'; + +@JsonSerializable() +@Entity(tableName: "supermarket_code") +class SupermarketCodeEntity { + /// 自增ID + @PrimaryKey(autoGenerate: true) + int? id; + + /// 服务端唯一标识 + String serviceUniqueCode; + + /// spu id + String spuId; + + /// 包装单位id + String unitId; + + /// 条码 + String barCode; + + SupermarketCodeEntity({ + this.id, + required this.serviceUniqueCode, + required this.spuId, + required this.unitId, + required this.barCode, + }); + + factory SupermarketCodeEntity.fromJson(Map json) => + _$SupermarketCodeEntityFromJson(json); + + Map toJson() => _$SupermarketCodeEntityToJson(this); +} diff --git a/lib/common/services/database/entity/supermarket_code_entity.g.dart b/lib/common/services/database/entity/supermarket_code_entity.g.dart new file mode 100644 index 0000000..5e0dd49 --- /dev/null +++ b/lib/common/services/database/entity/supermarket_code_entity.g.dart @@ -0,0 +1,27 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'supermarket_code_entity.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +SupermarketCodeEntity _$SupermarketCodeEntityFromJson( + Map json) => + SupermarketCodeEntity( + id: (json['id'] as num?)?.toInt(), + serviceUniqueCode: json['serviceUniqueCode'] as String, + spuId: json['spuId'] as String, + unitId: json['unitId'] as String, + barCode: json['barCode'] as String, + ); + +Map _$SupermarketCodeEntityToJson( + SupermarketCodeEntity instance) => + { + 'id': instance.id, + 'serviceUniqueCode': instance.serviceUniqueCode, + 'spuId': instance.spuId, + 'unitId': instance.unitId, + 'barCode': instance.barCode, + }; diff --git a/lib/common/services/database/entity/supermarket_sku_entity.dart b/lib/common/services/database/entity/supermarket_sku_entity.dart index 7be9560..d9557a9 100644 --- a/lib/common/services/database/entity/supermarket_sku_entity.dart +++ b/lib/common/services/database/entity/supermarket_sku_entity.dart @@ -10,8 +10,44 @@ class SupermarketSkuEntity { @PrimaryKey(autoGenerate: true) int? id; + /// 服务端唯一标识 + String serviceUniqueCode; + + /// spu id + String spuId; + + /// 条码 + String barCode; + + /// 规格 + String spec; + + /// 单位 + String unit; + + /// 内装数量 + int packageNum; + + /// 进价/单位分 + int purchasePrice; + + /// 零售价/单位分 + int retailPrice; + + /// 促销价/单位分 + int promotionPrice; + SupermarketSkuEntity({ this.id, + required this.serviceUniqueCode, + required this.spuId, + required this.barCode, + required this.spec, + required this.unit, + required this.packageNum, + required this.purchasePrice, + required this.retailPrice, + required this.promotionPrice, }); factory SupermarketSkuEntity.fromJson(Map json) => diff --git a/lib/common/services/database/entity/supermarket_sku_entity.g.dart b/lib/common/services/database/entity/supermarket_sku_entity.g.dart index 232051a..5a0ef07 100644 --- a/lib/common/services/database/entity/supermarket_sku_entity.g.dart +++ b/lib/common/services/database/entity/supermarket_sku_entity.g.dart @@ -10,10 +10,28 @@ SupermarketSkuEntity _$SupermarketSkuEntityFromJson( Map json) => SupermarketSkuEntity( id: (json['id'] as num?)?.toInt(), + serviceUniqueCode: json['serviceUniqueCode'] as String, + spuId: json['spuId'] as String, + barCode: json['barCode'] as String, + spec: json['spec'] as String, + unit: json['unit'] as String, + packageNum: (json['packageNum'] as num).toInt(), + purchasePrice: (json['purchasePrice'] as num).toInt(), + retailPrice: (json['retailPrice'] as num).toInt(), + promotionPrice: (json['promotionPrice'] as num).toInt(), ); Map _$SupermarketSkuEntityToJson( SupermarketSkuEntity instance) => { 'id': instance.id, + 'serviceUniqueCode': instance.serviceUniqueCode, + 'spuId': instance.spuId, + 'barCode': instance.barCode, + 'spec': instance.spec, + 'unit': instance.unit, + 'packageNum': instance.packageNum, + 'purchasePrice': instance.purchasePrice, + 'retailPrice': instance.retailPrice, + 'promotionPrice': instance.promotionPrice, }; diff --git a/lib/common/services/database/entity/supermarket_spu_entity.dart b/lib/common/services/database/entity/supermarket_spu_entity.dart index 6850bda..f9d06ed 100644 --- a/lib/common/services/database/entity/supermarket_spu_entity.dart +++ b/lib/common/services/database/entity/supermarket_spu_entity.dart @@ -1,5 +1,6 @@ import 'package:floor/floor.dart'; import 'package:json_annotation/json_annotation.dart'; +import 'package:pj_supermarket_cloud/common/index.dart'; part 'supermarket_spu_entity.g.dart'; @@ -16,8 +17,35 @@ class SupermarketSpuEntity { /// 分类 serviceID String classifyServiceUniqueCode; - /// 商品价格(分) - int price; + /// 货号 + String productCode; + + /// 商品名称 + String productName; + + /// 商品性质(字典) + SupermarketNature productNature; + + /// 单位 + String unit; + + /// 规格 + String spec; + + /// 商品封面图 + String? picUrl; + + /// 库存 + double? stock; + + /// 销量 + double? salesCount; + + /// 零售价 + int retailPrice; + + /// 促销价 + int promotionPrice; /// 排序 倒序排列 int sort; @@ -35,7 +63,16 @@ class SupermarketSpuEntity { this.id, required this.serviceUniqueCode, required this.classifyServiceUniqueCode, - required this.price, + required this.productCode, + required this.productName, + required this.productNature, + required this.unit, + required this.spec, + required this.picUrl, + required this.stock, + required this.salesCount, + required this.retailPrice, + required this.promotionPrice, required this.sort, required this.createTime, required this.updateTime, diff --git a/lib/common/services/database/entity/supermarket_spu_entity.g.dart b/lib/common/services/database/entity/supermarket_spu_entity.g.dart index 5e414d1..36d4676 100644 --- a/lib/common/services/database/entity/supermarket_spu_entity.g.dart +++ b/lib/common/services/database/entity/supermarket_spu_entity.g.dart @@ -12,7 +12,17 @@ SupermarketSpuEntity _$SupermarketSpuEntityFromJson( id: (json['id'] as num?)?.toInt(), serviceUniqueCode: json['serviceUniqueCode'] as String, classifyServiceUniqueCode: json['classifyServiceUniqueCode'] as String, - price: (json['price'] as num).toInt(), + productCode: json['productCode'] as String, + productName: json['productName'] as String, + productNature: + $enumDecode(_$SupermarketNatureEnumMap, json['productNature']), + unit: json['unit'] as String, + spec: json['spec'] as String, + picUrl: json['picUrl'] as String?, + stock: (json['stock'] as num?)?.toDouble(), + salesCount: (json['salesCount'] as num?)?.toDouble(), + retailPrice: (json['retailPrice'] as num).toInt(), + promotionPrice: (json['promotionPrice'] as num).toInt(), sort: (json['sort'] as num).toInt(), createTime: DateTime.parse(json['createTime'] as String), updateTime: DateTime.parse(json['updateTime'] as String), @@ -25,9 +35,23 @@ Map _$SupermarketSpuEntityToJson( 'id': instance.id, 'serviceUniqueCode': instance.serviceUniqueCode, 'classifyServiceUniqueCode': instance.classifyServiceUniqueCode, - 'price': instance.price, + 'productCode': instance.productCode, + 'productName': instance.productName, + 'productNature': _$SupermarketNatureEnumMap[instance.productNature]!, + 'unit': instance.unit, + 'spec': instance.spec, + 'picUrl': instance.picUrl, + 'stock': instance.stock, + 'salesCount': instance.salesCount, + 'retailPrice': instance.retailPrice, + 'promotionPrice': instance.promotionPrice, 'sort': instance.sort, 'createTime': instance.createTime.toIso8601String(), 'updateTime': instance.updateTime.toIso8601String(), 'delFlag': instance.delFlag, }; + +const _$SupermarketNatureEnumMap = { + SupermarketNature.DEFAULT: 'DEFAULT', + SupermarketNature.WEIGHT: 'WEIGHT', +}; diff --git a/lib/common/services/database/type_converter/type_converter.dart b/lib/common/services/database/type_converter/type_converter.dart index 2c307a0..be2a2f4 100644 --- a/lib/common/services/database/type_converter/type_converter.dart +++ b/lib/common/services/database/type_converter/type_converter.dart @@ -107,6 +107,19 @@ class ProductHourTypeConverter extends TypeConverter { } } +class SupermarketNatureConverter + extends TypeConverter { + @override + SupermarketNature decode(String databaseValue) { + return SupermarketNature.values.byName(databaseValue); + } + + @override + String encode(SupermarketNature value) { + return value.name; + } +} + class ListIntConverter extends TypeConverter?, String> { @override List decode(String databaseValue) { diff --git a/lib/common/services/index.dart b/lib/common/services/index.dart index 4e53e56..90d86e7 100644 --- a/lib/common/services/index.dart +++ b/lib/common/services/index.dart @@ -11,6 +11,7 @@ export './database/dao/print_history_dao.dart'; export './database/dao/canteen_spu_dao.dart'; export './database/dao/setting_dao.dart'; export './database/dao/shop_card_dao.dart'; +export './database/dao/supermarket_code_dao.dart'; export './database/dao/supermarket_sku_dao.dart'; export './database/dao/supermarket_spu_dao.dart'; export './database/dao/user_dao.dart'; @@ -22,6 +23,7 @@ export './database/entity/print_history_entity.dart'; export './database/entity/canteen_spu_entity.dart'; export './database/entity/setting_entity.dart'; export './database/entity/shop_card_entity.dart'; +export './database/entity/supermarket_code_entity.dart'; export './database/entity/supermarket_sku_entity.dart'; export './database/entity/supermarket_spu_entity.dart'; export './database/entity/user_entity.dart'; diff --git a/lib/common/utils/app/app_setting_tool.dart b/lib/common/utils/app/app_setting_tool.dart index a1ab8b9..22900c8 100644 --- a/lib/common/utils/app/app_setting_tool.dart +++ b/lib/common/utils/app/app_setting_tool.dart @@ -21,12 +21,18 @@ abstract class AppSettingTool { ), ); + static Future removeSettingCache() async { + await _settingCache.emptyCache(); + } + static Future _getSetting() async { // 尝试从缓存获取 final fileInfo = await _settingCache.getFileFromCache(_settingKey); if (fileInfo != null) { final content = await fileInfo.file.readAsString(); - return SettingEntity.fromJson(json.decode(content)); + if (ObjectUtil.isNotEmpty(content)) { + return SettingEntity.fromJson(json.decode(content)); + } } final app = Get.find(); final settingDao = app.dataBase.getSettingDao; @@ -85,7 +91,7 @@ abstract class AppSettingTool { } await settingDao.edit(setting); await _settingCache.putFile( - 'setting', + _settingKey, Uint8List.fromList(utf8.encode(json.encode(setting.toJson()))), fileExtension: 'json', ); diff --git a/lib/common/utils/app/control/app_control.dart b/lib/common/utils/app/control/app_control.dart index 004c61e..1c6d56f 100644 --- a/lib/common/utils/app/control/app_control.dart +++ b/lib/common/utils/app/control/app_control.dart @@ -39,6 +39,7 @@ class AppControl extends GetxController { } Future initAsync() async { + await AppSettingTool.removeSettingCache(); dataBase = await AppDatabase.getDataBase(); printManage = PrintManage(); serialCardManage = SerialCardManage(); diff --git a/lib/common/utils/sync/sync_product_tool.dart b/lib/common/utils/sync/sync_product_tool.dart index 32509dd..6408a6e 100644 --- a/lib/common/utils/sync/sync_product_tool.dart +++ b/lib/common/utils/sync/sync_product_tool.dart @@ -13,7 +13,10 @@ abstract class SyncProductTool { await syncProduct(); } - /// 同步商品分类 +// ************************************************************************** +// 同步商品分类 spu start +// ************************************************************************** + static Future syncClassify() async { final sysSetting = await AppSettingTool.getSysSetting(); final sysType = sysSetting.sysType; @@ -129,13 +132,17 @@ abstract class SyncProductTool { .toList(); } +// ************************************************************************** +// 同步商品分类 spu end +// ************************************************************************** + /// 同步商品 static Future syncProduct() async { final sysSetting = await AppSettingTool.getSysSetting(); final sysType = sysSetting.sysType; try { - List? apiList; if (sysType == SysType.CANTEEN) { + // 食堂 final day = DateUtil.formatDate( DateTime.now(), format: DateFormats.y_mo_d, @@ -147,19 +154,32 @@ abstract class SyncProductTool { "categoryId": null, "merchantId": sysSetting.serviceMerchantId, }; - apiList = await ProductApi.canteenProduct(pa); - if (!ObjectUtil.isEmptyList(apiList)) { - apiList?.forEach((v) => v.saleDate = dayStr); + final canteenList = await ProductApi.canteenProduct(pa); + if (canteenList == null) return; + for (var v in canteenList) { + v.saleDate = dayStr; } + // 更新数据 + await _batchUpdateCaneenProduct(list: canteenList); } else if (sysType == SysType.SUPERMARKET) { - apiList = await ProductApi.supermarketSpu(null); + // 超市 + int currentPage = 1; + while (true) { + final pa = { + "current": currentPage, + "size": 100, + }; + final supermarket = await ProductApi.supermarketSpu( + pa, + ); + if (supermarket == null || + ObjectUtil.isEmptyList(supermarket.records)) { + break; + } + currentPage += 1; + await _batchUpdateSupermarketProduct(list: supermarket.records!); + } } - if (apiList == null) return; - if (ObjectUtil.isEmptyList(apiList)) { - return; - } - // 更新数据 - await _batchUpdateProduct(list: apiList, sysType: sysSetting.sysType); // 更新同步时间 if (sysType == SysType.CANTEEN) { sysSetting.canteenProductSyncTime = DateTime.now(); @@ -173,9 +193,12 @@ abstract class SyncProductTool { } } - static Future _batchUpdateProduct({ +// ************************************************************************** +// 同步食堂商品 spu start +// ************************************************************************** + + static Future _batchUpdateCaneenProduct({ required List list, - required SysType sysType, }) async { final app = Get.find(); final dataBase = app.dataBase; @@ -185,9 +208,8 @@ abstract class SyncProductTool { "-1", ); if (ObjectUtil.isEmpty(productList)) { - await _batchAddOrUpdateProduct( + await _batchAddOrUpdateCaneenProduct( list: list, - sysType: sysType, isUpdate: false, ); return; @@ -199,9 +221,8 @@ abstract class SyncProductTool { final deleteCodes = dbServiceCodes.difference(apiServiceCodes).toList(); final updateCodes = apiServiceCodes.intersection(dbServiceCodes).toList(); if (ObjectUtil.isNotEmpty(addCodes)) { - await _batchAddOrUpdateProduct( - list: _filterProductListByCodes(list, addCodes), - sysType: sysType, + await _batchAddOrUpdateCaneenProduct( + list: _filterCaneenProductListByCodes(list, addCodes), isUpdate: false, ); } @@ -209,17 +230,15 @@ abstract class SyncProductTool { await productDao.delByIds(deleteCodes); } if (ObjectUtil.isNotEmpty(updateCodes)) { - await _batchAddOrUpdateProduct( - list: _filterProductListByCodes(list, updateCodes), - sysType: sysType, + await _batchAddOrUpdateCaneenProduct( + list: _filterCaneenProductListByCodes(list, updateCodes), isUpdate: true, ); } } - static Future _batchAddOrUpdateProduct({ + static Future _batchAddOrUpdateCaneenProduct({ required List list, - required SysType sysType, required bool isUpdate, }) async { if (ObjectUtil.isEmpty(list)) return; @@ -229,9 +248,7 @@ abstract class SyncProductTool { List changeList = []; for (final v in list) { CanteenSpuEntity item = CanteenSpuEntity( - serviceUniqueCode: sysType == SysType.CANTEEN - ? v.spuId.toString() - : v.spuId.toString(), + serviceUniqueCode: v.spuId.toString(), classifyServiceUniqueCode: v.categoryId != null ? v.categoryId.toString() : "-1", name: v.name!, @@ -261,7 +278,7 @@ abstract class SyncProductTool { } } - static List _filterProductListByCodes( + static List _filterCaneenProductListByCodes( List sourceList, List codes, ) { @@ -269,4 +286,177 @@ abstract class SyncProductTool { .where((item) => codes.contains(item.spuId.toString())) .toList(); } + +// ************************************************************************** +// 同步食堂商品 spu end +// ************************************************************************** + +// ************************************************************************** +// 同步食堂商品 spu start +// ************************************************************************** + + static Future _batchUpdateSupermarketProduct({ + required List list, + }) async { + final app = Get.find(); + final dataBase = app.dataBase; + final supermarketSpuDao = dataBase.getSupermarketSpuDao; + final productList = await supermarketSpuDao.getAll( + "-1", + ); + if (ObjectUtil.isEmpty(productList)) { + await _batchAddOrUpdateSupermarketProduct( + list: list, + isUpdate: false, + ); + await _batchAddOrUpdateSupermarketSpuAndCode(list); + return; + } + final apiServiceCodes = list.map((e) => e.id.toString()).toSet(); + final dbServiceCodes = productList.map((e) => e.serviceUniqueCode).toSet(); + + final addCodes = apiServiceCodes.difference(dbServiceCodes).toList(); + final deleteCodes = dbServiceCodes.difference(apiServiceCodes).toList(); + final updateCodes = apiServiceCodes.intersection(dbServiceCodes).toList(); + if (ObjectUtil.isNotEmpty(addCodes)) { + await _batchAddOrUpdateSupermarketProduct( + list: _filterCaneenSupermarketByCodes(list, addCodes), + isUpdate: false, + ); + } + if (ObjectUtil.isNotEmpty(deleteCodes)) { + await supermarketSpuDao.delByIds(deleteCodes); + } + if (ObjectUtil.isNotEmpty(updateCodes)) { + await _batchAddOrUpdateSupermarketProduct( + list: _filterCaneenSupermarketByCodes(list, updateCodes), + isUpdate: true, + ); + } + await _batchAddOrUpdateSupermarketSpuAndCode(list); + } + + static Future _batchAddOrUpdateSupermarketProduct({ + required List list, + required bool isUpdate, + }) async { + if (ObjectUtil.isEmpty(list)) return; + final app = Get.find(); + final dataBase = app.dataBase; + final productDao = dataBase.getSupermarketSpuDao; + List changeList = []; + for (final v in list) { + SupermarketSpuEntity item = SupermarketSpuEntity( + serviceUniqueCode: v.id ?? "-1", + classifyServiceUniqueCode: v.categoryId ?? "-1", + productCode: v.productCode ?? "-1", + productName: v.productCode ?? "", + productNature: SupermarketNature.values.fromCode(v.productNature) ?? + SupermarketNature.DEFAULT, + unit: v.productCode ?? "", + spec: v.productCode ?? "", + picUrl: v.picUrl ?? "", + stock: v.stock ?? 0, + salesCount: + v.salesCount != null ? double.tryParse(v.salesCount.toString()) : 0, + retailPrice: v.retailPrice ?? 0, + promotionPrice: v.promotionPrice ?? 0, + sort: 0, + createTime: DateTime.now(), + updateTime: DateTime.now(), + delFlag: false, + ); + if (isUpdate) { + final detail = await productDao.getByCode(item.serviceUniqueCode); + if (ObjectUtil.isEmpty(detail)) continue; + if (detail == item) continue; + item.id = detail?.id; + } + changeList.add(item); + } + if (ObjectUtil.isNotEmpty(changeList)) { + isUpdate + ? await productDao.batchEdit(changeList) + : await productDao.batchSave(changeList); + } + } + + static List _filterCaneenSupermarketByCodes( + List sourceList, + List codes, + ) { + return sourceList + .where((item) => codes.contains(item.id.toString())) + .toList(); + } + + // 更新辅助条码和spu + static Future _batchAddOrUpdateSupermarketSpuAndCode( + List list, + ) async { + if (list.isEmpty) return; + final app = Get.find(); + final dataBase = app.dataBase; + final skuDao = dataBase.getSupermarketSkuDao; + final codeDao = dataBase.getSupermarketCodeDao; + + final spuIds = + list.where((v) => ObjectUtil.isNotEmpty(v)).map((v) => v.id!).toList(); + try { + final pa = {"ids": spuIds}; + final skuDetailList = await ProductApi.supermarketSupDetial(pa); + if (skuDetailList == null) { + return; + } + // 删除 sku + skuDao.delBySpuIds(spuIds); + // 删除辅助条码 + codeDao.delBySpuIds(spuIds); + List codeList = []; + List skuList = []; + for (final v in skuDetailList) { + // 辅助条码 + if (v.supermarketAuxiliaryCodeEntityList != null) { + for (final i in v.supermarketAuxiliaryCodeEntityList!) { + SupermarketCodeEntity item = SupermarketCodeEntity( + serviceUniqueCode: i.id ?? "-1", + spuId: i.spuId ?? "-1", + unitId: i.unitId ?? "", + barCode: i.barCode ?? "", + ); + codeList.add(item); + } + } + // sku + if (v.supermarketUnitEntityList != null) { + for (final i in v.supermarketUnitEntityList!) { + SupermarketSkuEntity item = SupermarketSkuEntity( + serviceUniqueCode: i.id ?? "-1", + spuId: i.spuId ?? "-1", + barCode: i.barCode ?? "", + spec: i.spec ?? "", + unit: i.unit ?? "", + packageNum: i.packageNum ?? 0, + purchasePrice: i.purchasePrice ?? 0, + retailPrice: i.retailPrice ?? 0, + promotionPrice: i.promotionPrice ?? 0, + ); + skuList.add(item); + } + } + } + if (codeList.isNotEmpty) { + await codeDao.batchSave(codeList); + } + if (skuList.isNotEmpty) { + await skuDao.batchSave(skuList); + } + } catch (e, stack) { + logger.e("|$_tag|添加超市spu detail 错误error:|$e|stack:|$stack|"); + } + } + +// ************************************************************************** +// 同步食堂商品 spu end +// ************************************************************************** } diff --git a/lib/common/values/constants.dart b/lib/common/values/constants.dart index 47fd9da..85275b6 100644 --- a/lib/common/values/constants.dart +++ b/lib/common/values/constants.dart @@ -1,7 +1,5 @@ /// 常量 class Constants { - static const ttsId = "b83e0646"; - // oauth2 APP模式客户端信息 static const oauth2AppClient = 'mini:mini'; @@ -12,7 +10,9 @@ class Constants { static const pwdEncKey = 'pigxpigxpigxpigx'; /// 服务 url - static const apiUrl = 'https://stgl.pj.gov.cn/api'; + /// static const apiUrl = 'https://stgl.pj.gov.cn/api'; + + static const apiUrl = 'http://192.168.101.64:9999'; /// 静态资源 url static const ossUrl = apiUrl; diff --git a/lib/pages/setting/widgets/setting_baseInfo.dart b/lib/pages/setting/widgets/setting_baseInfo.dart index 760bc5c..ecb0518 100644 --- a/lib/pages/setting/widgets/setting_baseInfo.dart +++ b/lib/pages/setting/widgets/setting_baseInfo.dart @@ -18,7 +18,8 @@ Future _bindServiceDialog(BuildContext context, SysSetting sys) async { // 超市 // uniqueCodeC.text = "1894303392833716226"; // 测试 - uniqueCodeC.text = "1896157295523049473"; + // uniqueCodeC.text = "1896157295523049473"; + uniqueCodeC.text = "1877592554489143298"; } await showAdaptiveDialog( context: context, diff --git a/lib/pages/setting/widgets/setting_product.dart b/lib/pages/setting/widgets/setting_product.dart index c615d94..6ec8d08 100644 --- a/lib/pages/setting/widgets/setting_product.dart +++ b/lib/pages/setting/widgets/setting_product.dart @@ -16,7 +16,7 @@ class ProductManageController extends GetxController { Rx sysType = SysType.CANTEEN.obs; // 食堂商品 - RxList canteenSpuList = [].obs; + final canteenSpuList = [].obs; // 超市商品 final supermarketSpuList = [].obs; @@ -63,9 +63,7 @@ class ProductManageController extends GetxController { await SyncProductTool.updateDatabase(); await getProductList(); } finally { - Future.delayed(const Duration(seconds: 1), () { - EasyLoading.dismiss(); - }); + EasyLoading.dismiss(); } } @@ -232,7 +230,22 @@ Widget _buildCanteenList(BuildContext context) { // 超市列表 Widget _buildSupermarketList(BuildContext context) { - return SizedBox.shrink(); + final theme = FTheme.of(context); + final productC = Get.find(); + return Obx( + () => GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 8, + mainAxisSpacing: 10.w, + crossAxisSpacing: 10.w, + childAspectRatio: 0.7, + ), + itemCount: productC.supermarketSpuList.length, + itemBuilder: (BuildContext context, int index) { + final v = productC.supermarketSpuList[index]; + }, + ), + ); } Widget settingProduct(BuildContext context) {