| | |
| | | <selectionStates> |
| | | <SelectionState runConfigName="app"> |
| | | <option name="selectionMode" value="DROPDOWN" /> |
| | | <DropdownSelection timestamp="2025-02-25T05:56:30.000685300Z"> |
| | | <DropdownSelection timestamp="2025-02-25T09:44:45.437232500Z"> |
| | | <Target type="DEFAULT_BOOT"> |
| | | <handle> |
| | | <DeviceId pluginId="PhysicalDevice" identifier="serial=HMQNW19A24001406" /> |
| | | <DeviceId pluginId="PhysicalDevice" identifier="serial=88Y5T19C14010323" /> |
| | | </handle> |
| | | </Target> |
| | | </DropdownSelection> |
| | |
| | | <component name="GradleSettings"> |
| | | <option name="linkedExternalProjectsSettings"> |
| | | <GradleProjectSettings> |
| | | <option name="testRunner" value="CHOOSE_PER_TEST" /> |
| | | <option name="externalProjectPath" value="$PROJECT_DIR$" /> |
| | | <option name="gradleJvm" /> |
| | | <option name="gradleJvm" value="17" /> |
| | | <option name="modules"> |
| | | <set> |
| | | <option value="$PROJECT_DIR$" /> |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="ExternalStorageConfigurationManager" enabled="true" /> |
| | | <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> |
| | | <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK"> |
| | | <output url="file://$PROJECT_DIR$/build/classes" /> |
| | | </component> |
| | | <component name="ProjectType"> |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="VcsDirectoryMappings"> |
| | | <mapping directory="" vcs="Git" /> |
| | | <mapping directory="$PROJECT_DIR$" vcs="Git" /> |
| | | </component> |
| | | </project> |
| | |
| | | android.util.Log.d("SmsReceiver", "Received SMS code: ${code}") |
| | | val msg = Msg(0, "1111", "111111", messageBody.toString(), 1, "111", 1, 1) |
| | | val msgId = Core.msg.insert(msg) |
| | | val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, dateString, "中通") |
| | | val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, dateString, "中通",0) |
| | | Core.code.insert(code) |
| | | android.util.Log.d("SMS_DEBUG", "历史短信已保存到数据库") |
| | | }else{ |
| | |
| | | lifecycleScope.launch { |
| | | try { |
| | | // 处理单个包裹取件 |
| | | // Core.code.pickup(pack.trackingNumber) |
| | | Core.code.pickup(pack.id) |
| | | // 重新加载数据 |
| | | loadData() |
| | | // 通知MainActivity刷新 |
| | |
| | | val packages = expressAdapter.currentList |
| | | // 批量处理取件 |
| | | packages.forEach { pack -> |
| | | // Core.code.pickup(pack.trackingNumber) |
| | | Core.code.pickup(pack.id) |
| | | } |
| | | // 清空列表 |
| | | expressAdapter.submitList(emptyList()) |
| | |
| | | val codes = Core.code.getByKeyword(stationName) |
| | | val packages = codes.map { code -> |
| | | ExpressPackage( |
| | | id = code.id, |
| | | company = code.name ?: company, |
| | | trackingNumber = code.code, |
| | | date = code.overtime |
| | | createTime = code.createtime |
| | | ) |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | fun bind(pack: ExpressPackage) { |
| | | binding.tvPackageInfo.text = "${pack.company} - ${pack.trackingNumber}" |
| | | binding.tvCompany.text = pack.company |
| | | binding.tvCreateTime.text = pack.createTime |
| | | binding.tvTrackingNumber.text = pack.trackingNumber |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | fun bind(pack: ExpressPackage) { |
| | | binding.tvPackageInfo.text = "${pack.company} - ${pack.trackingNumber}" |
| | | binding.tvPackageId.text = pack.id.toString() |
| | | binding.tvCompany.text = pack.company |
| | | binding.tvCreateTime.text = pack.createTime |
| | | binding.tvTrackingNumber.text = pack.trackingNumber |
| | | binding.ivPackageStatus.setImageResource( |
| | | // if (pack.isPickedUp) R.drawable.circle_checked |
| | | // else R.drawable.circle |
| | |
| | | val item = getItem(position) // 使用 getItem 来获取当前位置的 item |
| | | holder.tvTitle.text = item.type // 假设 Code 类有一个 `type` 属性 |
| | | holder.tvDescription.text = item.code // 假设 Code 类有一个 `code` 属性 |
| | | var overtime = "请注意:当前取件免费截止时间是"+item.overtime+",超时会收取额外费用" |
| | | holder.overTimeMsg.text = overtime |
| | | var createtime = "请注意:当前取件免费截止时间是"+item.createtime+",超时会收取额外费用" |
| | | holder.overTimeMsg.text = createtime |
| | | println("打印......") |
| | | } |
| | | |
| | |
| | | @Query(""" |
| | | SELECT * FROM Code |
| | | WHERE type LIKE '%' || :keyword || '%' |
| | | AND pickup = '0' |
| | | ORDER BY time DESC |
| | | """) |
| | | fun getByKeyword(keyword: String): List<Code> |
| | | |
| | | @Query("SELECT * FROM Code WHERE type = :content and code= :code and overtime = :dateString LIMIT 1") |
| | | @Query("SELECT * FROM Code WHERE type = :content and code= :code and createtime = :dateString LIMIT 1") |
| | | fun queryByTypeAndCodeAndDate(content: String, code: String, dateString: String): Code |
| | | |
| | | |
| | | @Query("update Code set pickup = '1' where id=:id") |
| | | fun pickup(id: Long) |
| | | } |
| | |
| | | val ruleId: Long, |
| | | val msgId: Long, |
| | | val code: String, |
| | | var overtime: String, |
| | | var createtime: String, |
| | | var name: String, |
| | | var pickup: Int, |
| | | var time: Date = Date(), |
| | | // var overtime: String, |
| | | |
| | | ) |
| | |
| | | return codeDao.queryByTypeAndCodeAndDate(content,code,dateString) |
| | | } |
| | | |
| | | @WorkerThread |
| | | fun pickup(id: Long) = codeDao.pickup(id) |
| | | } |
| | |
| | | ) |
| | | |
| | | data class ExpressPackage( |
| | | // var id: Long, |
| | | var id: Long, |
| | | val company: String, |
| | | val trackingNumber: String, |
| | | val date: String |
| | | val createTime: String |
| | | ) |
| | |
| | | val date = Date.from(currentTime.atZone(ZoneId.systemDefault()).toInstant()) |
| | | // 如果需要格式化显示 |
| | | val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) |
| | | val overtime = sdf.format(date) |
| | | val existingCode = Core.code.queryByTypeAndCodeAndDate(rule.content, code, overtime) |
| | | val createtime = sdf.format(date) |
| | | val existingCode = Core.code.queryByTypeAndCodeAndDate(rule.content, code, createtime) |
| | | if (existingCode == null) { |
| | | val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, overtime, "中通") |
| | | val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, createtime, "中通",0) |
| | | Core.code.insert(code) |
| | | Log.d("SMS_DEBUG", "新短信已保存到数据库") |
| | | |
| | |
| | | val groups = stations.map { station -> |
| | | val packages = Core.code.getByKeyword(station.nickname).map { code -> |
| | | ExpressPackage( |
| | | // id = code.id, //ID |
| | | id = code.id, //ID |
| | | company = code.name, //快递公司 |
| | | trackingNumber = code.code, // 取件码 |
| | | date = code.overtime //时间 |
| | | createTime = code.createtime //快递时间 |
| | | ) |
| | | } |
| | | ExpressGroup( |
| | |
| | | android:layout_width="match_parent" |
| | | android:layout_height="wrap_content" |
| | | android:orientation="horizontal" |
| | | android:gravity="center_vertical"> |
| | | android:layout_marginBottom="12dp"> |
| | | |
| | | <ImageView |
| | | android:id="@+id/iv_back" |
| | | android:layout_width="24dp" |
| | | android:layout_height="24dp" |
| | | android:layout_width="20dp" |
| | | android:layout_height="20dp" |
| | | android:layout_gravity="center_vertical" |
| | | android:src="@drawable/location"/> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_station_name" |
| | | android:layout_width="wrap_content" |
| | | android:layout_width="0dp" |
| | | android:layout_height="wrap_content" |
| | | android:layout_marginStart="16dp" |
| | | android:layout_weight="1" |
| | | android:layout_marginStart="8dp" |
| | | android:textSize="18sp" |
| | | android:textColor="#333333"/> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_package_count" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="24dp" |
| | | android:layout_marginStart="8dp" |
| | | android:layout_height="wrap_content" |
| | | android:textColor="#666666" |
| | | android:textSize="14sp" /> |
| | | </LinearLayout> |
| | |
| | | android:padding="12dp" |
| | | android:gravity="center_vertical"> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_package_info" |
| | | android:layout_width="match_parent" |
| | | <ImageView |
| | | android:id="@+id/iv_company_logo" |
| | | android:layout_width="20dp" |
| | | android:layout_height="20dp" |
| | | android:layout_marginEnd="6dp"/> |
| | | |
| | | <LinearLayout |
| | | android:layout_width="0dp" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="16sp" |
| | | android:textColor="#333333"/> |
| | | android:layout_weight="1" |
| | | android:orientation="vertical"> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_company" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="12sp" |
| | | android:textColor="#333333" |
| | | android:textStyle="bold"/> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_create_time" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="12sp" |
| | | android:textColor="#666666" |
| | | android:layout_marginTop="4dp"/> |
| | | </LinearLayout> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_tracking_number" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="25sp" |
| | | android:textColor="#333333" |
| | | android:layout_marginStart="12dp" |
| | | android:textStyle="bold"/> |
| | | |
| | | </LinearLayout> |
| | |
| | | android:src="@drawable/circle"/> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_package_info" |
| | | android:layout_width="match_parent" |
| | | android:id="@+id/tv_package_id" |
| | | android:layout_width="0dp" |
| | | android:layout_height="0dp" |
| | | android:visibility="gone"/> |
| | | |
| | | <ImageView |
| | | android:id="@+id/iv_company_logo" |
| | | android:layout_width="20dp" |
| | | android:layout_height="20dp" |
| | | android:layout_marginEnd="6dp"/> |
| | | |
| | | <LinearLayout |
| | | android:layout_width="0dp" |
| | | android:layout_height="wrap_content" |
| | | android:layout_marginStart="16dp" |
| | | android:textSize="16sp" |
| | | android:textColor="#333333"/> |
| | | android:layout_weight="1" |
| | | android:orientation="vertical"> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_company" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="12sp" |
| | | android:textColor="#333333" |
| | | android:textStyle="bold"/> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_create_time" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="12sp" |
| | | android:textColor="#666666" |
| | | android:layout_marginTop="4dp"/> |
| | | </LinearLayout> |
| | | |
| | | <TextView |
| | | android:id="@+id/tv_tracking_number" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:textSize="25sp" |
| | | android:textColor="#333333" |
| | | android:layout_marginStart="12dp" |
| | | android:textStyle="bold"/> |
| | | |
| | | </LinearLayout> |
| | |
| | | android.precompileDependenciesResources=false |
| | | android.enableJetifier=true |
| | | #android.enableD8=true |
| | | org.gradle.java.home=D\:\\devInstall\\java\\jdk-17.0.12 |
| | | org.gradle.java.home=D\:\\tanjiyaun\\jdk\\jdk1.8\\jdk-17.0.12 |
| | | |