Merge branch 'master' of http://git.hchbox.com/yuyou/eladmin into master

master
土豆兄弟 3 years ago
commit 14891755d0

@ -19,6 +19,11 @@ public enum ResponseCode {
// 通用请求参数校验
ILLEGAL_ARGUMENT(1,"请求参数格式错误"),
EMPTY_ARGUMENT(1,"请求参数为空"),
/** modeify by wzx
*/
NO_SMS_BAD(1,"短信内容有问题"),
NO_MATCH_ARGUMENT_SET(1,"不能满足要求的参数设置"),
NO_FILE_INPUT(1,"没有文件输入"),
// 特殊需要进行前端返回说明的参数定义

@ -100,6 +100,8 @@ public class BuildRecord implements Serializable {
@ApiModelProperty(value = "活动任务ID")
private Long taskBuildId;
public void copy(BuildRecord source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}

@ -29,6 +29,7 @@ import me.zhengjie.modules.buildrecord.service.dto.BuildRecordQueryCriteria;
import me.zhengjie.modules.buildrecord.task.ProduceBigDataTask;
import me.zhengjie.modules.buildrecord.task.SendBigDataTask;
import me.zhengjie.modules.buildrecord.task.dto.SendBigDataDTO;
import me.zhengjie.modules.buildrecord.util.WordFilter;
import me.zhengjie.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
@ -40,6 +41,8 @@ import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -57,6 +60,7 @@ public class BuildRecordController {
private final BuildRecordService buildRecordService;
@Autowired
private ProduceBigDataTask produceBigDataTask;
@Autowired
@ -165,6 +169,16 @@ public class BuildRecordController {
){
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK);
}
//判断内容是否含有不良词
if(buildRecordSendVO.getRemoteRecord() != null){
if (!StringUtils.isBlank(buildRecordSendVO.getRemoteRecord().getSmsContent())){
WordFilter wf = new WordFilter();
String filter_search = wf.filter_search(buildRecordSendVO.getRemoteRecord().getSmsContent());
if (buildRecordSendVO.getRemoteRecord().getSmsContent().length() != filter_search.length()){
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_SMS_BAD), HttpStatus.OK);
}
}
}
SendBigDataDTO sendBigDataDTO = new SendBigDataDTO();
BeanUtil.copyProperties(buildRecordSendVO, sendBigDataDTO);
// 调用发送课包任务,开始发送
@ -218,4 +232,19 @@ public class BuildRecordController {
// ========================= 自定义的大数据平台相关的接口 start =========================
// @Log("上传并加密任务")
// @ApiOperation("上传并加密任务")
// @AnonymousAccess
// @PostMapping("/aa")
//// @ResponseBody
// public ResponseEntity<Object> aa(Long taskBuildId,String addressTag,String sendName,String onlyName,String smsContent){
// BuildRecord buildRecord = new BuildRecord();
// buildRecord.setId(94);
// buildRecord.setSmsContent("哈哈哈哈111");
// buildRecord.setLinkUrl("https://fanyi.youdao.com/");
// buildRecordService.update(buildRecord);
//// buildRecordService.updateSmsContent(smsContent,94);
// return new ResponseEntity<>(CommonResponse.createBySuccess(), HttpStatus.OK);
// }
}

@ -0,0 +1,5 @@
package me.zhengjie.modules.buildrecord.rest.consts;
public class Sysconts {
public static final Integer NO_SEND = 0;
}

@ -3,19 +3,27 @@ package me.zhengjie.modules.buildrecord.task;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.common.json.PushDBJsonContent;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.buildrecord.domain.BuildRecord;
import me.zhengjie.modules.buildrecord.rest.consts.Sysconts;
import me.zhengjie.modules.buildrecord.service.BuildRecordService;
import me.zhengjie.modules.buildrecord.service.dto.BuildRecordDto;
import me.zhengjie.modules.buildrecord.task.dto.SendBigDataDTO;
import me.zhengjie.modules.buildrecord.task.model.SendSmsContenJsonContent;
import me.zhengjie.modules.remoterec.consts.SysConst;
import me.zhengjie.modules.remoterec.domain.RemoteRecord;
import me.zhengjie.modules.remoterec.service.RemoteRecordService;
import me.zhengjie.modules.remoterec.service.dto.RemoteRecordDto;
import me.zhengjie.modules.smscontent.domain.TbSendSmsContent;
import me.zhengjie.modules.smscontent.service.TbSendSmsContentService;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentDto;
import me.zhengjie.modules.tag.domain.Tag;
import me.zhengjie.modules.tag.service.TagService;
import me.zhengjie.modules.tag.service.dto.TagDto;
@ -23,10 +31,7 @@ import me.zhengjie.modules.tag.service.dto.TagQueryCriteria;
import me.zhengjie.modules.taskrecord.service.TaskRecordService;
import me.zhengjie.modules.taskrecord.service.dto.TaskRecordDto;
import me.zhengjie.modules.taskrecord.service.dto.TaskRecordQueryCriteria;
import me.zhengjie.utils.ConvertUtil;
import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.HttpUtil;
import me.zhengjie.utils.StringUtils;
import me.zhengjie.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
@ -39,6 +44,7 @@ import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
@ -83,6 +89,12 @@ public class SendBigDataTask {
@Value(value = "${req.db.host}")
private String host;
/**
*
*/
@Value(value = "${inter.address}")
private String sendtAddress;
@Autowired
private BuildRecordService buildRecordService;
@ -93,6 +105,9 @@ public class SendBigDataTask {
@Autowired
private RemoteRecordService remoteRecordService;
@Autowired
private TbSendSmsContentService tbSendSmsContentService;
@Async(value = "SendBigDataTaskExecutor")
public void doRunTask(BuildRecord resource, RemoteRecord remoteRecord, SendBigDataDTO sendBigDataDTO){
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
@ -110,36 +125,65 @@ public class SendBigDataTask {
// 获取需要进行去重的任务路径
String resultFilePath = getPreFilterPath(sendBigDataDTO);
if (resource.getId() != null){
// 根据发送任务的Id来读取发送号码表
Integer id = resource.getId();
BuildRecordDto buildRecordDto = buildRecordService.findById(id);
// 本地表库中的记录的源
collect = getTagsFromLocalDBRec(resource, sendBigDataDTO, buildRecordDto);
// 进行去重逻辑
collect = getNotDuplicateContent(collect, resultFilePath);
// 批量发送并且更新记录内容
// 对需要发送的字段进行发送
AtomicLong atomicLong = batchSend(collect, sendBigDataDTO, buildRecordDto);
finishSendThenUpdateRec(resource, buildRecordDto, atomicLong);
if (resource != null){
if (resource.getId() != null){
// 根据发送任务的Id来读取发送号码表
Integer id = resource.getId();
BuildRecordDto buildRecordDto = buildRecordService.findById(id);
// 本地表库中的记录的源
collect = getTagsFromLocalDBRec(resource, sendBigDataDTO, buildRecordDto);
// 进行去重逻辑
collect = getNotDuplicateContent(collect, resultFilePath);
// 批量发送并且更新记录内容
// 对需要发送的字段进行发送
AtomicLong atomicLong = batchSend(collect, sendBigDataDTO, buildRecordDto);
finishSendThenUpdateRec(resource, buildRecordDto, atomicLong);
}
}
if (remoteRecord.getId() != null){
RemoteRecordDto remoteRecordDto = remoteRecordService.findById(remoteRecord.getId());
waitSendSuccessRemoteRec(remoteRecordDto);
// 远程文件存储形式的源
remoteCollect = getRemoteRecFromLocal(remoteRecordDto);
// 进行去重逻辑
remoteCollect = getNotDuplicateRemoteContent(remoteCollect, resultFilePath);
// 批量发送信息并且更新记录
AtomicLong atomicLong = batchSendRemote(remoteCollect, sendBigDataDTO, resource);
finishSendThenUpdateRemoteRec(remoteRecord, atomicLong);
if (remoteRecord != null){
if (remoteRecord.getId() != null){
RemoteRecordDto remoteRecordDto = remoteRecordService.findById(remoteRecord.getId());
waitSendSuccessRemoteRec(remoteRecordDto);
// 远程文件存储形式的源
remoteCollect = getRemoteRecFromLocal(remoteRecordDto);
// 进行去重逻辑
remoteCollect = getNotDuplicateRemoteContent(remoteCollect, resultFilePath);
// 批量发送信息并且更新记录
AtomicLong atomicLong = batchSendRemote(remoteCollect, sendBigDataDTO, resource);
finishSendThenUpdateRemoteRec(remoteRecord, atomicLong);
}
//给文件上传系统发送短信内容
if (remoteRecord.getId() != null){
log.info("========== [SaveToFileTask|runTask ========== SmsContent"+remoteRecord.getSmsContent()+" LinkUrl:"+remoteRecord.getLinkUrl());
if (remoteRecord.getSmsContent() != null && remoteRecord.getLinkUrl() != null){
//将短信内容和url放入数据库中
remoteRecordService.update(remoteRecord);
RemoteRecordDto remoteRecordDto = remoteRecordService.findById(remoteRecord.getId());
if (remoteRecordDto != null){
TbSendSmsContent tbSendSmsContent = new TbSendSmsContent();
tbSendSmsContent.setSmsContent(remoteRecord.getSmsContent());
tbSendSmsContent.setSendStatus(Sysconts.NO_SEND);
tbSendSmsContent.setTaskName(sendBigDataDTO.getSendName());
Timestamp nousedate = new Timestamp(System.currentTimeMillis());
tbSendSmsContent.setPushTime(nousedate);
tbSendSmsContent.setGmtCreate(nousedate);
tbSendSmsContent.setGmtModified(nousedate);
tbSendSmsContent.setLinkUrl(remoteRecord.getLinkUrl());
tbSendSmsContent.setOperation(remoteRecordDto.getOperation());
TbSendSmsContentDto tbSendSmsContentDto = tbSendSmsContentService.create(tbSendSmsContent);
tbSendSmsContentDto.setTaskName(sendBigDataDTO.getSendName());
if (tbSendSmsContentDto != null ){
sendSmsContent(remoteRecord,tbSendSmsContentDto);
}
}
}
}
}
// 乱序 乱序的逻辑写在SQL语句中
// Collections.shuffle(collect);
}
private void waitSendSuccessRemoteRec(RemoteRecordDto remoteRecordDto) {
@ -415,5 +459,63 @@ public class SendBigDataTask {
// 返回拼接结果
return builder.toString();
}
//发给文件系统短信内容
private void sendSmsContent(RemoteRecord resource,TbSendSmsContentDto tbSendSmsContentDto){
// 组装成JSON
SendSmsContenJsonContent sendSmsContenJsonContent = new SendSmsContenJsonContent();
sendSmsContenJsonContent.setTaskName(tbSendSmsContentDto.getTaskName());
sendSmsContenJsonContent.setSmsContent(resource.getSmsContent());
sendSmsContenJsonContent.setLinkUrl(resource.getLinkUrl());
sendSmsContenJsonContent.setOperator(tbSendSmsContentDto.getOperation());
String readSendJsonStr = JSON.toJSONString(sendSmsContenJsonContent);
log.info("SendBigDataTask|sendSmsContent ready send json is : {}", readSendJsonStr);
int count = 0;
while (count < 3) {
// 调用HTTP请求发送数据
HttpResponse httpResponse = sendPostReq(readSendJsonStr);
log.info("========== [SaveToFileTask|sendSmsContent request success, response is {} ] ==========", httpResponse.body()+" " +httpResponse.isOk());
if (httpResponse.isOk() && httpResponse.body().contains("SUCCESS")) {
log.info("========== [SaveToFileTask|sendSmsContent request success, response is {} ] ==========", httpResponse.body());
break;
} else {
count++;
try {
// 重新发送前休眠3秒
Thread.sleep(3_0000);
} catch (InterruptedException e) {
log.error("SendBigDataTask|sendSmsContent sleep ERROR. message is", e.getMessage(), e);
throw new BadRequestException("请求异常!!!");
}
log.error("========== [SendBigDataTask|sendSmsContent request fail, response is {} ] ==========", httpResponse.body());
}
}
TbSendSmsContent tbSendSmsContent = new TbSendSmsContent();
tbSendSmsContent.setId(tbSendSmsContentDto.getId());
if (count >= 3) {
log.error("========== [SendBigDataTask|sendSmsContent update send status fail, url is {} ] ==========" );
throw new BadRequestException("请求异常!!!");
} else {
//发送成功!!
tbSendSmsContent.setSendStatus(1);
}
tbSendSmsContentService.update(tbSendSmsContent);
}
/**
* HTTPPost
*
* @param json body
* @return
*/
private HttpResponse sendPostReq(String json) {
HttpResponse httpResponse = HttpRequest
.post(sendtAddress)
.header("Content-Type", "application/json;charset=utf-8")
.body(json)
.execute();
return httpResponse;
}
}

@ -0,0 +1,616 @@
package me.zhengjie.modules.buildrecord.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
public class KeyWordFilter {
public static final String PATH_DIC_WFC = "/lib/wfc.dic";
public static final String PATH_DIC_FQC = "/lib/fqc.dic";
private HashMap<String, String> wfc_map = null;
private HashMap<String, String> fqc_map = null;
private HashMap<String, Integer> firstword_map = new HashMap<String, Integer>();
private HashMap<String, Integer> firstword_fqc_map = new HashMap<String, Integer>();
private static KeyWordFilter singleton;
private KeyWordFilter() {
}
public synchronized static KeyWordFilter getInstance() {
if (singleton == null) {
singleton = new KeyWordFilter();
}
return singleton;
}
public synchronized HashMap<String, String> getWfcMap() {
if (wfc_map == null) {
wfc_map = getWordMap(PATH_DIC_WFC, "");
}
return wfc_map;
}
public synchronized HashMap<String, String> getFqcMap() {
if (fqc_map == null) {
fqc_map = getWordMap(PATH_DIC_FQC, "");
}
return fqc_map;
}
public synchronized HashMap<String, Integer> getFirstwordMap() {
if (firstword_map == null) {
firstword_map = new HashMap<String, Integer>();
}
return firstword_map;
}
public synchronized HashMap<String, Integer> getFirstwordFqcMap() {
if (firstword_fqc_map == null) {
firstword_fqc_map = new HashMap<String, Integer>();
}
return firstword_fqc_map;
}
public boolean reload() {
try {
wfc_map = null;
fqc_map = null;
KeyWordFilter.getInstance().getWfcMap();
KeyWordFilter.getInstance().getFqcMap();
return true;
} catch (Exception e) {
return false;
}
}
public boolean restart() {
try {
singleton = null;
getInstance();
return true;
} catch (Exception e) {
return false;
}
}
private HashMap<String, String> getWordMap(String dicPath, String replace) {
InputStream is = null;
HashMap<String, String> wordMap = new HashMap<String, String>();
try {
// is = new FileInputStream(dicPath);
is = KeyWordFilter.class.getResourceAsStream(dicPath);
if (is == null) {
System.out.println(dicPath + " not found!!!");
}
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"UTF-8"), 512);
String theWord = null;
HashMap<String, Integer> firstword = getFirstwordMap();
HashMap<String, Integer> firstword_fqc = getFirstwordFqcMap();
String ss = null;
if (dicPath.equals(PATH_DIC_FQC)) {
do {
theWord = br.readLine();
if (theWord != null && !"".equals(theWord.trim())) {
String[] sss = theWord.trim().toLowerCase().split("@@");
if (sss[0] != null && !sss[0].equals("")) {
if (firstword_fqc
.containsKey(sss[0].toCharArray()[0] + "")
&& firstword_fqc
.get(sss[0].toCharArray()[0] + "") > sss[0]
.length()) {
// do nothing
} else {
firstword_fqc.put(sss[0].toCharArray()[0] + "",
sss[0].length());
}
wordMap.put(sss[0], sss.length == 1 ? "" : sss[1]);
}
}
} while (theWord != null);
} else {
do {
theWord = br.readLine();
if (theWord != null && !"".equals(theWord.trim())) {
ss = theWord.trim().toLowerCase();
if (firstword.containsKey(ss.toCharArray()[0] + "")
&& firstword.get(ss.toCharArray()[0] + "") > ss
.length()) {
// do nothing
} else {
firstword.put(theWord.trim().toLowerCase()
.toCharArray()[0]
+ "", ss.length());
}
wordMap.put(theWord.trim().toLowerCase(), replace);
}
} while (theWord != null);
}
} catch (IOException ioe) {
if (is == null) {
System.err.println(dicPath + " not found!!!");
} else {
System.err.println(dicPath + " loading exception.");
}
ioe.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
is = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
return wordMap;
}
public String filter_in(String content, String sta, String usid) {
if (content == null || content.length() <= 0) {
return "0";
}
if (usid == null) {
usid = "0";
}
HashMap<String, String> wfc_map = KeyWordFilter.getInstance()
.getWfcMap();
HashMap<String, String> fqc_map = KeyWordFilter.getInstance()
.getFqcMap();
HashMap<String, Integer> firstword_map = KeyWordFilter.getInstance()
.getFirstwordMap();
HashMap<String, Integer> firstword_fqc_map = KeyWordFilter
.getInstance().getFirstwordFqcMap();
int result_type = 0;
char[] ch = content.toCharArray();
StringBuffer ret = new StringBuffer();
StringBuffer word = new StringBuffer();
int start = 0;
int step = 0;
int max_length = 1;
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_fqc_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_fqc_map.get(tmp.toLowerCase());
}
}
if (fqc_map.containsKey(tmp.toLowerCase())) {
ret.append(fqc_map.get(tmp.toLowerCase()));
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
ch = ret.toString().toCharArray();
word = new StringBuffer();
start = 0;
step = 0;
if (sta.equals("1")) {
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
result_type = 2;
break;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
word.delete(0, word.length());
i = start;
}
}
} else if (sta.equals("0")) {
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
result_type = 2;
break;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
word.delete(0, word.length());
i = start;
}
}
}
return Integer.toString(result_type);
}
public String filter_out(String content, String sta, String usid) {
if (content == null || content.length() <= 0) {
return "";
}
if (usid == null) {
usid = "0";
}
HashMap<String, String> wfc_map = KeyWordFilter.getInstance()
.getWfcMap();
HashMap<String, String> fqc_map = KeyWordFilter.getInstance()
.getFqcMap();
HashMap<String, Integer> firstword_map = KeyWordFilter.getInstance()
.getFirstwordMap();
HashMap<String, Integer> firstword_fqc_map = KeyWordFilter
.getInstance().getFirstwordFqcMap();
char[] ch = content.toCharArray();
StringBuffer ret = new StringBuffer();
StringBuffer word = new StringBuffer();
int start = 0;
int step = 0;
int max_length = 1;
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_fqc_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_fqc_map.get(tmp.toLowerCase());
}
}
if (fqc_map.containsKey(tmp.toLowerCase())) {
ret.append(fqc_map.get(tmp.toLowerCase()));
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
ch = ret.toString().toCharArray();
ret = new StringBuffer();
word = new StringBuffer();
start = 0;
step = 0;
if (sta.equals("1")) {
for (int i = 0; i < ch.length; i++) {
// System.out.println("i="+i+"\tstart="+start+"\tstep="+step+"\tret="+ret.toString());
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
ret.append("");
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
} else if (sta.equals("0")) {
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
ret.append("");
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
}
String rs = ret.toString().replace("⊙", "");
return rs;
}
public String filter_search(String content) {
if (content == null || content.length() <= 0) {
return "";
}
HashMap<String, String> fqc_map = KeyWordFilter.getInstance()
.getFqcMap();
HashMap<String, String> wfc_map = KeyWordFilter.getInstance()
.getWfcMap();
HashMap<String, Integer> firstword_map = KeyWordFilter.getInstance()
.getFirstwordMap();
HashMap<String, Integer> firstword_fqc_map = KeyWordFilter
.getInstance().getFirstwordFqcMap();
char[] ch = content.toCharArray();
StringBuffer ret = new StringBuffer();
StringBuffer word = new StringBuffer();
int start = 0;
int step = 0;
int max_length = 1;
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_fqc_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_fqc_map.get(tmp.toLowerCase());
}
}
if (fqc_map.containsKey(tmp.toLowerCase())) {
ret.append(fqc_map.get(tmp.toLowerCase()));
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
ch = ret.toString().toCharArray();
ret = new StringBuffer();
word = new StringBuffer();
start = 0;
step = 0;
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
ret.append("");
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
String rs = ret.toString().replace("⊙", "");
return rs;
}
public String filter_jk(String content, String sta, String usid,
String mgcstyle1, String mgcstyle2, String wfcstyle1,
String wfcstyle2) {
if (content == null || content.length() <= 0) {
return "";
}
if (usid == null) {
usid = "0";
}
HashMap<String, String> wfc_map = KeyWordFilter.getInstance()
.getWfcMap();
HashMap<String, String> fqc_map = KeyWordFilter.getInstance()
.getFqcMap();
HashMap<String, Integer> firstword_map = KeyWordFilter.getInstance()
.getFirstwordMap();
HashMap<String, Integer> firstword_fqc_map = KeyWordFilter
.getInstance().getFirstwordFqcMap();
char[] ch = content.toCharArray();
StringBuffer ret = new StringBuffer();
StringBuffer word = new StringBuffer();
int start = 0;
int step = 0;
int max_length = 1;
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_fqc_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_fqc_map.get(tmp.toLowerCase());
}
}
if (fqc_map.containsKey(tmp.toLowerCase())) {
ret.append(fqc_map.get(tmp.toLowerCase()));
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
ch = ret.toString().toCharArray();
ret = new StringBuffer();
word = new StringBuffer();
start = 0;
step = 0;
if (sta.equals("1")) {
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
ret.append(wfcstyle1);
ret.append(tmp.toLowerCase());
ret.append(wfcstyle2);
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
} else if (sta.equals("0")) {
for (int i = 0; i < ch.length; i++) {
if (step == 0) {
start = i;
step = 1;
}
char c = ch[i];
word.append(c);
String tmp = word.toString();
if (i == start) {
if (!firstword_map.containsKey(tmp.toLowerCase())) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
continue;
} else {
max_length = firstword_map.get(tmp.toLowerCase());
}
}
if (wfc_map.containsKey(tmp.toLowerCase())) {
ret.append(wfcstyle1);
ret.append(tmp.toLowerCase());
ret.append(wfcstyle2);
step = 0;
} else if (word.length() >= max_length || i >= ch.length - 1) {
step = 0;
ret.append(ch[start]);
word.delete(0, word.length());
i = start;
}
}
}
String rs = ret.toString().replace("⊙", "");
return rs;
}
}

@ -0,0 +1,38 @@
/*
10
filter_in_com
filter_in_info
filter_out_com
filter_out_info
filter_jk_com ;
filter_jk_info
*/
package me.zhengjie.modules.buildrecord.util;
public class WordFilter{
public KeyWordFilter kwf = KeyWordFilter.getInstance();
public String filter_jk_info(String content){
return kwf.filter_jk(content,"0","0","<font color=#ff0000>","</font>","<font color=#00ff00>","</font>");
}
public String filter_jk(String content,String sta,String mgcstyle1,String mgcstyle2,String wfcstyle1,String wfcstyle2){
return kwf.filter_jk(content,sta,"0",mgcstyle1, mgcstyle2, wfcstyle1, wfcstyle2);
}
public String filter_search(String content){
return kwf.filter_search(content);
}
/*
*
*/
public boolean reload(){
return kwf.reload();
}
}

@ -77,6 +77,14 @@ public class RemoteRecord implements Serializable {
@ApiModelProperty(value = "成功上传数量")
private Long successSendCount;
@Column(name = "sms_content")
@ApiModelProperty(value = "短信内容")
private String smsContent;
@Column(name = "link_url")
@ApiModelProperty(value = "短信链接")
private String linkUrl;
public void copy(RemoteRecord source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}

@ -95,6 +95,10 @@ public class DownloadSFTPFileTask {
if (StringUtils.isNotBlank(sftpFilePath)){
remoteFileToKLocal = sftpToDownloadFile(sftpFilePath, resources);
}
// //添加的部分
// remoteFileToKLocal = resources.getLocalSavePath()+"bak";
// log.info("remoteFileToKLocal============"+remoteFileToKLocal);
// 取回成功/失败,更新记录状态
RemoteRecord remoteRecord = new RemoteRecord();

@ -0,0 +1,79 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.domain;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @website https://el-admin.vip
* @description /
* @author weizhongxi
* @date 2021-04-16
**/
@Entity
@Data
@Table(name="tb_send_sms_content")
public class TbSendSmsContent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@ApiModelProperty(value = "id")
private Long id;
@Column(name = "gmt_create")
@ApiModelProperty(value = "创建时间")
private Timestamp gmtCreate;
@Column(name = "gmt_modified")
@ApiModelProperty(value = "修改时间")
private Timestamp gmtModified;
@Column(name = "operation")
@ApiModelProperty(value = "操作人")
private String operation;
@Column(name = "task_name")
@ApiModelProperty(value = "任务名称")
private String taskName;
@Column(name = "sms_content")
@ApiModelProperty(value = "短信内容")
private String smsContent;
@Column(name = "send_status")
@ApiModelProperty(value = "推送状态")
private Integer sendStatus;
@Column(name = "push_time")
@ApiModelProperty(value = "推送时间")
private Timestamp pushTime;
@Column(name = "link_url")
@ApiModelProperty(value = "推送时间")
private String linkUrl;
public void copy(TbSendSmsContent source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

@ -0,0 +1,28 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.repository;
import me.zhengjie.modules.smscontent.domain.TbSendSmsContent;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @website https://el-admin.vip
* @author weizhongxi
* @date 2021-04-16
**/
public interface TbSendSmsContentRepository extends JpaRepository<TbSendSmsContent, Long>, JpaSpecificationExecutor<TbSendSmsContent> {
}

@ -0,0 +1,87 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.rest;
import me.zhengjie.annotation.Log;
import me.zhengjie.modules.smscontent.domain.TbSendSmsContent;
import me.zhengjie.modules.smscontent.service.TbSendSmsContentService;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentQueryCriteria;
import org.springframework.data.domain.Pageable;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @website https://el-admin.vip
* @author weizhongxi
* @date 2021-04-16
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "发送短信内容管理")
@RequestMapping("/api/tbSendSmsContent")
public class TbSendSmsContentController {
private final TbSendSmsContentService tbSendSmsContentService;
@Log("导出数据")
@ApiOperation("导出数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('tbSendSmsContent:list')")
public void download(HttpServletResponse response, TbSendSmsContentQueryCriteria criteria) throws IOException {
tbSendSmsContentService.download(tbSendSmsContentService.queryAll(criteria), response);
}
@GetMapping
@Log("查询发送短信内容")
@ApiOperation("查询发送短信内容")
@PreAuthorize("@el.check('tbSendSmsContent:list')")
public ResponseEntity<Object> query(TbSendSmsContentQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(tbSendSmsContentService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@Log("新增发送短信内容")
@ApiOperation("新增发送短信内容")
@PreAuthorize("@el.check('tbSendSmsContent:add')")
public ResponseEntity<Object> create(@Validated @RequestBody TbSendSmsContent resources){
return new ResponseEntity<>(tbSendSmsContentService.create(resources),HttpStatus.CREATED);
}
@PutMapping
@Log("修改发送短信内容")
@ApiOperation("修改发送短信内容")
@PreAuthorize("@el.check('tbSendSmsContent:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody TbSendSmsContent resources){
tbSendSmsContentService.update(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除发送短信内容")
@ApiOperation("删除发送短信内容")
@PreAuthorize("@el.check('tbSendSmsContent:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
tbSendSmsContentService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}

@ -0,0 +1,83 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.service;
import me.zhengjie.modules.smscontent.domain.TbSendSmsContent;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentDto;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @website https://el-admin.vip
* @description
* @author weizhongxi
* @date 2021-04-16
**/
public interface TbSendSmsContentService {
/**
*
* @param criteria
* @param pageable
* @return Map<String,Object>
*/
Map<String,Object> queryAll(TbSendSmsContentQueryCriteria criteria, Pageable pageable);
/**
*
* @param criteria
* @return List<TbSendSmsContentDto>
*/
List<TbSendSmsContentDto> queryAll(TbSendSmsContentQueryCriteria criteria);
/**
* ID
* @param id ID
* @return TbSendSmsContentDto
*/
TbSendSmsContentDto findById(Long id);
/**
*
* @param resources /
* @return TbSendSmsContentDto
*/
TbSendSmsContentDto create(TbSendSmsContent resources);
/**
*
* @param resources /
*/
void update(TbSendSmsContent resources);
/**
*
* @param ids /
*/
void deleteAll(Long[] ids);
/**
*
* @param all
* @param response /
* @throws IOException /
*/
void download(List<TbSendSmsContentDto> all, HttpServletResponse response) throws IOException;
}

@ -0,0 +1,53 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @website https://el-admin.vip
* @description /
* @author weizhongxi
* @date 2021-04-16
**/
@Data
public class TbSendSmsContentDto implements Serializable {
private Long id;
/** 创建时间 */
private Timestamp gmtCreate;
/** 修改时间 */
private Timestamp gmtModified;
/** 操作人 */
private String operation;
/** 任务名称 */
private String taskName;
/** 短信内容 */
private String smsContent;
/** 推送状态 */
private Integer sendStatus;
/** 推送时间 */
private Timestamp pushTime;
}

@ -0,0 +1,47 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
import me.zhengjie.annotation.Query;
/**
* @website https://el-admin.vip
* @author weizhongxi
* @date 2021-04-16
**/
@Data
public class TbSendSmsContentQueryCriteria{
/** 模糊 */
@Query(type = Query.Type.INNER_LIKE)
private String operation;
/** 模糊 */
@Query(type = Query.Type.INNER_LIKE)
private String taskName;
/** 模糊 */
@Query(type = Query.Type.INNER_LIKE)
private String smsContent;
/** BETWEEN */
@Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime;
}

@ -0,0 +1,110 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.service.impl;
import me.zhengjie.modules.smscontent.domain.TbSendSmsContent;
import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import me.zhengjie.modules.smscontent.repository.TbSendSmsContentRepository;
import me.zhengjie.modules.smscontent.service.TbSendSmsContentService;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentDto;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentQueryCriteria;
import me.zhengjie.modules.smscontent.service.mapstruct.TbSendSmsContentMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @website https://el-admin.vip
* @description
* @author weizhongxi
* @date 2021-04-16
**/
@Service
@RequiredArgsConstructor
public class TbSendSmsContentServiceImpl implements TbSendSmsContentService {
private final TbSendSmsContentRepository tbSendSmsContentRepository;
private final TbSendSmsContentMapper tbSendSmsContentMapper;
@Override
public Map<String,Object> queryAll(TbSendSmsContentQueryCriteria criteria, Pageable pageable){
Page<TbSendSmsContent> page = tbSendSmsContentRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(tbSendSmsContentMapper::toDto));
}
@Override
public List<TbSendSmsContentDto> queryAll(TbSendSmsContentQueryCriteria criteria){
return tbSendSmsContentMapper.toDto(tbSendSmsContentRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
@Transactional
public TbSendSmsContentDto findById(Long id) {
TbSendSmsContent tbSendSmsContent = tbSendSmsContentRepository.findById(id).orElseGet(TbSendSmsContent::new);
ValidationUtil.isNull(tbSendSmsContent.getId(),"TbSendSmsContent","id",id);
return tbSendSmsContentMapper.toDto(tbSendSmsContent);
}
@Override
@Transactional(rollbackFor = Exception.class)
public TbSendSmsContentDto create(TbSendSmsContent resources) {
return tbSendSmsContentMapper.toDto(tbSendSmsContentRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(TbSendSmsContent resources) {
TbSendSmsContent tbSendSmsContent = tbSendSmsContentRepository.findById(resources.getId()).orElseGet(TbSendSmsContent::new);
ValidationUtil.isNull( tbSendSmsContent.getId(),"TbSendSmsContent","id",resources.getId());
tbSendSmsContent.copy(resources);
tbSendSmsContentRepository.save(tbSendSmsContent);
}
@Override
public void deleteAll(Long[] ids) {
for (Long id : ids) {
tbSendSmsContentRepository.deleteById(id);
}
}
@Override
public void download(List<TbSendSmsContentDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (TbSendSmsContentDto tbSendSmsContent : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("创建时间", tbSendSmsContent.getGmtCreate());
map.put("修改时间", tbSendSmsContent.getGmtModified());
map.put("操作人", tbSendSmsContent.getOperation());
map.put("任务名称", tbSendSmsContent.getTaskName());
map.put("短信内容", tbSendSmsContent.getSmsContent());
map.put("推送状态", tbSendSmsContent.getSendStatus());
map.put("推送时间", tbSendSmsContent.getPushTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

@ -0,0 +1,32 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.smscontent.service.mapstruct;
import me.zhengjie.base.BaseMapper;
import me.zhengjie.modules.smscontent.domain.TbSendSmsContent;
import me.zhengjie.modules.smscontent.service.dto.TbSendSmsContentDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @website https://el-admin.vip
* @author weizhongxi
* @date 2021-04-16
**/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface TbSendSmsContentMapper extends BaseMapper<TbSendSmsContentDto, TbSendSmsContent> {
}

@ -62,3 +62,6 @@ rsa:
# sm.ms 图床的 token
smms:
token: 1oOP3ykFDI0K6ifmtvU7c8Y1eTWZSlyl
# 发送短信内容给文件上传接口一些参数
inter:
address: http://47.110.11.213:8000/api/tbTemplate/getSmsInfo

@ -0,0 +1,50 @@
南宁市永安@@南宁市永⊙安
硫酸亚铁@@硫⊙酸亚铁
硫酸铁@@硫⊙酸铁
硫酸镁@@硫⊙酸镁
成人学校@@成⊙人学校
成人高考@@成⊙人高考
蛋白粉@@蛋白⊙粉
屏蔽电缆@@屏⊙蔽电缆
钛白粉@@钛白⊙粉
华莉达弹簧@@华莉达弹⊙簧
沙发转盘@@沙发转⊙盘
艺博彩鸿@@艺博⊙彩鸿
屏蔽线@@屏⊙蔽线
屏蔽网络线@@屏⊙蔽网络线
隐形纱窗@@隐⊙形纱窗
现代办公@@现代⊙办公
钻枪支架@@钻枪⊙支架
一次性用品@@一次性⊙用品
广东王牌@@广东⊙王牌
永康市@@永⊙康市
门口交易@@门口⊙交易
感情色彩@@感情⊙色彩
港口交通@@港口⊙交通
路口交通@@路口⊙交通
口交换机@@口⊙交换机
宝鸡巴士@@宝鸡⊙巴士
江阴道路@@江阴⊙道路
千百度@@千百⊙度
解放军7@@解⊙放军7
解放军七@@解⊙放军七
茅台镇@@茅⊙台镇
优阳科技@@优⊙阳科技
打折机票预订@@打折机⊙票预订
三螺@@三⊙螺
3螺@@3⊙螺
漂白粉@@漂白⊙粉
电动车@@电动⊙车
硫酸泵@@硫⊙酸泵
硫酸离心泵@@硫⊙酸离心泵
硫酸液下泵@@硫⊙酸液下泵
硫酸钡@@硫⊙酸钡
硫酸铵@@硫⊙酸铵
ngcd@@ng⊙cd
铅丝石笼@@铅⊙丝石笼
ISO认证@@ISO认⊙证
UC4@@UC⊙4
厨房刀具@@厨房刀⊙具
兽药@@兽⊙药
电动门遥控器@@电动门遥控⊙器
卷帘门遥控器@@卷帘门遥控⊙器

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save