This commit is contained in:
zjf committed 2025-04-14 16:55:22 +08:00
1 parent 6a1935e8c6
commit 2973feb37a
7 files changed
+563 -40

No files matched your search

@@ -13,6 +13,7 @@ public enum TaskCheckStatusEnum {
PADDING("1", "审核中"),
RESULT("2", "审核通过"),
REJECT("3", "审核拒绝"),
CANCEL("4", "取消"),
;
private final String code;
@@ -137,7 +137,6 @@ public class VisitorsController {
@SysLog("新增访客" )
@PostMapping("/app/save")
@Idempotent(key = "#mobile", expireTime = 10, info = "请勿重复提交")
@Inner(value = false)
public R saveFK(@RequestBody VisitorsAppDTO visitors) {
return R.ok(visitorsService.vistorsSave(visitors));
}
@@ -190,17 +189,31 @@ public class VisitorsController {
*/
@Operation(summary = "app新增邀约" , description = "app新增拜访" )
@SysLog("新增邀约" )
@PostMapping("/app/saveBF")
@PostMapping("/app/saveYY")
@Idempotent(key = "#mobile", expireTime = 10, info = "请勿重复提交")
public R saveBF(@RequestBody VisitorsAppDTO visitors) {
public R saveYY(@RequestBody VisitorsAppDTO visitors) {
return R.ok(visitorsService.vistorsBFSave(visitors));
return R.ok(visitorsService.vistorsYYSave(visitors));
}
@GetMapping("/app/pageBF")
@GetMapping("/app/sq/page")
@SysLog("获取我的新增记录" )
public R getPage(@ParameterObject Page page, @ParameterObject VisitorsEntity visitors) {
return R.ok( visitorsService.getPageSQ(page, visitors));
}
@GetMapping("/app/yy/page")
@SysLog("获取我的邀约记录" )
public R getPageBF(@ParameterObject Page page, @ParameterObject VisitorsEntity visitors) {
return R.ok( visitorsService.getPageBF(page, visitors));
return R.ok( visitorsService.getPageYY(page, visitors));
}
@GetMapping("/app/updateCheckStatus")
@SysLog("更新状态" )
public R updateCheckStatus(@RequestParam("id")Long id,@RequestParam("checkStatus")String checkStatus) {
return R.ok( visitorsService.updateCheckStatus(id,checkStatus));
}
}
@@ -26,13 +26,31 @@ public interface VisitorsService extends IService<VisitorsEntity> {
/**
* 移动端发起拜访
* 移动端发起邀约
* @param visitors
* @return
*/
Object vistorsBFSave(VisitorsAppDTO visitors);
Object vistorsYYSave(VisitorsAppDTO visitors);
Object getPageBF(Page page, VisitorsEntity visitors);
Object getPageYY(Page page, VisitorsEntity visitors);
/**
* 直接更新预约状态
* @param id
* @param checkStatus
* @return
*/
Object updateCheckStatus(Long id, String checkStatus);
/**
* 获取我的新增的访客记录
* @param page
* @param visitors
* @return
*/
Object getPageSQ(Page page, VisitorsEntity visitors);
}
@@ -60,23 +60,23 @@ public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEnt
@Override
@Transactional
public Object vistorsSave(VisitorsAppDTO visitors) {
//发起流程
R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(IntegratedFlowConstant.INTEGRATED_VISITOR);
if (!processR.isOk() || processR.getData() == null) {
throw new ServiceException("流程配置获取失败: " + processR.getMsg());
}
String flowId = processR.getData().getFlowId();
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
if (!stringR.isOk() || stringR.getData() == null) {
throw new ServiceException("流程实例启动失败: " + stringR.getMsg());
}
String processInstanceId = stringR.getData();
// //发起流程
// R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(IntegratedFlowConstant.INTEGRATED_VISITOR);
// if (!processR.isOk() || processR.getData() == null) {
// throw new ServiceException("流程配置获取失败: " + processR.getMsg());
// }
// String flowId = processR.getData().getFlowId();
// ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
// processInstanceParamDto.setFlowId(flowId);
// R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
// if (!stringR.isOk() || stringR.getData() == null) {
// throw new ServiceException("流程实例启动失败: " + stringR.getMsg());
// }
// String processInstanceId = stringR.getData();
VisitorsEntity bean = BeanUtils.toBean(visitors, VisitorsEntity.class);
bean.setType(VisitorTypeEnum.FKSQ.getType());
bean.setProcessInstanceId(processInstanceId);
// bean.setProcessInstanceId(processInstanceId);
bean.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode());
String uniqueToken = UUID.randomUUID().toString();
@@ -118,24 +118,24 @@ public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEnt
@Override
@Transactional
public Object vistorsBFSave(VisitorsAppDTO visitors) {
public Object vistorsYYSave(VisitorsAppDTO visitors) {
//发起流程
R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(IntegratedFlowConstant.INTEGRATED_VISITOR);
if (!processR.isOk() || processR.getData() == null) {
throw new ServiceException("流程配置获取失败: " + processR.getMsg());
}
String flowId = processR.getData().getFlowId();
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
if (!stringR.isOk() || stringR.getData() == null) {
throw new ServiceException("流程实例启动失败: " + stringR.getMsg());
}
String processInstanceId = stringR.getData();
// R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(IntegratedFlowConstant.INTEGRATED_VISITOR);
// if (!processR.isOk() || processR.getData() == null) {
// throw new ServiceException("流程配置获取失败: " + processR.getMsg());
// }
// String flowId = processR.getData().getFlowId();
// ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
// processInstanceParamDto.setFlowId(flowId);
// R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
// if (!stringR.isOk() || stringR.getData() == null) {
// throw new ServiceException("流程实例启动失败: " + stringR.getMsg());
// }
// String processInstanceId = stringR.getData();
Long deptId = SecurityUtils.getUser().getDeptId();
VisitorsEntity bean = BeanUtils.toBean(visitors, VisitorsEntity.class);
bean.setType(VisitorTypeEnum.ZDYQ.getType());
bean.setProcessInstanceId(processInstanceId);
// bean.setProcessInstanceId(processInstanceId);
bean.setDeptId(deptId);
bean.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode());
@@ -163,11 +163,11 @@ public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEnt
}
@Override
public Object getPageBF(Page page, VisitorsEntity visitors) {
public Object getPageYY(Page page, VisitorsEntity visitors) {
Long userId = SecurityUtils.getUser().getId();
LambdaQueryWrapper<VisitorsEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(VisitorsEntity::getUserId, userId);
wrapper.eq(VisitorsEntity::getType, VisitorTypeEnum.ZDYQ.getType());
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
List<VisitorsAppPageVo> records = pageData.getRecords();
@@ -176,7 +176,31 @@ public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEnt
List<VisitorsAppPageVo> visitorsAppPageVos = BeanUtils.toBean(records, VisitorsAppPageVo.class);
resultPage.setRecords(visitorsAppPageVos);
return resultPage;
}
@Override
public Object updateCheckStatus(Long id, String checkStatus) {
VisitorsEntity visitors = new VisitorsEntity();
visitors.setId(id);
visitors.setCheckStatus(checkStatus);
return baseMapper.updateById(visitors);
}
@Override
public Object getPageSQ(Page page, VisitorsEntity visitors) {
Long userId = SecurityUtils.getUser().getId();
LambdaQueryWrapper<VisitorsEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(VisitorsEntity::getUserId, userId);
wrapper.eq(VisitorsEntity::getType, VisitorTypeEnum.FKSQ.getType());
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
List<VisitorsAppPageVo> records = pageData.getRecords();
Page<VisitorsAppPageVo> resultPage = new Page<>();
org.springframework.beans.BeanUtils.copyProperties(pageData, resultPage, "records"); // 复制分页参数
List<VisitorsAppPageVo> visitorsAppPageVos = BeanUtils.toBean(records, VisitorsAppPageVo.class);
resultPage.setRecords(visitorsAppPageVos);
return resultPage;
}
@@ -0,0 +1,210 @@
package com.bsd.pjcloud.thirdparty.utils.sms;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 类说明:短信HTTP API示例
* 类名称: SmsSendDemo.java
*
* @author zjf
* @version v1.0.0
* @date 2019/3/22 21:55
*/
@Component
public class SmsHTTPSend {
private static final Logger logger = LoggerFactory.getLogger(SmsHTTPSend.class);
/**
* 企业编号
*/
@Value("${LianTongSMS.SP_CODE}")
private String SP_CODE;
/**
* 登录用户名
*/
@Value("${LianTongSMS.LOGIN_NAME}")
private String LOGIN_NAME;
/**
* 登录用户密码
*/
@Value("${LianTongSMS.PASSWORD}")
private String PASSWORD;
/**
* 签名id
*/
@Value("${LianTongSMS.AUTOGRAPH_ID}")
private String AUTOGRAPH_ID;
/* //单条
String sendUrl = "http://ytx.zj165.com:9098/api/send";
//群发
String sendUrlBatch = "http://ytx.zj165.com:9098/api/batchSend";*/
String sendUrl = "http://ytx.i5gmsg.com:9098/api/send";
String sendUrlBatch="http://ytx.i5gmsg.com:9098/api/batchSend";
/**
* 功能描述:短信发送,POST请求
*
* @param content 短信内容,type短信类型
* @return void
*/
public Boolean smsSendByPost(String content, String phone) {
try {
// 初始化参数
Map<String, Object> params = initSmsParams(content, phone);
String result = SmsHttpUtils.doPost(sendUrl, params);
logger.debug("请求url地址={}", sendUrl);
logger.debug("请求参数体={}", params);
logger.info("POST短信发送的响应报文【{}】", result);
return true;
} catch (IOException e) {
logger.error("POST短信发送发生异常", e);
return false;
}
}
/**
* 功能描述:获取短信回执,POST请求
*
* @param url 短信url地址
* @return void
*/
private void smsReportByPost(String url) {
try {
Map<String, Object> params = new HashMap<>();
params.put("SpCode", SP_CODE);
params.put("LoginName", LOGIN_NAME);
params.put("Password", PASSWORD);
logger.debug("请求url地址={}", url);
logger.debug("请求参数体={}", params);
String result = SmsHttpUtils.doPost(url, params);
logger.info("POST短信回执的响应报文【{}】", result);
} catch (IOException e) {
logger.error("POST短信回执发生异常", e);
}
}
/**
* 功能描述:初始化短信参数
*
* @param
* @return java.util.Map<java.lang.String, java.lang.Object>
*/
private Map<String, Object> initSmsParams(String content, String phone) throws UnsupportedEncodingException {
Date date = Calendar.getInstance().getTime();
String messageContent = encodeStr(content);
String scheduleTime = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
String serialNumber = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + this.getThreeRandomNumbers();
Map<String, Object> params = new HashMap<>(9);
params.put("SpCode", SP_CODE);
params.put("LoginName", LOGIN_NAME);
params.put("Password", PASSWORD);
//短信内容, 最大480个字(短信内容要求的编码为gbk)
params.put("MessageContent", messageContent);
//短信类型,1=验证码、2=通知、3=广告 (没传或者非1、2、3系统会默认为4=其他)
params.put("MessageType", "2");
//手机号码(多个号码用”,”分隔),最多1000个号码
params.put("UserNumber", phone);
//流水号,20位数字,唯一 (规则自定义,建议时间格式精确到毫秒)
params.put("SerialNumber", serialNumber);
//预约发送时间,格式:yyyyMMddhhmmss,如‘20090901010101’
params.put("ScheduleTime", scheduleTime);
//接入号扩展号(默认不填,扩展号为数字,扩展位数由当前所配的接入号长度决定,整个接入号最长4位)
params.put("ExtendAccessNum", "");
/*
* 提交时检测方式
* 为1时,提交号码中有效的号码仍正常发出短信,无效的号码在返回参数faillist中列出
* 不为1或不传时,提交号码中只要有无效的号码,所有的号码都不发短信,所有的号码在返回参数faillist中列出
*/
params.put("f", "");
params.put("AutographId", AUTOGRAPH_ID);
return params;
}
public void smsBatchSend(String content, String[] phone) {
try {
// 初始化参数
String params = initBatchSend(content, phone);
logger.debug("请求url地址={}", sendUrlBatch);
logger.debug("请求参数体={}", params);
String result = SmsHttpUtils.doPostBody(sendUrlBatch, params);
logger.info("POST短信发送的响应报文 {}", result);
} catch (IOException e) {
logger.error("POST短信发送发生异常", e);
}
}
private String initBatchSend(String content, String[] phone) {
Date date = Calendar.getInstance().getTime();
String scheduleTime = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
String serialNumber = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + this.getThreeRandomNumbers();
Map<String, Object> params = new HashMap<>();
params.put("SpCode", SP_CODE);
params.put("LoginName", LOGIN_NAME);
params.put("Password", PASSWORD);
//短信类型,1=验证码、2=通知、3=广告 (没传或者非1、2、3系统会默认为4=其他)
params.put("MessageType", 2);
//流水号,20位数字,唯一 (规则自定义,建议时间格式精确到毫秒)
params.put("SerialNumber", serialNumber);
//预约发送时间,格式:yyyyMMddhhmmss,如‘20090901010101’
params.put("ScheduleTime", scheduleTime);
/*
* 提交时检测方式
* 为1时,提交号码中有效的号码仍正常发出短信,无效的号码在返回参数faillist中列出
* 不为1或不传时,提交号码中只要有无效的号码,所有的号码都不发短信,所有的号码在返回参数faillist中列出
*/
params.put("f", "1");
/*
* 签名ID,可选参数,如果不传则使用默认签名发送
*/
params.put("AutographId", AUTOGRAPH_ID);
List<Map<String, Object>> memberList = new ArrayList<>();
for (int i = 0; i < phone.length; i++) {
Map<String, Object> member = new HashMap<>();
member.put("UserNumber", phone[i]);
member.put("MessageContent", content);
memberList.add(member);
}
params.put("MemberList", memberList);
return JSON.toJSONString(params);
}
/**
* 功能描述:编码
*
* @param str 编码字符串
* @return void
*/
public String encodeStr(String str) throws UnsupportedEncodingException {
return URLEncoder.encode(str, "GBK");
}
/**
* 功能描述:获得3位随机数
*
* @param
* @return int
*/
private int getThreeRandomNumbers() {
return new Random().nextInt(900) + 100;
}
}
@@ -0,0 +1,248 @@
package com.bsd.pjcloud.thirdparty.utils.sms;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 类说明:Http请求工具
* 类名称: HttpUtils.java
* @version v1.0.0
* @author uccp
* @date 2019/3/22 22:37
*/
public class SmsHttpUtils {
private static final Logger logger = LoggerFactory.getLogger(SmsHttpUtils.class);
private static RequestConfig requestConfig;
private static final int MAX_TIMEOUT = 10000;
static {
RequestConfig.Builder configBuilder = RequestConfig.custom();
// 设置连接超时
configBuilder.setConnectTimeout(MAX_TIMEOUT);
// 设置读取超时
configBuilder.setSocketTimeout(MAX_TIMEOUT);
requestConfig = configBuilder.build();
}
/**
* 功能描述:发送 GET 请求(HTTP),不带参数
*
* @param url 请求地址
* @return java.lang.String
*/
public static String doGet(String url) throws IOException {
return doGet(url, new HashMap<>(16));
}
/**
* 功能描述:发送 GET 请求(HTTP),带参数Key-Value形式
*
* @param url 请求地址
* @param params 请求参数对象
* @return java.lang.String
*/
public static String doGet(String url, Map<String, Object> params) throws IOException {
String apiUrl = url;
StringBuffer param = new StringBuffer();
int i = 0;
for (String key : params.keySet()) {
if (i == 0) {
param.append("?");
} else {
param.append("&");
}
param.append(key).append("=").append(params.get(key));
i++;
}
apiUrl += param;
String result = null;
HttpClient httpClient = HttpClients.createDefault();
try {
HttpGet httpGet = new HttpGet(apiUrl);
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
result = readInputStreamToString(instream, "UTF-8");
}
} catch (IOException e) {
logger.error("doGet请求异常", e);
throw e;
}
return result;
}
/**
* 功能描述:发送 POST 请求(HTTP),不带参数
*
* @param url 请求地址
* @return java.lang.String
*/
public static String doPost(String url) throws IOException {
return doPost(url, new HashMap<>(16));
}
/**
* 功能描述:发送 POST 请求(HTTP),带参数Key-Value形式
*
* @param url 请求地址
* @param params 请求参数对象
* @return java.lang.String
*/
public static String doPost(String url, Map<String, Object> params) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
String httpStr;
HttpPost httpPost = new HttpPost(url);
//这里要提前设置好Content-type请求头
httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
CloseableHttpResponse response = null;
try {
httpPost.setConfig(requestConfig);
List<NameValuePair> pairList = new ArrayList<>(params.size());
for (Map.Entry<String, Object> entry : params.entrySet()) {
NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());
pairList.add(pair);
}
httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8")));
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
logger.error("doPost请求异常", e);
throw e;
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
throw e;
}
}
}
return httpStr;
}
/**
* 功能描述:发送 POST 请求(HTTP),带参数Key-Value形式
*
* @param url 请求地址
* @param soapParams webservice请求参数
* @return java.lang.String
*/
public static String doPost(String url, String soapParams) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
String httpStr;
HttpPost httpPost = new HttpPost(url);
//这里要提前设置好Content-type请求头
httpPost.setHeader("Content-type", "text/xml;charset=UTF-8");
CloseableHttpResponse response = null;
try {
httpPost.setConfig(requestConfig);
httpPost.setEntity(new StringEntity(soapParams, Charset.forName("UTF-8")));
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
logger.error("doPost请求异常", e);
throw e;
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
throw e;
}
}
}
return httpStr;
}
public static String doPostBody(String url, String bodyPrams) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
String httpStr;
HttpPost httpPost = new HttpPost(url);
//这里要提前设置好Content-type请求头
httpPost.setHeader("Content-type", "application/json");
CloseableHttpResponse response = null;
try {
httpPost.setConfig(requestConfig);
httpPost.setEntity(new StringEntity(bodyPrams, Charset.forName("UTF-8")));
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
logger.error("doPost请求异常", e);
throw e;
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
throw e;
}
}
}
return httpStr;
}
/**
* 功能描述:读取流的数据
*
* @param inputStream 输入流对象
* @param charsetName 字符集名称
* @return java.lang.String
*/
private static String readInputStreamToString(InputStream inputStream, String charsetName) throws IOException {
StringBuffer sb = new StringBuffer();
// 定义BufferedReader输入流来读取URL的响应
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(inputStream, charsetName));
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
logger.error("readInputStreamToString读取异常", e);
throw e;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e2) {
logger.error("流关闭异常", e2);
throw e2;
}
}
return sb.toString();
}
}
@@ -108,4 +108,13 @@ sms:
default-ext-code: "123"
timeout-seconds: 300
#联通短信配置
LianTongSMS:
#企业编号
SP_CODE: '11122'
#登录用户名
LOGIN_NAME: ''
#登录用户密码
PASSWORD: 'Aa123456'
#签名id
AUTOGRAPH_ID: ''