كمطور كبير لجافا الربيع،

يرجى تقديم مثال الخدمة باستخدام التكوين التالي.

ستحتوي هذه الخدمة على ثلاثة تغييرات في الحالة
1. الانتظار
2. في انتظار المعالجة
3. اكتملت المعالجة
```
الحزمة com.m800.zboss.billing.app.config؛

import com.m800.zboss.lib.consts.BaseField;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.statemachine.config.EnableStateMachine;
import com.m800.zboss.lib.dao.zboss.UsageFileQueueDao;
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter;
import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer;
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
import org.springframework.statemachine.StateContext;
import org.springframework.statemachine.action.Action;
import com.m800.zboss.lib.enums.UsageFileState;
import com.m800.zboss.lib.enums.UsageFileEvent;
import com.m800.zboss.billing.app.repository.zuora.UsageFileQueueRepository;
import com.m800.zboss.billing.app.repository.zuora.UsageFileLogRepository;
import java.util.EnumSet;

@إعدادات
@EnableStateMachine
@Slf4j
الطبقة العامة UsageFileStateMachineConfig تمتد EnumStateMachineConfigurerAdapter {
 @Autowired
 استخدام خاص FileQueueRepository useFileQueueRepository؛

 @Autowired
 استخدام خاص FileLogRepository useFileLogRepository؛

 @تجاوز
 تكوين الفراغ العام (تكوين StateMachineConfigurationConfigurer) يطرح الاستثناء {
 config.withConfiguration().autoStartup(true);
 }

 @تجاوز
 تكوين الفراغ العام (حالات StateMachineStateConfigurer) يطرح الاستثناء {
 states.withStates()
 .initial(UsageFileState.Waiting)
 .states(EnumSet.allOf(UsageFileState.class));
 }

 @تجاوز
 تكوين الفراغ العام (انتقالات StateMachineTransitionConfigurer) يطرح الاستثناء {
 الانتقالات
 .withExternal()
 .target(UsageFileState.Waiting)
 .الحدث(UsageFileEvent.Waiting)
 .action(initWaitingAction())
 .و()
 .withExternal()
 .المصدر (UsageFileState.Waiting)
 .target(UsageFileState.Processing)
 .event(UsageFileEvent.Start\_Processing)
 .action(processingTransitionAction())
 .و()
 .withExternal()
 المصدر (UsageFileState.Processing)
 .target(UsageFileState.Completed)
 .event(UsageFileEvent.Processing\_Completed)
 .action(CompletedTransitionAction())
 .و()
 .withExternal()
 المصدر (UsageFileState.Processing)
 .target(UsageFileState.Failed)
 .event(UsageFileEvent.Processing\_Failed)
 .action(failedTransitionAction());
 }

 إجراء خاص initWaitingAction() {
 إرجاع الإجراء الجديد () {
 @تجاوز
 تنفيذ الفراغ العام (سياق الحالة) {
 رقم حساب السلسلة =
 (سلسلة) context.getMessage().getHeaders().get(BaseField.AccountNumber);
 رقم الاشتراك في السلسلة =
 (سلسلة) context.getMessage().getHeaders().get(BaseField.SubscriptionNumber);
 useFileQueueDao useFileQueueDao
 = new useFileQueueDao(accountNumber,scriptionNumber);

 UseFileQueueDao currentQueue =
 useFileQueueRepository
 .findQueueWithSubscriptionStatus(
 رقم الاشتراك، UseFileState.Waiting)؛
 إذا (currentQueue == فارغة) {
 useFileQueueRepository.insert(UsageFileQueueDao.class, useFileQueueDao);
 }
 }
 };
 }
 معالجة الإجراء الخاصTransitionAction() {
 إرجاع الإجراء الجديد () {
 @تجاوز
 تنفيذ الفراغ العام (سياق الحالة) {
 معرف السلسلة = (سلسلة) context.getMessage().getHeaders().get(BaseField.ID);
 useFileQueueRepository
 .updateStatusById(id,UsageFileState.Waiting,UsageFileState.Processing);
 }
 };
 }

 تم الانتهاء من الإجراء الخاص TransitionAction () {
 إرجاع الإجراء الجديد () {
 @تجاوز
 تنفيذ الفراغ العام (سياق الحالة) {
 معرف السلسلة = (سلسلة) context.getMessage().getHeaders().get(BaseField.ID);
 useFileQueueDao useFileQueue =
 useFileQueueRepository
 .updateStatusById(
 معرف، UseFileState.Processing، UseFileState.Completed)؛
 useFileLogRepository.insert(UsageFileQueueDao.class, useFileQueue);
 useFileQueueRepository.deleteById(id);
 }
 };
 }

 فشل الإجراء الخاصTransitionAction() {
 إرجاع الإجراء الجديد () {
 @تجاوز
 تنفيذ الفراغ العام (سياق الحالة) {
 معرف السلسلة = (سلسلة) context.getMessage().getHeaders().get(BaseField.ID);
 useFileQueueDao useFileQueue =
 useFileQueueRepository
 .updateStatusById(
 معرف، UseFileState.Processing، UseFileState.Failed)؛
 useFileLogRepository.insert(UsageFileQueueDao.class, useFileQueue);
 useFileQueueRepository.deleteById(id);
 }
 };
 }
}
```
{"source": "ewof/sharegpt-instruct-unfiltered-deduped", "kind": "human", "evolved_from": null}