Generating commit message...
This commit is contained in:
@@ -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行
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user