VisualKitServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package jnpf.base.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import jnpf.base.entity.DictionaryDataEntity;
  9. import jnpf.base.entity.VisualKitEntity;
  10. import jnpf.base.mapper.VisualKitMapper;
  11. import jnpf.base.model.visualkit.KitPagination;
  12. import jnpf.base.model.visualkit.KitTreeVo;
  13. import jnpf.base.model.visualkit.VisualKitForm;
  14. import jnpf.base.service.DictionaryDataService;
  15. import jnpf.base.service.SuperServiceImpl;
  16. import jnpf.base.service.VisualKitService;
  17. import jnpf.constant.CodeConst;
  18. import jnpf.constant.MsgCode;
  19. import jnpf.exception.DataException;
  20. import jnpf.permission.service.CodeNumService;
  21. import jnpf.util.JsonUtil;
  22. import jnpf.util.RandomUtil;
  23. import jnpf.util.StringUtil;
  24. import jnpf.util.UserProvider;
  25. import jnpf.util.enums.DictionaryDataEnum;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;
  28. import java.util.*;
  29. import java.util.stream.Collectors;
  30. /**
  31. * 表单套件
  32. *
  33. * @author JNPF开发平台组
  34. * @version v5.1.0
  35. * @copyright 引迈信息技术有限公司
  36. * @date 2024/8/22 11:11:35
  37. */
  38. @Service
  39. public class VisualKitServiceImpl extends SuperServiceImpl<VisualKitMapper, VisualKitEntity> implements VisualKitService {
  40. @Autowired
  41. private DictionaryDataService dictionaryDataService;
  42. @Autowired
  43. private CodeNumService codeNumService;
  44. @Override
  45. public List<VisualKitEntity> getList(KitPagination pagination) {
  46. // 定义变量判断是否需要使用修改时间倒序
  47. boolean flag = false;
  48. QueryWrapper<VisualKitEntity> queryWrapper = new QueryWrapper<>();
  49. queryWrapper.lambda().select(VisualKitEntity::getId, VisualKitEntity::getFullName, VisualKitEntity::getEnCode, VisualKitEntity::getCategory,
  50. VisualKitEntity::getIcon, VisualKitEntity::getCreatorUserId, VisualKitEntity::getCreatorTime, VisualKitEntity::getLastModifyTime,
  51. VisualKitEntity::getSortCode, VisualKitEntity::getEnabledMark);
  52. if (StringUtil.isNotEmpty(pagination.getKeyword())) {
  53. flag = true;
  54. queryWrapper.lambda().and(t -> t.like(VisualKitEntity::getFullName, pagination.getKeyword())
  55. .or().like(VisualKitEntity::getEnCode, pagination.getKeyword())
  56. );
  57. }
  58. if (StringUtil.isNotEmpty(pagination.getCategory())) {
  59. flag = true;
  60. queryWrapper.lambda().eq(VisualKitEntity::getCategory, pagination.getCategory());
  61. }
  62. if (pagination.getEnabledMark() != null) {
  63. flag = true;
  64. queryWrapper.lambda().eq(VisualKitEntity::getEnabledMark, pagination.getEnabledMark());
  65. }
  66. //排序
  67. queryWrapper.lambda().orderByAsc(VisualKitEntity::getSortCode)
  68. .orderByDesc(VisualKitEntity::getCreatorTime);
  69. if (flag) {
  70. queryWrapper.lambda().orderByDesc(VisualKitEntity::getLastModifyTime);
  71. }
  72. Page<VisualKitEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  73. IPage<VisualKitEntity> iPage = this.page(page, queryWrapper);
  74. return pagination.setData(iPage.getRecords(), iPage.getTotal());
  75. }
  76. @Override
  77. public void saveCheck(VisualKitEntity visualKitEntity, Boolean fullNameCheck, Boolean encodeCheck) {
  78. String fullName = visualKitEntity.getFullName();
  79. String encode = visualKitEntity.getEnCode();
  80. // 名称长度验证
  81. if (fullName.length() > 80) {
  82. throw new DataException(MsgCode.EXIST005.get());
  83. }
  84. QueryWrapper<VisualKitEntity> query = new QueryWrapper<>();
  85. //重名验证
  86. if (fullNameCheck) {
  87. query.lambda().eq(VisualKitEntity::getFullName, fullName);
  88. if (this.list(query).size() > 0) {
  89. throw new DataException(MsgCode.EXIST001.get());
  90. }
  91. }
  92. //编码验证
  93. if (encodeCheck) {
  94. query.clear();
  95. query.lambda().eq(VisualKitEntity::getEnCode, encode);
  96. if (this.list(query).size() > 0) {
  97. throw new DataException(MsgCode.EXIST002.get());
  98. }
  99. }
  100. }
  101. @Override
  102. public Boolean isExistByEnCode(String enCode, String id) {
  103. if (StringUtil.isEmpty(enCode)) return false;
  104. QueryWrapper<VisualKitEntity> queryWrapper = new QueryWrapper<>();
  105. queryWrapper.lambda().eq(VisualKitEntity::getEnCode, enCode);
  106. if (!StringUtil.isEmpty(id)) {
  107. queryWrapper.lambda().ne(VisualKitEntity::getId, id);
  108. }
  109. return this.count(queryWrapper) > 0;
  110. }
  111. @Override
  112. public void create(VisualKitForm form) {
  113. clearFormDataTable(form);
  114. VisualKitEntity entity = JsonUtil.getJsonToBean(form, VisualKitEntity.class);
  115. if (StringUtil.isEmpty(entity.getEnCode())) {
  116. entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.BDTJ), code -> this.isExistByEnCode(code, null)));
  117. }
  118. this.saveCheck(entity, true, true);
  119. if (StringUtil.isEmpty(form.getId())) {
  120. entity.setId(RandomUtil.uuId());
  121. }
  122. entity.setCreatorUserId(UserProvider.getUser().getUserId());
  123. entity.setCreatorTime(new Date());
  124. this.save(entity);
  125. form.setId(entity.getId());
  126. }
  127. @Override
  128. public boolean update(String id, VisualKitForm form) {
  129. clearFormDataTable(form);
  130. VisualKitEntity entity = JsonUtil.getJsonToBean(form, VisualKitEntity.class);
  131. if (StringUtil.isEmpty(entity.getEnCode())) {
  132. entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.BDTJ), code -> this.isExistByEnCode(code, id)));
  133. }
  134. VisualKitEntity byId = this.getById(id);
  135. this.saveCheck(entity, !byId.getFullName().equals(form.getFullName()), !byId.getEnCode().equals(form.getEnCode()));
  136. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  137. entity.setLastModifyTime(new Date());
  138. return this.updateById(entity);
  139. }
  140. @Override
  141. public List<KitTreeVo> selectorList() {
  142. List<DictionaryDataEntity> typeList = dictionaryDataService.getListByTypeDataCode(DictionaryDataEnum.VISUALDEV.getDictionaryTypeId());
  143. QueryWrapper<VisualKitEntity> queryWrapper = new QueryWrapper<>();
  144. queryWrapper.lambda().eq(VisualKitEntity::getEnabledMark, 1);
  145. queryWrapper.lambda().orderByAsc(VisualKitEntity::getSortCode)
  146. .orderByDesc(VisualKitEntity::getCreatorTime);
  147. List<VisualKitEntity> list = this.list(queryWrapper);
  148. Map<String, List<VisualKitEntity>> collect = list.stream().collect(Collectors.groupingBy(VisualKitEntity::getCategory));
  149. List<KitTreeVo> resList = new ArrayList<>();
  150. for (String key : collect.keySet()) {
  151. DictionaryDataEntity dataEntity = typeList.stream().filter(t -> t.getId().equals(key)).findFirst().orElse(new DictionaryDataEntity());
  152. KitTreeVo kitTreeVo = new KitTreeVo();
  153. kitTreeVo.setId(key);
  154. kitTreeVo.setFullName(dataEntity.getFullName());
  155. kitTreeVo.setEnCode(dataEntity.getEnCode());
  156. kitTreeVo.setHasChildren(true);
  157. List<VisualKitEntity> visualKitEntities = collect.get(key);
  158. List<KitTreeVo> jsonToList = JsonUtil.getJsonToList(visualKitEntities, KitTreeVo.class);
  159. jsonToList.forEach(t -> {
  160. t.setParentId(key);
  161. });
  162. kitTreeVo.setChildren(jsonToList);
  163. resList.add(kitTreeVo);
  164. }
  165. return resList;
  166. }
  167. @Override
  168. public void actionsCopy(String id) {
  169. VisualKitEntity entity = this.getById(id);
  170. String copyNum = UUID.randomUUID().toString().substring(0, 5);
  171. String fullName = entity.getFullName() + ".副本" + copyNum;
  172. if (fullName.length() > 80) {
  173. throw new DataException(MsgCode.PRI006.get());
  174. }
  175. VisualKitForm form = JsonUtil.getJsonToBean(entity, VisualKitForm.class);
  176. form.setId(RandomUtil.uuId());
  177. form.setFullName(fullName);
  178. form.setEnCode(entity.getEnCode() + copyNum);
  179. form.setEnabledMark(0);
  180. this.create(form);
  181. }
  182. @Override
  183. public String importData(VisualKitEntity entity, Integer type) {
  184. QueryWrapper<VisualKitEntity> queryWrapper = new QueryWrapper<>();
  185. StringJoiner stringJoiner = new StringJoiner("、");
  186. if (this.getById(entity.getId()) != null) {
  187. if (Objects.equals(type, 0)) {
  188. stringJoiner.add("ID");
  189. } else {
  190. entity.setId(RandomUtil.uuId());
  191. }
  192. }
  193. queryWrapper.clear();
  194. queryWrapper.lambda().eq(VisualKitEntity::getEnCode, entity.getEnCode());
  195. if (this.count(queryWrapper) > 0) {
  196. stringJoiner.add(MsgCode.IMP009.get());
  197. }
  198. queryWrapper.clear();
  199. queryWrapper.lambda().eq(VisualKitEntity::getFullName, entity.getFullName());
  200. if (this.count(queryWrapper) > 0) {
  201. stringJoiner.add(MsgCode.IMP008.get());
  202. }
  203. if (stringJoiner.length() > 0 && ObjectUtil.equal(type, 1)) {
  204. String copyNum = UUID.randomUUID().toString().substring(0, 5);
  205. entity.setFullName(entity.getFullName() + ".副本" + copyNum);
  206. entity.setEnCode(entity.getEnCode() + copyNum);
  207. } else if (ObjectUtil.equal(type, 0) && stringJoiner.length() > 0) {
  208. return stringJoiner.toString() + MsgCode.IMP007.get();
  209. }
  210. entity.setEnabledMark(0);
  211. entity.setCreatorTime(new Date());
  212. entity.setCreatorUserId(UserProvider.getLoginUserId());
  213. entity.setLastModifyTime(null);
  214. entity.setLastModifyUserId(null);
  215. this.save(entity);
  216. return "";
  217. }
  218. /**
  219. * 清空formdata内的表信息
  220. *
  221. * @param form
  222. */
  223. private void clearFormDataTable(VisualKitForm form) {
  224. Map<String, Object> formMap = JsonUtil.stringToMap(form.getFormData());
  225. JSONArray formJsonArray = JsonUtil.getJsonToJsonArray(String.valueOf(formMap.get("fields")));
  226. this.recuClearTable(formJsonArray);
  227. formMap.put("fields", formJsonArray);
  228. form.setFormData(JsonUtil.getObjectToString(formMap));
  229. }
  230. /**
  231. * 递归清除
  232. *
  233. * @param formJsonArray
  234. */
  235. private void recuClearTable(JSONArray formJsonArray) {
  236. for (Object o : formJsonArray) {
  237. JSONObject jsonObject = (JSONObject) o;
  238. JSONObject config = jsonObject.getJSONObject("__config__");
  239. boolean hasChange = false;
  240. if (ObjectUtil.isNotEmpty(config.get("tableName"))) {
  241. config.put("tableName", "");
  242. hasChange = true;
  243. }
  244. if (ObjectUtil.isNotEmpty(config.get("relationTable"))) {
  245. config.put("relationTable", "");
  246. hasChange = true;
  247. }
  248. JSONArray childArray = config.getJSONArray("children");
  249. if (ObjectUtil.isNotEmpty(childArray)) {
  250. this.recuClearTable(childArray);
  251. config.put("children", childArray);
  252. hasChange = true;
  253. }
  254. if (hasChange) {
  255. jsonObject.put("__config__", config);
  256. }
  257. }
  258. }
  259. }