CustomFieldService.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.CustomFieldDTO;
  3. import cn.cslg.pas.common.dto.business.UpdateCustomFieldDTO;
  4. import cn.cslg.pas.common.model.cronModel.Personnel;
  5. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  6. import cn.cslg.pas.common.model.cronModel.Records;
  7. import cn.cslg.pas.common.model.request.GroupRequest;
  8. import cn.cslg.pas.common.model.request.QueryRequest;
  9. import cn.cslg.pas.common.utils.CacheUtils;
  10. import cn.cslg.pas.common.utils.LoginUtils;
  11. import cn.cslg.pas.common.vo.business.CustomFieldVO;
  12. import cn.cslg.pas.common.vo.business.ProductVO;
  13. import cn.cslg.pas.domain.business.CustomField;
  14. import cn.cslg.pas.exception.UnLoginException;
  15. import cn.cslg.pas.exception.XiaoShiException;
  16. import cn.cslg.pas.factorys.businessFactory.Business;
  17. import cn.cslg.pas.mapper.CustomFieldMapper;
  18. import cn.cslg.pas.service.permissions.PermissionService;
  19. import cn.cslg.pas.service.query.FormatQueryService;
  20. import com.alibaba.fastjson.JSONObject;
  21. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  22. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  23. import org.springframework.beans.BeanUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.web.multipart.MultipartFile;
  27. import java.io.IOException;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. /**
  31. * 自定义栏位Service层
  32. * @Author xiexiang
  33. * @Date 2023/11/8
  34. */
  35. @Service
  36. public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomField> implements Business {
  37. @Autowired
  38. private CacheUtils cacheUtils;
  39. @Autowired
  40. private LoginUtils loginUtils;
  41. @Autowired
  42. private FormatQueryService formatQueryService;
  43. @Autowired
  44. private CustomFieldMapper customFieldMapper;
  45. @Autowired
  46. private PermissionService permissionService;
  47. @Override
  48. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  49. //根据专题库/报告id查询自定义栏位
  50. List<String> sqls = formatQueryService.reSqls(queryRequest,"customField");
  51. //根据sql查询自定义栏位信息
  52. List<CustomFieldVO> customFieldVOS = customFieldMapper.getCustomField(sqls.get(0), sqls.get(1), sqls.get(2));
  53. //查询总数
  54. Long total = customFieldMapper.getCustomFieldCount(sqls.get(0));
  55. //装载自定义栏位信息
  56. this.loadCustomField(customFieldVOS);
  57. //装载返回信息
  58. Records records = new Records();
  59. records.setCurrent(queryRequest.getCurrent());
  60. records.setSize(queryRequest.getSize());
  61. records.setData(customFieldVOS);
  62. records.setTotal(total);
  63. return records;
  64. }
  65. @Override
  66. public Object addMessage(Object object, List<MultipartFile> files) {
  67. return null;
  68. }
  69. @Override
  70. public Object deleteMessage(List<Integer> ids) throws IOException {
  71. if (ids == null || ids.size() == 0) {
  72. throw new XiaoShiException("ids不能为空");
  73. }
  74. this.removeBatchByIds(ids);
  75. //TODO 删除与专题库的关联关系
  76. return ids;
  77. }
  78. @Override
  79. public Object updateMessage(Object object, List<MultipartFile> files) {
  80. return null;
  81. }
  82. @Override
  83. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  84. return null;
  85. }
  86. @Override
  87. public Object addMessage(Object object) {
  88. if (object == null) {
  89. throw new XiaoShiException("参数不能为空");
  90. }
  91. //object to customFieldDTO
  92. CustomFieldDTO customFieldDTO = (CustomFieldDTO) object;
  93. //非空校验
  94. if (customFieldDTO.getProjectId().equals(null)) {
  95. throw new XiaoShiException("专题库/报告id不能为空!");
  96. }
  97. if (customFieldDTO.getName().equals(null) || customFieldDTO.getName().equals("")) {
  98. throw new XiaoShiException("自定义栏位名称不能为空!");
  99. }
  100. if (customFieldDTO.getType().equals(null)) {
  101. throw new XiaoShiException("自定义栏位类型不能为空!");
  102. }
  103. String name = customFieldDTO.getName();
  104. Integer projectId = customFieldDTO.getProjectId();
  105. //检查名称是否规范
  106. customFieldDTO.setName(name.trim());
  107. //同一个专题库/报告id下名称不能重复
  108. LambdaQueryWrapper<CustomField> queryWrapper = new LambdaQueryWrapper<>();
  109. queryWrapper.eq(CustomField::getName, name);
  110. queryWrapper.eq(CustomField::getProjectId, projectId);
  111. List<CustomField> customFields = this.list(queryWrapper);
  112. if (customFields != null && customFields.size() != 0) {
  113. throw new XiaoShiException("名称不能重复");
  114. }
  115. //获取登录人信息
  116. PersonnelVO personnelVO = new PersonnelVO();
  117. try {
  118. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  119. } catch (Exception e) {
  120. throw new UnLoginException("未登录");
  121. }
  122. CustomField customField = new CustomField();
  123. BeanUtils.copyProperties(customFieldDTO, customField);
  124. customField.setCreateId(personnelVO.getId());
  125. customField.insert();
  126. return customField.getId();
  127. }
  128. @Override
  129. public Object updateMessage(Object object) {
  130. if (object == null) {
  131. throw new XiaoShiException("参数不能为空");
  132. }
  133. //object to updateCustomFieldDTO
  134. UpdateCustomFieldDTO updateCustomFieldDTO = (UpdateCustomFieldDTO) object;
  135. //非空校验
  136. if (updateCustomFieldDTO.getProjectId().equals(null)) {
  137. throw new XiaoShiException("专题库/报告id不能为空!");
  138. }
  139. if (updateCustomFieldDTO.getName().equals(null) || updateCustomFieldDTO.getName().equals("")) {
  140. throw new XiaoShiException("自定义栏位名称不能为空!");
  141. }
  142. if (updateCustomFieldDTO.getType().equals(null)) {
  143. throw new XiaoShiException("自定义栏位类型不能为空!");
  144. }
  145. String name = updateCustomFieldDTO.getName();
  146. Integer projectId = updateCustomFieldDTO.getProjectId();
  147. CustomField customField = this.getById(updateCustomFieldDTO.getId());
  148. //检查名称是否规范
  149. updateCustomFieldDTO.setName(name.trim());
  150. //同一个专题库/报告id下名称不能重复
  151. LambdaQueryWrapper<CustomField> queryWrapper = new LambdaQueryWrapper<>();
  152. queryWrapper.eq(CustomField::getName, name);
  153. queryWrapper.eq(CustomField::getProjectId, projectId);
  154. List<CustomField> customFields = this.list(queryWrapper);
  155. if (!name.equals(customField.getName()) && customFields.size() != 0) {
  156. throw new XiaoShiException("名称重复");
  157. }
  158. BeanUtils.copyProperties(updateCustomFieldDTO, customField);
  159. customField.updateById();
  160. return customField.getId();
  161. }
  162. /**
  163. * 装载自定义栏位
  164. * @param customFieldVOS
  165. */
  166. private void loadCustomField(List<CustomFieldVO> customFieldVOS) throws IOException {
  167. List<String> createIds = new ArrayList<>();
  168. customFieldVOS.forEach(
  169. item -> {
  170. if (item.getCreateId() != null) {
  171. createIds.add(item.getCreateId());
  172. }
  173. }
  174. );
  175. List<Personnel> personnels = new ArrayList<>();
  176. //查询创建人名称
  177. if (createIds.size() != 0) {
  178. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  179. JSONObject jsonObject = JSONObject.parseObject(res);
  180. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  181. }
  182. for (CustomFieldVO customFieldVO : customFieldVOS) {
  183. //装载人员信息
  184. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(customFieldVO.getCreateId())).findFirst().orElse(null);
  185. if (personnel != null) {
  186. customFieldVO.setCreateName(personnel.getPersonnelName());
  187. } else {
  188. throw new XiaoShiException("未获取到当前登陆人信息");
  189. }
  190. }
  191. }
  192. }