Generating commit message...

This commit is contained in:
ws
2026-04-22 10:12:12 +08:00
parent 254a317ff9
commit 95d08a7257
9 changed files with 43 additions and 56 deletions
@@ -24,4 +24,5 @@ public class VisitApplication {
private String statusText;
private String openid;
private String createTime;
private String spNo;
}
@@ -4,6 +4,7 @@ import com.example.mini_program.entity.VisitApplication;
import com.example.mini_program.mapper.VisitApplicationMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -15,6 +16,10 @@ import java.util.UUID;
public class AppointmentService {
private final VisitApplicationMapper visitApplicationMapper;
private final WxApprovalService wxApprovalService;
@Value("${wx.corp.creator-userid:}")
private String creatorUserId;
/**
* 根据openid获取最新的一条预约记录
@@ -47,6 +52,29 @@ public class AppointmentService {
record.setId(UUID.randomUUID().toString().replace("-", ""));
record.setStatus("pending");
record.setStatusText("待审核");
// 发起企业微信审批
try {
String visitTime = record.getVisitDate();
if (record.getVisitTime() != null && !record.getVisitTime().isEmpty()) {
visitTime = record.getVisitDate() + " " + record.getVisitTime();
}
String spNo = wxApprovalService.submitApproval(
creatorUserId,
record.getName(),
record.getPhone(),
record.getCompany(),
record.getReason(),
visitTime,
record.getHostName(),
record.getArea()
);
record.setSpNo(spNo);
log.info("企业微信审批提交成功, spNo: {}", spNo);
} catch (Exception e) {
log.error("企业微信审批提交失败,预约记录仍会保存", e);
}
visitApplicationMapper.insert(record);
log.info("创建预约记录成功, id: {}, openid: {}", record.getId(), record.getOpenid());
return record;
@@ -51,9 +51,9 @@ public class WxApprovalService {
}
/**
* 提交审批申请
* 提交审批申请(使用模板中配置的审批流程)
*
* @param approverUserId 审批人用户ID
* @param creatorUserId 申请人用户ID
* @param visitorName 访客姓名
* @param visitorPhone 访客电话
* @param visitorCompany 访客公司(可选)
@@ -61,13 +61,11 @@ public class WxApprovalService {
* @param visitTime 日期+时间
* @param visiteeName 被访人(可选)
* @param visitArea 拜访区域(可选)
* @param applicantUserId 申请人用户ID(可选,用于追踪)
* @return 审批单号
*/
public String submitApproval(String approverUserId, String visitorName, String visitorPhone,
public String submitApproval(String creatorUserId, String visitorName, String visitorPhone,
String visitorCompany, String visitPurpose, String visitTime,
String visiteeName, String visitArea,
String applicantUserId) {
String visiteeName, String visitArea) {
String accessToken = getAccessToken();
String url = String.format(SUBMIT_APPROVAL_URL, accessToken);
@@ -75,19 +73,15 @@ public class WxApprovalService {
Map<String, Object> applyData = buildApplyData(visitorName, visitorPhone, visitorCompany,
visitPurpose, visitTime, visiteeName, visitArea);
// 构建审批流程(use_template_approver=0 时必填)
Map<String, Object> process = buildProcess(approverUserId);
// 构建摘要信息
List<Map<String, Object>> summaryList = buildSummaryList(visitorName, visitPurpose);
// 构建完整的审批请求体
// 构建完整的审批请求体use_template_approver=1 使用模板中配置的审批流程)
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("creator_userid", applicantUserId != null ? applicantUserId : approverUserId);
requestBody.put("creator_userid", creatorUserId);
requestBody.put("template_id", wxCorpConfig.getApprovalTemplateId());
requestBody.put("use_template_approver", 0);
requestBody.put("use_template_approver", 1);
requestBody.put("apply_data", applyData);
requestBody.put("process", process);
requestBody.put("summary_list", summaryList);
log.info("提交审批申请, visitorName: {}, visitorPhone: {}", visitorName, visitorPhone);
@@ -184,27 +178,6 @@ public class WxApprovalService {
);
}
/**
* 构建审批流程
* use_template_approver=0 时必填
* node_list: 流程节点列表
* type: 1-审批人 2-抄送人 3-办理人
* apv_rel: 多人审批方式 1-会签 2-或签 3-依次审批
* userid: 用户ID列表
*
* @param approverUserId 审批人用户ID
*/
private Map<String, Object> buildProcess(String approverUserId) {
List<Map<String, Object>> nodeList = List.of(
Map.of(
"type", 1,
"apv_rel", 1,
"userid", List.of(approverUserId)
)
);
return Map.of("node_list", nodeList);
}
/**
* 构建摘要信息,显示在审批通知卡片和审批列表中,最多3行
*/