MessageTemplateConfigServiceImpl.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. package jnpf.message.service.impl;
  2. import jnpf.base.service.SuperServiceImpl;
  3. import jnpf.base.ActionResult;
  4. import jnpf.constant.JnpfConst;
  5. import jnpf.constant.MsgCode;
  6. import jnpf.database.model.superQuery.ConditionJsonModel;
  7. import jnpf.database.model.superQuery.SuperQueryConditionModel;
  8. import jnpf.exception.DataException;
  9. import jnpf.message.entity.MessageTemplateConfigEntity;
  10. import jnpf.message.entity.SmsFieldEntity;
  11. import jnpf.message.entity.TemplateParamEntity;
  12. import jnpf.message.mapper.MessageTemplateConfigMapper;
  13. import jnpf.message.model.messagetemplateconfig.MessageTemplateConfigForm;
  14. import jnpf.message.model.messagetemplateconfig.MessageTemplateConfigPagination;
  15. import jnpf.message.model.messagetemplateconfig.TemplateParamModel;
  16. import jnpf.message.service.MessageTemplateConfigService;
  17. import jnpf.message.service.SmsFieldService;
  18. import jnpf.message.service.TemplateParamService;
  19. import cn.hutool.core.util.ObjectUtil;
  20. import jnpf.permission.service.AuthorizeService;
  21. import java.lang.reflect.Field;
  22. import com.baomidou.mybatisplus.annotation.TableField;
  23. import jnpf.util.DateUtil;
  24. import jnpf.util.JsonUtil;
  25. import jnpf.util.StringUtil;
  26. import jnpf.util.UserProvider;
  27. import jnpf.util.visiual.JnpfKeyConsts;
  28. import org.springframework.stereotype.Service;
  29. import com.baomidou.mybatisplus.core.metadata.IPage;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  32. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  33. import java.util.*;
  34. import java.util.regex.Matcher;
  35. import java.util.regex.Pattern;
  36. import java.util.stream.Collectors;
  37. /**
  38. * 消息模板(新)
  39. * 版本: V3.2.0
  40. * 版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
  41. * 作者: JNPF开发平台组
  42. * 日期: 2022-08-18
  43. */
  44. @Service
  45. public class MessageTemplateConfigServiceImpl extends SuperServiceImpl<MessageTemplateConfigMapper, MessageTemplateConfigEntity> implements MessageTemplateConfigService {
  46. @Autowired
  47. private TemplateParamService templateParamService;
  48. @Autowired
  49. private SmsFieldService smsFieldService;
  50. @Override
  51. public List<MessageTemplateConfigEntity> getList(MessageTemplateConfigPagination MessageTemplateConfigPagination) {
  52. return getTypeList(MessageTemplateConfigPagination, MessageTemplateConfigPagination.getDataType());
  53. }
  54. @Override
  55. public List<MessageTemplateConfigEntity> getTypeList(MessageTemplateConfigPagination MessageTemplateConfigPagination, String dataType) {
  56. String userId = UserProvider.getUser().getUserId();
  57. int total = 0;
  58. int messageTemplateNewNum = 0;
  59. QueryWrapper<MessageTemplateConfigEntity> messageTemplateNewQueryWrapper = new QueryWrapper<>();
  60. int templateParamNum = 0;
  61. QueryWrapper<TemplateParamEntity> templateParamQueryWrapper = new QueryWrapper<>();
  62. int smsFieldNum = 0;
  63. QueryWrapper<SmsFieldEntity> smsFieldQueryWrapper = new QueryWrapper<>();
  64. //关键字
  65. if (ObjectUtil.isNotEmpty(MessageTemplateConfigPagination.getKeyword())) {
  66. messageTemplateNewNum++;
  67. messageTemplateNewQueryWrapper.lambda().and(t -> t.like(MessageTemplateConfigEntity::getEnCode, MessageTemplateConfigPagination.getKeyword()).
  68. or().like(MessageTemplateConfigEntity::getFullName, MessageTemplateConfigPagination.getKeyword()));
  69. }
  70. //模板类型
  71. if (ObjectUtil.isNotEmpty(MessageTemplateConfigPagination.getTemplateType())) {
  72. messageTemplateNewNum++;
  73. messageTemplateNewQueryWrapper.lambda().eq(MessageTemplateConfigEntity::getTemplateType, MessageTemplateConfigPagination.getTemplateType());
  74. }
  75. //消息类型
  76. if (ObjectUtil.isNotEmpty(MessageTemplateConfigPagination.getMessageType())) {
  77. messageTemplateNewNum++;
  78. messageTemplateNewQueryWrapper.lambda().eq(MessageTemplateConfigEntity::getMessageType, MessageTemplateConfigPagination.getMessageType());
  79. }
  80. //消息来源
  81. if (ObjectUtil.isNotEmpty(MessageTemplateConfigPagination.getMessageSource())) {
  82. messageTemplateNewNum++;
  83. messageTemplateNewQueryWrapper.lambda().eq(MessageTemplateConfigEntity::getMessageSource, MessageTemplateConfigPagination.getMessageSource());
  84. }
  85. //状态
  86. if (ObjectUtil.isNotEmpty(MessageTemplateConfigPagination.getEnabledMark())) {
  87. messageTemplateNewNum++;
  88. int enabledMark = Integer.parseInt(MessageTemplateConfigPagination.getEnabledMark());
  89. messageTemplateNewQueryWrapper.lambda().eq(MessageTemplateConfigEntity::getEnabledMark, enabledMark);
  90. }
  91. //排序
  92. if (StringUtil.isEmpty(MessageTemplateConfigPagination.getSidx())) {
  93. messageTemplateNewQueryWrapper.lambda().orderByAsc(MessageTemplateConfigEntity::getSortCode).orderByDesc(MessageTemplateConfigEntity::getCreatorTime).orderByDesc(MessageTemplateConfigEntity::getLastModifyTime);
  94. } else {
  95. try {
  96. String sidx = MessageTemplateConfigPagination.getSidx();
  97. MessageTemplateConfigEntity MessageTemplateConfigEntity = new MessageTemplateConfigEntity();
  98. Field declaredField = MessageTemplateConfigEntity.getClass().getDeclaredField(sidx);
  99. declaredField.setAccessible(true);
  100. String value = declaredField.getAnnotation(TableField.class).value();
  101. messageTemplateNewQueryWrapper = "asc".equals(MessageTemplateConfigPagination.getSort().toLowerCase()) ? messageTemplateNewQueryWrapper.orderByAsc(value) : messageTemplateNewQueryWrapper.orderByDesc(value);
  102. } catch (NoSuchFieldException e) {
  103. e.printStackTrace();
  104. }
  105. }
  106. if (!"1".equals(dataType)) {
  107. if (total > 0|| total == 0) {
  108. Page<MessageTemplateConfigEntity> page = new Page<>(MessageTemplateConfigPagination.getCurrentPage(), MessageTemplateConfigPagination.getPageSize());
  109. IPage<MessageTemplateConfigEntity> userIPage = this.page(page, messageTemplateNewQueryWrapper);
  110. return MessageTemplateConfigPagination.setData(userIPage.getRecords(), userIPage.getTotal());
  111. } else {
  112. List<MessageTemplateConfigEntity> list = new ArrayList();
  113. return MessageTemplateConfigPagination.setData(list, list.size());
  114. }
  115. } else {
  116. return this.list(messageTemplateNewQueryWrapper);
  117. }
  118. }
  119. @Override
  120. public MessageTemplateConfigEntity getInfo(String id) {
  121. QueryWrapper<MessageTemplateConfigEntity> queryWrapper = new QueryWrapper<>();
  122. queryWrapper.lambda().eq(MessageTemplateConfigEntity::getId, id);
  123. return this.getOne(queryWrapper);
  124. }
  125. @Override
  126. public MessageTemplateConfigEntity getInfoByEnCode(String enCode,String messageType) {
  127. QueryWrapper<MessageTemplateConfigEntity> queryWrapper = new QueryWrapper<>();
  128. queryWrapper.lambda().eq(MessageTemplateConfigEntity::getEnCode, enCode);
  129. queryWrapper.lambda().eq(MessageTemplateConfigEntity::getMessageType, messageType);
  130. return this.getOne(queryWrapper);
  131. }
  132. @Override
  133. public void create(MessageTemplateConfigEntity entity) {
  134. this.save(entity);
  135. }
  136. @Override
  137. public boolean update(String id, MessageTemplateConfigEntity entity) {
  138. entity.setId(id);
  139. return this.updateById(entity);
  140. }
  141. @Override
  142. public void delete(MessageTemplateConfigEntity entity) {
  143. if (entity != null) {
  144. this.removeById(entity.getId());
  145. }
  146. }
  147. //子表方法
  148. @Override
  149. public List<TemplateParamEntity> getTemplateParamList(String id, MessageTemplateConfigPagination MessageTemplateConfigPagination) {
  150. QueryWrapper<TemplateParamEntity> queryWrapper = new QueryWrapper<>();
  151. queryWrapper.lambda().eq(TemplateParamEntity::getTemplateId, id);
  152. return templateParamService.list(templateParamService.getChild(MessageTemplateConfigPagination, queryWrapper));
  153. }
  154. @Override
  155. public List<TemplateParamEntity> getTemplateParamList(String id) {
  156. QueryWrapper<TemplateParamEntity> queryWrapper = new QueryWrapper<>();
  157. queryWrapper.lambda().eq(TemplateParamEntity::getTemplateId, id);
  158. return templateParamService.list(queryWrapper);
  159. }
  160. @Override
  161. public List<SmsFieldEntity> getSmsFieldList(String id, MessageTemplateConfigPagination MessageTemplateConfigPagination) {
  162. QueryWrapper<SmsFieldEntity> queryWrapper = new QueryWrapper<>();
  163. queryWrapper.lambda().eq(SmsFieldEntity::getTemplateId, id);
  164. return smsFieldService.list(smsFieldService.getChild(MessageTemplateConfigPagination, queryWrapper));
  165. }
  166. @Override
  167. public List<SmsFieldEntity> getSmsFieldList(String id) {
  168. QueryWrapper<SmsFieldEntity> queryWrapper = new QueryWrapper<>();
  169. queryWrapper.lambda().eq(SmsFieldEntity::getTemplateId, id);
  170. return smsFieldService.list(queryWrapper);
  171. }
  172. //验证表单唯一字段
  173. @Override
  174. public boolean checkForm(MessageTemplateConfigForm form, int i,String id) {
  175. int total = 0;
  176. if (ObjectUtil.isNotEmpty(form.getEnCode())) {
  177. QueryWrapper<MessageTemplateConfigEntity> codeWrapper = new QueryWrapper<>();
  178. codeWrapper.lambda().eq(MessageTemplateConfigEntity::getEnCode, form.getEnCode());
  179. if(StringUtil.isNotBlank(id) && !"null".equals(id)) {
  180. codeWrapper.lambda().ne(MessageTemplateConfigEntity::getId, id);
  181. }
  182. if ((int) this.count(codeWrapper) > i) {
  183. total++;
  184. }
  185. }
  186. if (form.getTemplateParamList() != null) {
  187. }
  188. if (form.getSmsFieldList() != null) {
  189. }
  190. if (total > 0) {
  191. return true;
  192. }
  193. return false;
  194. }
  195. @Override
  196. public boolean isExistByFullName(String fullName, String id) {
  197. QueryWrapper<MessageTemplateConfigEntity> queryWrapper = new QueryWrapper<>();
  198. queryWrapper.lambda().eq(MessageTemplateConfigEntity::getFullName, fullName);
  199. if (!StringUtil.isEmpty(id)) {
  200. queryWrapper.lambda().ne(MessageTemplateConfigEntity::getId, id);
  201. }
  202. return this.count(queryWrapper) > 0 ? true : false;
  203. }
  204. @Override
  205. public boolean isExistByEnCode(String enCode, String id) {
  206. QueryWrapper<MessageTemplateConfigEntity> queryWrapper = new QueryWrapper<>();
  207. queryWrapper.lambda().eq(MessageTemplateConfigEntity::getEnCode, enCode);
  208. if (!StringUtil.isEmpty(id)) {
  209. queryWrapper.lambda().ne(MessageTemplateConfigEntity::getId, id);
  210. }
  211. return this.count(queryWrapper) > 0 ? true : false;
  212. }
  213. @Override
  214. public ActionResult ImportData(MessageTemplateConfigEntity entity) throws DataException {
  215. if (entity != null) {
  216. // if (isExistByFullName(entity.getFullName(), null)) {
  217. // return ActionResult.fail(MsgCode.EXIST001.get());
  218. // }
  219. if (isExistByEnCode(entity.getEnCode(), entity.getId())) {
  220. return ActionResult.fail(MsgCode.EXIST002.get());
  221. }
  222. try {
  223. this.save(entity);
  224. } catch (Exception e) {
  225. throw new DataException(MsgCode.IMP003.get());
  226. }
  227. return ActionResult.success(MsgCode.IMP001.get());
  228. }
  229. return ActionResult.fail(MsgCode.IMP006.get());
  230. }
  231. @Override
  232. public List<TemplateParamModel> getParamJson(String id) {
  233. MessageTemplateConfigEntity entity = getInfo(id);
  234. List<TemplateParamModel> paramModelList = new ArrayList<>();
  235. List<String> smsField = new ArrayList<>();
  236. List<String> paramList = new ArrayList<>();
  237. if (entity != null) {
  238. if ("3".equals(entity.getMessageType()) || "7".equals(entity.getMessageType())) {
  239. List<SmsFieldEntity> smsFieldList = smsFieldService.getDetailListByParentId(id);
  240. for (SmsFieldEntity entity1 : smsFieldList) {
  241. if(!"@flowLink".equals(entity1.getField())) {
  242. smsField.add(entity1.getField());
  243. }
  244. }
  245. List<TemplateParamEntity> paramFieldList = templateParamService.getDetailListByParentId(id);
  246. for (TemplateParamEntity entity1 : paramFieldList) {
  247. if (smsField.contains(entity1.getField())) {
  248. TemplateParamModel paramModel = new TemplateParamModel();
  249. paramModel.setTemplateId(entity.getId());
  250. paramModel.setTemplateCode(entity.getEnCode());
  251. paramModel.setTemplateType(entity.getTemplateType());
  252. paramModel.setField(entity1.getField());
  253. paramModel.setFieldName(entity1.getFieldName());
  254. paramModel.setId(entity1.getId());
  255. paramModel.setTemplateName(entity.getFullName());
  256. paramModelList.add(paramModel);
  257. }
  258. }
  259. } else {
  260. String content = StringUtil.isNotEmpty(entity.getContent()) ? entity.getContent() : "";
  261. String title = StringUtil.isNotEmpty(entity.getTitle()) ? entity.getTitle() : "";
  262. Set<String> list = new HashSet<>();
  263. list.addAll(regexContent(content));
  264. list.addAll(regexContent(title));
  265. List<TemplateParamEntity> paramFieldList = templateParamService.getDetailListByParentId(id);
  266. for (TemplateParamEntity entity1 : paramFieldList) {
  267. TemplateParamModel paramModel = new TemplateParamModel();
  268. paramModel.setTemplateId(entity.getId());
  269. paramModel.setTemplateCode(entity.getEnCode());
  270. paramModel.setTemplateType(entity.getTemplateType());
  271. paramModel.setField(entity1.getField());
  272. paramModel.setFieldName(entity1.getFieldName());
  273. paramModel.setId(entity1.getId());
  274. paramModel.setTemplateName(entity.getFullName());
  275. if(list.contains(entity1.getField())){
  276. if (!"@FlowLink".equals(entity1.getField())
  277. && !"@CreatorUserName".equals(entity1.getField())
  278. && !"@SendTime".equals(entity1.getField())
  279. && !"@Mandator".equals(entity1.getField())
  280. && !"@Mandatary".equals(entity1.getField())
  281. ) {
  282. paramModelList.add(paramModel);
  283. }
  284. }
  285. }
  286. }
  287. }
  288. //将参数模板转为json格式数据
  289. // String data = JsonUtil.getObjectToString(paramModelList);
  290. return paramModelList;
  291. }
  292. //获取消息内容参数
  293. public List<String> regexContent(String content) {
  294. List<String> list = new ArrayList<>();
  295. String pattern = "[{]([^}]+)[}]";
  296. Pattern patternList = Pattern.compile(pattern);
  297. Matcher m = patternList.matcher(content);
  298. while (m.find()) {
  299. String group = m.group().replaceAll("\\{", "").replaceAll("}", "");
  300. list.add(group);
  301. }
  302. return list;
  303. }
  304. /**
  305. * 高级查询
  306. *
  307. * @param conditionModel
  308. * @param entity
  309. * @param num
  310. * @return
  311. */
  312. public Integer getCondition(SuperQueryConditionModel conditionModel, Object entity, int num) {
  313. QueryWrapper<?> queryWrapper = conditionModel.getObj();
  314. List<ConditionJsonModel> queryConditionModels = conditionModel.getConditionList();
  315. String op = conditionModel.getMatchLogic();
  316. String tableName = conditionModel.getTableName();
  317. List<ConditionJsonModel> useCondition = new ArrayList<>();
  318. for (ConditionJsonModel queryConditionModel : queryConditionModels) {
  319. if (queryConditionModel.getTableName().equalsIgnoreCase(tableName)) {
  320. if (queryConditionModel.getField().contains("jnpf")) {
  321. String child = queryConditionModel.getField();
  322. String s1 = child.substring(child.lastIndexOf(JnpfConst.SIDE_MARK_PRE)).replace(JnpfConst.SIDE_MARK_PRE, "");
  323. queryConditionModel.setField(s1);
  324. }
  325. if (queryConditionModel.getField().toLowerCase().startsWith(JnpfKeyConsts.CHILD_TABLE_PREFIX)) {
  326. String child = queryConditionModel.getField();
  327. String s1 = child.substring(child.indexOf("-") + 1);
  328. queryConditionModel.setField(s1);
  329. }
  330. useCondition.add(queryConditionModel);
  331. }
  332. }
  333. if (queryConditionModels.size() < 1 || useCondition.size() < 1) {
  334. return num;
  335. }
  336. if (useCondition.size() > 0) {
  337. num += 1;
  338. }
  339. //处理控件 转换为有效值
  340. for (ConditionJsonModel queryConditionModel : useCondition) {
  341. String jnpfKey = queryConditionModel.getJnpfKey();
  342. String fieldValue = queryConditionModel.getFieldValue();
  343. if (jnpfKey.equals(JnpfKeyConsts.DATE)) {
  344. Long o1 = Long.valueOf(fieldValue);
  345. String startTime = DateUtil.daFormat(o1);
  346. queryConditionModel.setFieldValue(startTime);
  347. } else if (jnpfKey.equals(JnpfKeyConsts.CREATETIME) || jnpfKey.equals(JnpfKeyConsts.MODIFYTIME)) {
  348. Long o1 = Long.valueOf(fieldValue);
  349. String startTime = DateUtil.daFormatHHMMSS(o1);
  350. queryConditionModel.setFieldValue(startTime);
  351. } else if (jnpfKey.equals(JnpfKeyConsts.CURRORGANIZE)) {
  352. List<String> orgList = JsonUtil.getJsonToList(fieldValue, String.class);
  353. queryConditionModel.setFieldValue(orgList.get(orgList.size() - 1));
  354. }
  355. }
  356. //反射获取数据库实际字段
  357. Class<?> aClass = entity.getClass();
  358. queryWrapper.and(tw -> {
  359. for (ConditionJsonModel conditionJsonModel : useCondition) {
  360. String conditionField = conditionJsonModel.getField();
  361. Field declaredField = null;
  362. try {
  363. declaredField = aClass.getDeclaredField(conditionField);
  364. } catch (NoSuchFieldException e) {
  365. e.printStackTrace();
  366. }
  367. declaredField.setAccessible(true);
  368. String field = declaredField.getAnnotation(TableField.class).value();
  369. String fieldValue = conditionJsonModel.getFieldValue();
  370. String symbol = conditionJsonModel.getSymbol();
  371. if ("AND".equalsIgnoreCase(op)) {
  372. if (symbol.equals("==")) {
  373. tw.eq(field, fieldValue);
  374. } else if (symbol.equals(">=")) {
  375. tw.ge(field, fieldValue);
  376. } else if (symbol.equals("<=")) {
  377. tw.le(field, fieldValue);
  378. tw.and(
  379. qw -> qw.ne(field, "")
  380. );
  381. } else if (symbol.equals(">")) {
  382. tw.gt(field, fieldValue);
  383. } else if (symbol.equals("<")) {
  384. tw.lt(field, fieldValue);
  385. tw.and(
  386. qw -> qw.ne(field, "")
  387. );
  388. } else if (symbol.equals("<>")) {
  389. tw.ne(field, fieldValue);
  390. if (StringUtil.isNotEmpty(fieldValue)) {
  391. tw.or(
  392. qw -> qw.isNull(field)
  393. );
  394. }
  395. } else if (symbol.equals("like")) {
  396. if (StringUtil.isNotEmpty(fieldValue)) {
  397. tw.like(field, fieldValue);
  398. } else {
  399. tw.isNull(field);
  400. }
  401. } else if (symbol.equals("notLike")) {
  402. if (StringUtil.isNotEmpty(fieldValue)) {
  403. tw.notLike(field, fieldValue);
  404. tw.or(
  405. qw -> qw.isNull(field)
  406. );
  407. } else {
  408. tw.isNotNull(field);
  409. }
  410. }
  411. } else {
  412. if (symbol.equals("==")) {
  413. tw.or(
  414. qw -> qw.eq(field, fieldValue)
  415. );
  416. } else if (symbol.equals(">=")) {
  417. tw.or(
  418. qw -> qw.ge(field, fieldValue)
  419. );
  420. } else if (symbol.equals("<=")) {
  421. tw.or(
  422. qw -> qw.le(field, fieldValue)
  423. );
  424. } else if (symbol.equals(">")) {
  425. tw.or(
  426. qw -> qw.gt(field, fieldValue)
  427. );
  428. } else if (symbol.equals("<")) {
  429. tw.or(
  430. qw -> qw.lt(field, fieldValue)
  431. );
  432. } else if (symbol.equals("<>")) {
  433. tw.or(
  434. qw -> qw.ne(field, fieldValue)
  435. );
  436. if (StringUtil.isNotEmpty(fieldValue)) {
  437. tw.or(
  438. qw -> qw.isNull(field)
  439. );
  440. }
  441. } else if (symbol.equals("like")) {
  442. if (StringUtil.isNotEmpty(fieldValue)) {
  443. tw.or(
  444. qw -> qw.like(field, fieldValue)
  445. );
  446. } else {
  447. tw.or(
  448. qw -> qw.isNull(field)
  449. );
  450. }
  451. } else if (symbol.equals("notLike")) {
  452. if (StringUtil.isNotEmpty(fieldValue)) {
  453. tw.or(
  454. qw -> qw.notLike(field, fieldValue)
  455. );
  456. tw.or(
  457. qw -> qw.isNull(field)
  458. );
  459. } else {
  460. tw.or(
  461. qw -> qw.isNotNull(field)
  462. );
  463. }
  464. }
  465. }
  466. }
  467. });
  468. return num;
  469. }
  470. }