访客预约审批流程审批人改为申请人自选

This commit is contained in:
chenglijuan
2026-05-07 14:09:14 +08:00
parent 8ddeb97c7e
commit 10b7c15dc7
4 changed files with 23 additions and 54 deletions
@@ -71,16 +71,9 @@ 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()
);
String spNo = wxApprovalService.submitApproval(creatorUserId,record);
record.setSpNo(spNo);
log.info("企业微信审批提交成功, spNo: {}", spNo);
} catch (Exception e) {
@@ -105,7 +105,7 @@ public class VisitorApprovalService {
private String formatVisitTime(VisitApplication record) {
String time = record.getVisitDate();
if (record.getVisitTime() != null && !record.getVisitTime().isEmpty()) {
time = record.getVisitDate() + " " + record.getVisitTime();
time = record.getVisitDate() + " " + record.getVisitTime().split("-")[0]+":00";
}
return time;
}
@@ -1,16 +1,13 @@
package com.example.mini_program.service;
import com.example.mini_program.config.WxCorpConfig;
import com.example.mini_program.entity.VisitApplication;
import com.example.mini_program.util.HttpUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -54,18 +51,18 @@ public class WxApprovalService {
/**
* 提交审批申请
*/
public String submitApproval(String creatorUserId, String visitorName, String visitorPhone,
String visitorCompany, String visitPurpose, String visitTime,
String visiteeName, String visitArea) {
public String submitApproval(String creatorUserId, VisitApplication record) {
String url = String.format(SUBMIT_URL, getAccessToken());
Map<String, Object> body = new HashMap<>();
body.put("creator_userid", creatorUserId);
body.put("template_id", wxCorpConfig.getApprovalTemplateId());
body.put("use_template_approver", 1);
body.put("apply_data", buildApplyData(visitorName, visitorPhone, visitorCompany,
visitPurpose, visitTime, visiteeName, visitArea));
body.put("summary_list", buildSummaryList(visitorName, visitPurpose));
body.put("use_template_approver", 0);
body.put("approver", List.of(
Map.of("attr", 1, "userid", List.of(record.getPersonId()))
));
body.put("apply_data", buildApplyData(record));
body.put("summary_list", buildSummaryList(record.getName(), record.getReason()));
try {
String json = objectMapper.writeValueAsString(body);
@@ -82,17 +79,19 @@ public class WxApprovalService {
}
// ---- 内部方法 ----
private Map<String, Object> buildApplyData(String visitorName, String visitorPhone,
String visitorCompany, String visitPurpose,
String visitTime, String visiteeName, String visitArea) {
private Map<String, Object> buildApplyData(VisitApplication record) {
List<Map<String, Object>> contents = new ArrayList<>();
contents.add(textControl("Text-1776786661954", visitorName));
contents.add(textControl("Text-1776786666351", visitorPhone));
contents.add(textControl("Text-1776786668098", visitorCompany));
contents.add(textControl("Text-1776786672408", visitPurpose));
contents.add(dateControl("Date-1776786680089", visitTime));
contents.add(textControl("Text-1776786690968", visiteeName));
contents.add(textControl("Text-1776786692400", visitArea));
contents.add(textControl("Text-1776786661954", record.getName()));
contents.add(textControl("Text-1776786666351", record.getPhone()));
contents.add(textControl("Text-1776786668098", record.getCompany()));
contents.add(textControl("Text-1776786672408", record.getReason()));
String visitTime = record.getVisitDate();
if (record.getVisitTime() != null && !record.getVisitTime().isEmpty()) {
visitTime = record.getVisitDate() + " " + record.getVisitTime();
}
contents.add(textControl("Text-1778132408837", visitTime));
contents.add(textControl("Text-1776786690968", record.getHostName()));
contents.add(textControl("Text-1776786692400", record.getArea()));
return Map.of("contents", contents);
}
@@ -101,21 +100,6 @@ public class WxApprovalService {
"value", Map.of("text", value != null ? value : ""));
}
private Map<String, Object> dateControl(String id, String dateTime) {
long timestamp = 0;
if (dateTime != null && !dateTime.isEmpty()) {
try {
timestamp = LocalDateTime.parse(dateTime,
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
.atZone(ZoneId.of("Asia/Shanghai")).toInstant().getEpochSecond();
} catch (Exception e) {
log.warn("日期解析失败: {}", dateTime);
}
}
return Map.of("control", "Date", "id", id,
"value", Map.of("date", Map.of("type", "hour", "s_timestamp", String.valueOf(timestamp))));
}
private List<Map<String, Object>> buildSummaryList(String visitorName, String visitPurpose) {
return List.of(
Map.of("summary_info", List.of(
@@ -124,11 +108,4 @@ public class WxApprovalService {
Map.of("text", "目的: " + (visitPurpose != null ? visitPurpose : ""), "lang", "zh_CN")))
);
}
@Data
public static class ApprovalStatus {
private String spNo;
private Integer spStatus;
private String spStatusText;
}
}
@@ -24,8 +24,7 @@
<sql id="Base_Column_List">
id, name, phone, company, reason,person_id,check_status,plate_number,
DATE_FORMAT(visit_date, '%Y-%m-%d') AS visit_date,
DATE_FORMAT(visit_time, '%H:%i') AS visit_time,
DATE_FORMAT(visit_date, '%Y-%m-%d') AS visit_date, visit_time,
host_name, area, status, status_text, openid,
DATE_FORMAT(create_time, '%Y-%m-%dT%H:%i:%s.000+00:00') AS create_time,
sp_no