|
@@ -6,17 +6,118 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.zxyj.entity.Guide;
|
|
import com.zxyj.entity.Guide;
|
|
|
import com.zxyj.entity.GuideApplication;
|
|
import com.zxyj.entity.GuideApplication;
|
|
|
|
|
+import com.zxyj.entity.GuideApplicationRecord;
|
|
|
import com.zxyj.mapper.GuideApplicationMapper;
|
|
import com.zxyj.mapper.GuideApplicationMapper;
|
|
|
|
|
+import com.zxyj.mapper.GuideApplicationRecordMapper;
|
|
|
import com.zxyj.mapper.GuideMapper;
|
|
import com.zxyj.mapper.GuideMapper;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
public class GuideApplicationService extends ServiceImpl<GuideApplicationMapper, GuideApplication> {
|
|
public class GuideApplicationService extends ServiceImpl<GuideApplicationMapper, GuideApplication> {
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private GuideApplicationRecordMapper guideApplicationRecordMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private GuideMapper guideMapper;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建申请(初始状态:draft)
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean createDraft(Long userId, String type, String targetLevel, Long packageId,
|
|
|
|
|
+ String realName, String phone, String idCard,
|
|
|
|
|
+ String teacherNo, String teacherPhoto, String certificateImage,
|
|
|
|
|
+ String address, String bankCard, String bankName) {
|
|
|
|
|
+ GuideApplication application = new GuideApplication();
|
|
|
|
|
+ application.setUserId(userId);
|
|
|
|
|
+ application.setType(type);
|
|
|
|
|
+ application.setTargetLevel(targetLevel);
|
|
|
|
|
+ application.setPackageId(packageId);
|
|
|
|
|
+ application.setStatus("draft");
|
|
|
|
|
+ application.setAddress(address);
|
|
|
|
|
+ application.setBankCard(bankCard);
|
|
|
|
|
+ application.setBankName(bankName);
|
|
|
|
|
+ application.setCreatedAt(new Date());
|
|
|
|
|
+ boolean saved = this.save(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (saved) {
|
|
|
|
|
+ addRecord(application.getId(), userId, "create", null, "draft", "创建申请");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return saved;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 提交申请(draft -> pending)
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public boolean submitApplication(Long applicationId, Long userId) {
|
|
|
|
|
+ GuideApplication application = this.getById(applicationId);
|
|
|
|
|
+ if (application == null || !"draft".equals(application.getStatus())) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ application.setStatus("pending");
|
|
|
|
|
+ application.setUpdatedAt(new Date());
|
|
|
|
|
+ boolean updated = this.updateById(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (updated) {
|
|
|
|
|
+ addRecord(applicationId, userId, "submit", "draft", "pending", "提交审核");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return updated;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 撤回申请(pending -> withdrawn)
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public boolean withdrawApplication(Long applicationId, Long userId) {
|
|
|
|
|
+ GuideApplication application = this.getById(applicationId);
|
|
|
|
|
+ if (application == null || !"pending".equals(application.getStatus())) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ application.setStatus("withdrawn");
|
|
|
|
|
+ application.setUpdatedAt(new Date());
|
|
|
|
|
+ boolean updated = this.updateById(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (updated) {
|
|
|
|
|
+ addRecord(applicationId, userId, "withdraw", "pending", "withdrawn", "申请人撤回");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return updated;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 重新提交(withdrawn/rejected -> pending)
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public boolean resubmitApplication(Long applicationId, Long userId) {
|
|
|
|
|
+ GuideApplication application = this.getById(applicationId);
|
|
|
|
|
+ if (application == null) return false;
|
|
|
|
|
+ String currentStatus = application.getStatus();
|
|
|
|
|
+ if (!"withdrawn".equals(currentStatus) && !"rejected".equals(currentStatus)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ application.setStatus("pending");
|
|
|
|
|
+ application.setRejectReason(null);
|
|
|
|
|
+ application.setUpdatedAt(new Date());
|
|
|
|
|
+ boolean updated = this.updateById(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (updated) {
|
|
|
|
|
+ addRecord(applicationId, userId, "resubmit", currentStatus, "pending", "重新提交审核");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return updated;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public boolean applyNew(Long userId, String targetLevel, Long packageId, String paymentProof) {
|
|
public boolean applyNew(Long userId, String targetLevel, Long packageId, String paymentProof) {
|
|
|
GuideApplication application = new GuideApplication();
|
|
GuideApplication application = new GuideApplication();
|
|
|
application.setUserId(userId);
|
|
application.setUserId(userId);
|
|
@@ -26,7 +127,13 @@ public class GuideApplicationService extends ServiceImpl<GuideApplicationMapper,
|
|
|
application.setPaymentProof(paymentProof);
|
|
application.setPaymentProof(paymentProof);
|
|
|
application.setStatus("pending");
|
|
application.setStatus("pending");
|
|
|
application.setCreatedAt(new Date());
|
|
application.setCreatedAt(new Date());
|
|
|
- return this.save(application);
|
|
|
|
|
|
|
+ boolean saved = this.save(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (saved) {
|
|
|
|
|
+ addRecord(application.getId(), userId, "submit", null, "pending", "提交新申请");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return saved;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public boolean applyUpgrade(Long userId, String fromLevel, String toLevel, String paymentProof) {
|
|
public boolean applyUpgrade(Long userId, String fromLevel, String toLevel, String paymentProof) {
|
|
@@ -38,7 +145,13 @@ public class GuideApplicationService extends ServiceImpl<GuideApplicationMapper,
|
|
|
application.setPaymentProof(paymentProof);
|
|
application.setPaymentProof(paymentProof);
|
|
|
application.setStatus("pending");
|
|
application.setStatus("pending");
|
|
|
application.setCreatedAt(new Date());
|
|
application.setCreatedAt(new Date());
|
|
|
- return this.save(application);
|
|
|
|
|
|
|
+ boolean saved = this.save(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (saved) {
|
|
|
|
|
+ addRecord(application.getId(), userId, "submit", null, "pending", "提交升级申请");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return saved;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public List<GuideApplication> getPendingApplications() {
|
|
public List<GuideApplication> getPendingApplications() {
|
|
@@ -48,27 +161,70 @@ public class GuideApplicationService extends ServiceImpl<GuideApplicationMapper,
|
|
|
return this.list(wrapper);
|
|
return this.list(wrapper);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public List<GuideApplication> getUserApplications(Long userId) {
|
|
|
|
|
+ LambdaQueryWrapper<GuideApplication> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ wrapper.eq(GuideApplication::getUserId, userId)
|
|
|
|
|
+ .orderByDesc(GuideApplication::getCreatedAt);
|
|
|
|
|
+ return this.list(wrapper);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Transactional
|
|
@Transactional
|
|
|
public boolean approveApplication(Long applicationId, Long reviewedBy) {
|
|
public boolean approveApplication(Long applicationId, Long reviewedBy) {
|
|
|
GuideApplication application = this.getById(applicationId);
|
|
GuideApplication application = this.getById(applicationId);
|
|
|
if (application == null) return false;
|
|
if (application == null) return false;
|
|
|
|
|
|
|
|
|
|
+ String fromStatus = application.getStatus();
|
|
|
application.setStatus("approved");
|
|
application.setStatus("approved");
|
|
|
application.setReviewedAt(new Date());
|
|
application.setReviewedAt(new Date());
|
|
|
application.setReviewedBy(reviewedBy);
|
|
application.setReviewedBy(reviewedBy);
|
|
|
- this.updateById(application);
|
|
|
|
|
|
|
+ boolean updated = this.updateById(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (updated) {
|
|
|
|
|
+ addRecord(applicationId, reviewedBy, "approve", fromStatus, "approved", "审核通过");
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Transactional
|
|
|
public boolean rejectApplication(Long applicationId, Long reviewedBy, String reason) {
|
|
public boolean rejectApplication(Long applicationId, Long reviewedBy, String reason) {
|
|
|
GuideApplication application = this.getById(applicationId);
|
|
GuideApplication application = this.getById(applicationId);
|
|
|
if (application == null) return false;
|
|
if (application == null) return false;
|
|
|
|
|
|
|
|
|
|
+ String fromStatus = application.getStatus();
|
|
|
application.setStatus("rejected");
|
|
application.setStatus("rejected");
|
|
|
application.setReviewedAt(new Date());
|
|
application.setReviewedAt(new Date());
|
|
|
application.setReviewedBy(reviewedBy);
|
|
application.setReviewedBy(reviewedBy);
|
|
|
application.setRejectReason(reason);
|
|
application.setRejectReason(reason);
|
|
|
- return this.updateById(application);
|
|
|
|
|
|
|
+ boolean updated = this.updateById(application);
|
|
|
|
|
+
|
|
|
|
|
+ if (updated) {
|
|
|
|
|
+ addRecord(applicationId, reviewedBy, "reject", fromStatus, "rejected", reason);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return updated;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取申请的处理记录
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<GuideApplicationRecord> getApplicationRecords(Long applicationId) {
|
|
|
|
|
+ LambdaQueryWrapper<GuideApplicationRecord> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ wrapper.eq(GuideApplicationRecord::getApplicationId, applicationId)
|
|
|
|
|
+ .orderByAsc(GuideApplicationRecord::getCreatedAt);
|
|
|
|
|
+ return guideApplicationRecordMapper.selectList(wrapper);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void addRecord(Long applicationId, Long userId, String action,
|
|
|
|
|
+ String fromStatus, String toStatus, String remark) {
|
|
|
|
|
+ GuideApplicationRecord record = new GuideApplicationRecord();
|
|
|
|
|
+ record.setApplicationId(applicationId);
|
|
|
|
|
+ record.setUserId(userId);
|
|
|
|
|
+ record.setAction(action);
|
|
|
|
|
+ record.setFromStatus(fromStatus);
|
|
|
|
|
+ record.setToStatus(toStatus);
|
|
|
|
|
+ record.setRemark(remark);
|
|
|
|
|
+ record.setCreatedAt(new Date());
|
|
|
|
|
+ guideApplicationRecordMapper.insert(record);
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
+}
|