package com.ltkj.tduck.service.impl;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ltkj.common.utils.ip.AddressUtils;
|
import com.ltkj.tduck.constant.CommonConstants;
|
import com.ltkj.tduck.domain.UserFormDataEntity;
|
import com.ltkj.tduck.mapper.UserFormDataMapper;
|
import com.ltkj.tduck.request.QueryFormResultRequest;
|
import com.ltkj.tduck.service.UserFormDataService;
|
import com.ltkj.tduck.service.UserFormItemService;
|
import com.ltkj.tduck.utils.CacheUtils;
|
import com.ltkj.tduck.utils.FormDataUtils;
|
import com.ltkj.tduck.utils.Result;
|
import com.ltkj.tduck.vo.FormDataTableVO;
|
import com.ltkj.tduck.vo.FormFieldVO;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import static com.ltkj.tduck.constant.FormRedisKeyConstants.FORM_RESULT_NUMBER;
|
|
|
/**
|
* 表单表单项(FormResult)表服务实现类
|
*
|
* @author smalljop
|
* @since 2020-11-23 14:09:22
|
*/
|
@Service
|
@Slf4j
|
@RequiredArgsConstructor
|
public class UserFormDataServiceImpl extends ServiceImpl<UserFormDataMapper, UserFormDataEntity> implements UserFormDataService {
|
|
private final UserFormItemService userFormItemService;
|
private final CacheUtils redisUtils;
|
private final FormDataUtils formDataUtils;
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Map<String, Object> saveFormResult(UserFormDataEntity entity) {
|
HashMap<String, Object> result = MapUtil.newHashMap();
|
String formKey = entity.getFormKey();
|
entity.setSubmitAddress(AddressUtils.getRealAddressByIP(entity.getSubmitRequestIp()));
|
entity.setSerialNumber(redisUtils.incr(StrUtil.format(FORM_RESULT_NUMBER, formKey), CommonConstants.ConstantNumber.ONE));
|
this.save(entity);
|
// formDataUtils.syncSaveFormData(entity);
|
result.put("id", entity.getId());
|
return result;
|
}
|
|
|
/**
|
* 下载表单结果中的附件
|
*
|
* @param request
|
* @return
|
*/
|
// @Override
|
// public Result downloadFormResultFile(QueryFormResultRequest request) {
|
// String uuid = IdUtil.simpleUUID();
|
// List<UserFormItemEntity> userFormItemEntityList = userFormItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()).in(UserFormItemEntity::getType, CollUtil.newArrayList(FormItemTypeEnum.UPLOAD.toString(), FormItemTypeEnum.IMAGE_UPLOAD.toString())));
|
// //结果
|
// List<Map> rows = null;
|
// if (ObjectUtil.isNull(request.getCurrent()) && ObjectUtil.isNull(request.getSize())) {
|
// rows = formDataUtils.searchAll(request);
|
// } else {
|
// FormDataTableVO formDataTableVO = this.listFormDataTable(request);
|
// rows = formDataTableVO.getRows();
|
// }
|
// if (CollectionUtil.isEmpty(rows) || CollectionUtil.isEmpty(userFormItemEntityList)) {
|
// return Result.failed("暂无收集附件,无法下载");
|
// }
|
// List<Map> finalRows = rows;
|
// ThreadUtil.execAsync(() -> {
|
// TimeInterval timer = DateUtil.timer();
|
// List<String> paths = new ArrayList<>();
|
// List<InputStream> ins = new ArrayList<>();
|
// try {
|
// finalRows.forEach(result -> {
|
// int index = 0;
|
// userFormItemEntityList.forEach(item -> {
|
// List<UploadResultStruct> uploadResults = JsonUtils.jsonToList(JsonUtils.objToJson(MapUtil.get(result, item.getFormItemId(), List.class)), UploadResultStruct.class);
|
// if (CollectionUtil.isNotEmpty(uploadResults)) {
|
// uploadResults.forEach(uFile -> {
|
// if (StrUtil.isNotBlank(uFile.getUrl())) {
|
// paths.add(FileNameUtil.getName(uFile.getUrl()));
|
// byte[] bytes = HttpUtil.downloadBytes(uFile.getUrl());
|
// ins.add(IoUtil.toStream(bytes));
|
// }
|
// });
|
// }
|
// });
|
// AsyncProcessUtils.setProcess(uuid, ++index / finalRows.size());
|
// });
|
// // 压缩上传oss
|
// ByteArrayOutputStream zipOutputStream = new ByteArrayOutputStream();
|
// ZipUtil.zip(zipOutputStream, paths.toArray(new String[]{}), ins.toArray(new InputStream[]{}));
|
// String downloadUrl = OssStorageFactory.getStorageService().upload(zipOutputStream.toByteArray(), StorageUtils.generateFileName("download", ".zip"));
|
// AsyncProcessUtils.setProcess(uuid, downloadUrl);
|
// log.info("export file cost time: {}", timer.interval());
|
// } catch (Exception e) {
|
// log.error("download file", e);
|
// }
|
// });
|
// return Result.success(uuid);
|
// }
|
//
|
//
|
@Override
|
public FormDataTableVO listFormDataTable(QueryFormResultRequest request) {
|
return formDataUtils.search(request);
|
}
|
//
|
//
|
// @Override
|
// public Boolean deleteByIds(List<String> dataIdList, String formKey) {
|
// baseMapper.deleteBatchIds(dataIdList);
|
// formDataUtils.asyncDeleteEsDocument(dataIdList, formKey);
|
// return true;
|
// }
|
//
|
// @Override
|
// public Boolean updateFormResult(UserFormDataEntity entity) {
|
// UserFormDataEntity dataEntity = this.getById(entity.getId());
|
// dataEntity.setOriginalData(entity.getOriginalData());
|
// dataEntity.setUpdateBy(entity.getUpdateBy());
|
// boolean update = this.updateById(dataEntity);
|
// // 查询数据 同步到es 避免数据变空被覆盖
|
// formDataUtils.asyncUpdateEsDocument(dataEntity);
|
// return update;
|
// }
|
|
@Override
|
public Result getFormDataDetails(String dataId) {
|
Map<String, Object> result =new HashMap<>();
|
UserFormDataEntity dataEntity = this.getById(dataId);
|
List<FormFieldVO> formFields = userFormItemService.listFormFields(dataEntity.getFormKey());
|
// 表单字段
|
result.put("formFields", formFields);
|
// 表单填写数据
|
if (ObjectUtil.isNotNull(dataEntity)) {
|
Map<String, Object> originalData = dataEntity.getOriginalData();
|
dataEntity.setOriginalData(null);
|
originalData.putAll(BeanUtil.beanToMap(dataEntity, false, true));
|
result.put("formData", originalData);
|
}
|
return Result.success(result);
|
}
|
}
|