访客预约审批流程审批人改为申请人自选
This commit is contained in:
@@ -71,16 +71,9 @@ public class AppointmentService {
|
|||||||
record.setId(UUID.randomUUID().toString().replace("-", ""));
|
record.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
record.setStatus("pending");
|
record.setStatus("pending");
|
||||||
record.setStatusText("待审核");
|
record.setStatusText("待审核");
|
||||||
|
|
||||||
// 发起企业微信审批
|
// 发起企业微信审批
|
||||||
try {
|
try {
|
||||||
String visitTime = record.getVisitDate();
|
String spNo = wxApprovalService.submitApproval(creatorUserId,record);
|
||||||
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);
|
record.setSpNo(spNo);
|
||||||
log.info("企业微信审批提交成功, spNo: {}", spNo);
|
log.info("企业微信审批提交成功, spNo: {}", spNo);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ public class VisitorApprovalService {
|
|||||||
private String formatVisitTime(VisitApplication record) {
|
private String formatVisitTime(VisitApplication record) {
|
||||||
String time = record.getVisitDate();
|
String time = record.getVisitDate();
|
||||||
if (record.getVisitTime() != null && !record.getVisitTime().isEmpty()) {
|
if (record.getVisitTime() != null && !record.getVisitTime().isEmpty()) {
|
||||||
time = record.getVisitDate() + " " + record.getVisitTime();
|
time = record.getVisitDate() + " " + record.getVisitTime().split("-")[0]+":00";
|
||||||
}
|
}
|
||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
package com.example.mini_program.service;
|
package com.example.mini_program.service;
|
||||||
|
|
||||||
import com.example.mini_program.config.WxCorpConfig;
|
import com.example.mini_program.config.WxCorpConfig;
|
||||||
|
import com.example.mini_program.entity.VisitApplication;
|
||||||
import com.example.mini_program.util.HttpUtil;
|
import com.example.mini_program.util.HttpUtil;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import lombok.Data;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
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.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -54,18 +51,18 @@ public class WxApprovalService {
|
|||||||
/**
|
/**
|
||||||
* 提交审批申请
|
* 提交审批申请
|
||||||
*/
|
*/
|
||||||
public String submitApproval(String creatorUserId, String visitorName, String visitorPhone,
|
public String submitApproval(String creatorUserId, VisitApplication record) {
|
||||||
String visitorCompany, String visitPurpose, String visitTime,
|
|
||||||
String visiteeName, String visitArea) {
|
|
||||||
String url = String.format(SUBMIT_URL, getAccessToken());
|
String url = String.format(SUBMIT_URL, getAccessToken());
|
||||||
|
|
||||||
Map<String, Object> body = new HashMap<>();
|
Map<String, Object> body = new HashMap<>();
|
||||||
body.put("creator_userid", creatorUserId);
|
body.put("creator_userid", creatorUserId);
|
||||||
body.put("template_id", wxCorpConfig.getApprovalTemplateId());
|
body.put("template_id", wxCorpConfig.getApprovalTemplateId());
|
||||||
body.put("use_template_approver", 1);
|
body.put("use_template_approver", 0);
|
||||||
body.put("apply_data", buildApplyData(visitorName, visitorPhone, visitorCompany,
|
body.put("approver", List.of(
|
||||||
visitPurpose, visitTime, visiteeName, visitArea));
|
Map.of("attr", 1, "userid", List.of(record.getPersonId()))
|
||||||
body.put("summary_list", buildSummaryList(visitorName, visitPurpose));
|
));
|
||||||
|
body.put("apply_data", buildApplyData(record));
|
||||||
|
body.put("summary_list", buildSummaryList(record.getName(), record.getReason()));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String json = objectMapper.writeValueAsString(body);
|
String json = objectMapper.writeValueAsString(body);
|
||||||
@@ -82,17 +79,19 @@ public class WxApprovalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---- 内部方法 ----
|
// ---- 内部方法 ----
|
||||||
private Map<String, Object> buildApplyData(String visitorName, String visitorPhone,
|
private Map<String, Object> buildApplyData(VisitApplication record) {
|
||||||
String visitorCompany, String visitPurpose,
|
|
||||||
String visitTime, String visiteeName, String visitArea) {
|
|
||||||
List<Map<String, Object>> contents = new ArrayList<>();
|
List<Map<String, Object>> contents = new ArrayList<>();
|
||||||
contents.add(textControl("Text-1776786661954", visitorName));
|
contents.add(textControl("Text-1776786661954", record.getName()));
|
||||||
contents.add(textControl("Text-1776786666351", visitorPhone));
|
contents.add(textControl("Text-1776786666351", record.getPhone()));
|
||||||
contents.add(textControl("Text-1776786668098", visitorCompany));
|
contents.add(textControl("Text-1776786668098", record.getCompany()));
|
||||||
contents.add(textControl("Text-1776786672408", visitPurpose));
|
contents.add(textControl("Text-1776786672408", record.getReason()));
|
||||||
contents.add(dateControl("Date-1776786680089", visitTime));
|
String visitTime = record.getVisitDate();
|
||||||
contents.add(textControl("Text-1776786690968", visiteeName));
|
if (record.getVisitTime() != null && !record.getVisitTime().isEmpty()) {
|
||||||
contents.add(textControl("Text-1776786692400", visitArea));
|
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);
|
return Map.of("contents", contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,21 +100,6 @@ public class WxApprovalService {
|
|||||||
"value", Map.of("text", value != null ? value : ""));
|
"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) {
|
private List<Map<String, Object>> buildSummaryList(String visitorName, String visitPurpose) {
|
||||||
return List.of(
|
return List.of(
|
||||||
Map.of("summary_info", List.of(
|
Map.of("summary_info", List.of(
|
||||||
@@ -124,11 +108,4 @@ public class WxApprovalService {
|
|||||||
Map.of("text", "目的: " + (visitPurpose != null ? visitPurpose : ""), "lang", "zh_CN")))
|
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">
|
<sql id="Base_Column_List">
|
||||||
id, name, phone, company, reason,person_id,check_status,plate_number,
|
id, name, phone, company, reason,person_id,check_status,plate_number,
|
||||||
DATE_FORMAT(visit_date, '%Y-%m-%d') AS visit_date,
|
DATE_FORMAT(visit_date, '%Y-%m-%d') AS visit_date, visit_time,
|
||||||
DATE_FORMAT(visit_time, '%H:%i') AS visit_time,
|
|
||||||
host_name, area, status, status_text, openid,
|
host_name, area, status, status_text, openid,
|
||||||
DATE_FORMAT(create_time, '%Y-%m-%dT%H:%i:%s.000+00:00') AS create_time,
|
DATE_FORMAT(create_time, '%Y-%m-%dT%H:%i:%s.000+00:00') AS create_time,
|
||||||
sp_no
|
sp_no
|
||||||
|
|||||||
Reference in New Issue
Block a user