更新后新增排程提交

This commit is contained in:
fengjignqi
2026-05-29 10:47:02 +08:00
parent e1d13665ab
commit a8b9aabf20
2 changed files with 190 additions and 36 deletions

View File

@@ -116,6 +116,25 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
case R.id.tv_bind:
WaterConfigFragment_copy configFragment = (WaterConfigFragment_copy) mFragmentList.get(0);
// 检查是否有未保存的数据变更
if (configFragment.hasDataChanged()) {
showDialogtext(null, false, false, true,
"提示", "数据已发生变更,是否保存?",
getString(R.string.cancel_text), "保存", new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {
}
@Override
public void onConfirmClick() {
// 保存配置后切换
configFragment.commitConfig();
}
});
return;
}
if (!configFragment.isConfigSubmitted()) {
showDialogtext(null, false, false, true,
"提示", "关联设备需要保存排程配置,是否继续?",
@@ -132,9 +151,10 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
return;
}
viewBinding.tvConfig.setSelected(false);
viewBinding.tvBind.setSelected(true);
viewBinding.viewpage.setCurrentItem(1);
proceedToBindDevice();
break;
default:
break;
@@ -158,6 +178,18 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
bindDeviceFragment.setPlanEntity(entity);
}
/**
* 切换到绑定设备页面
*/
private void proceedToBindDevice() {
WaterConfigFragment_copy configFragment = (WaterConfigFragment_copy) mFragmentList.get(0);
WaterPlanWeekEntity entity = mIsEditMode ? mEditEntity : mNewAddEntity;
if (entity == null) {
entity = configFragment.getRemoteEntity();
}
selectTabBind(entity);
}
public void onConfigSaved(WaterPlanWeekEntity entity) {
mNewAddEntity = entity;
selectTabBind(entity);

View File

@@ -172,9 +172,31 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
break;
case R.id.tv_commit:
validateAndSave();
break;
}
}
public boolean isConfigSubmitted() {
return isConfigSubmitted;
}
/**
* 校验并保存配置(供外部调用)
* @return true表示校验通过并已提交保存false表示校验失败
*/
public boolean commitConfig() {
return validateAndSave();
}
/**
* 校验配置并保存
* @return true表示校验通过并已提交保存false表示校验失败
*/
private boolean validateAndSave() {
if(TextUtils.isEmpty(viewBinding.editPlanName.getText().toString())){
ToastUtil.showShort(mContext,getString(R.string.plan_name_text_empty_hint));
return;
return false;
}
// 检查七天的所有时间配置是否全部为空
boolean allTimeEmpty = true;
@@ -192,27 +214,127 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
}
if (allTimeEmpty) {
ToastUtil.showShort(mContext, "请至少配置一天的时间");
return;
return false;
}
// 校验每一天内的时间是否有冲突
String conflictMsg = checkTimeConflict();
if (conflictMsg != null) {
ToastUtil.showShort(mContext, conflictMsg);
return;
return false;
}
if(mLocalEntity != null){
mPresenter.saveConfig(mLocalEntity);
return true;
}
return false;
}
/**
* 获取远程实体用于AddWaterPlanActivity比对
* @return mRemoteEntity
*/
public WaterPlanWeekEntity getRemoteEntity() {
return mRemoteEntity;
}
/**
* 获取本地实体用于AddWaterPlanActivity比对
* @return mLocalEntity
*/
public WaterPlanWeekEntity getLocalEntity() {
return mLocalEntity;
}
/**
* 检查本地数据是否与远程数据有变更
* @return true表示有变更false表示无变更
*/
public boolean hasDataChanged() {
if (mRemoteEntity == null || mLocalEntity == null) {
return false;
}
// 比对排程名称
String localName = mLocalEntity.getName();
String remoteName = mRemoteEntity.getName();
if (!TextUtils.isEmpty(localName) && !localName.equals(remoteName)) {
return true;
}
// 比对排程状态
String localStatus = mLocalEntity.getStatus();
String remoteStatus = mRemoteEntity.getStatus();
if (!TextUtils.isEmpty(localStatus) && !localStatus.equals(remoteStatus)) {
return true;
}
// 比对 details 列表
List<WaterPlanWeekEntity.DetailsBean> localDetails = mLocalEntity.getDetails();
List<WaterPlanWeekEntity.DetailsBean> remoteDetails = mRemoteEntity.getDetails();
if (localDetails == null && remoteDetails == null) {
return false;
}
if (localDetails == null || remoteDetails == null) {
return true;
}
if (localDetails.size() != remoteDetails.size()) {
return true;
}
// 逐个比对每个 DetailsBean
for (int i = 0; i < localDetails.size(); i++) {
WaterPlanWeekEntity.DetailsBean localDetail = localDetails.get(i);
WaterPlanWeekEntity.DetailsBean remoteDetail = remoteDetails.get(i);
// 比对 status
String localDetailStatus = localDetail.getStatus();
String remoteDetailStatus = remoteDetail.getStatus();
if (!TextUtils.isEmpty(localDetailStatus) && !localDetailStatus.equals(remoteDetailStatus)) {
return true;
}
// 比对 triggerType
String localTriggerType = localDetail.getTriggerType();
String remoteTriggerType = remoteDetail.getTriggerType();
if (!TextUtils.isEmpty(localTriggerType) && !localTriggerType.equals(remoteTriggerType)) {
return true;
}
// 比对 timeData 列表
List<WaterPlanWeekEntity.TimeDataBean> localTimeData = localDetail.getTimeData();
List<WaterPlanWeekEntity.TimeDataBean> remoteTimeData = remoteDetail.getTimeData();
if (localTimeData == null && remoteTimeData == null) {
continue;
}
if (localTimeData == null || remoteTimeData == null) {
return true;
}
if (localTimeData.size() != remoteTimeData.size()) {
return true;
}
// 逐个比对 TimeDataBean
for (int j = 0; j < localTimeData.size(); j++) {
WaterPlanWeekEntity.TimeDataBean localTime = localTimeData.get(j);
WaterPlanWeekEntity.TimeDataBean remoteTime = remoteTimeData.get(j);
// 比对 startTime
String localStartTime = localTime.getStartTime();
String remoteStartTime = remoteTime.getStartTime();
if (!TextUtils.isEmpty(localStartTime) && !localStartTime.equals(remoteStartTime)) {
return true;
}
// 比对 durationMin
if (localTime.getDurationMin() != remoteTime.getDurationMin()) {
return true;
}
// isConfigSubmitted = true;
break;
}
}
public boolean isConfigSubmitted() {
return isConfigSubmitted;
}
public void commitConfig() {
return false;
}
/**