package com.yc.APPManagement.action;
|
|
import com.yc.APPManagement.entity.EditorBack;
|
import com.yc.APPManagement.entity.FileParam;
|
import com.yc.APPManagement.entity.ImageBack;
|
import com.yc.APPManagement.service.CKEditorIfc;
|
import com.yc.action.grid.GridUtils;
|
import com.yc.entity.AttachmentConfig;
|
import com.yc.entity.attachment.AttachmentEntity;
|
import com.yc.entity.attachment.AttachmentWhereEntity;
|
import com.yc.multiData.SpObserver;
|
import com.yc.sdk.shopping.util.SettingKey;
|
import com.yc.service.impl.DBHelper;
|
import com.yc.service.panel.SqlDBHelperIfc;
|
import com.yc.service.upload.AttachmentIfc;
|
import com.yc.utils.SessionKey;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
import org.springframework.web.multipart.MultipartResolver;
|
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpSession;
|
import java.util.*;
|
|
/**
|
* @BelongsProject: eCoWorksV3
|
* @BelongsPackage: com.yc.APPManagement.action
|
* @author: xinyb
|
* @CreateTime: 2023-08-12 15:21
|
* @Description:
|
*/
|
@RestController
|
@RequestMapping("/ckEditor")
|
@ResponseBody
|
public class CKEditorController {
|
@Autowired
|
CKEditorIfc ckEditorIfc;
|
@Autowired
|
SqlDBHelperIfc sqlDBHelperIfc;
|
@Autowired
|
AttachmentIfc attachmentIfc;
|
@Autowired
|
RedisTemplate redisTemplate;
|
|
/**
|
* 加载文本编辑器内容
|
*
|
* @param formId
|
* @param docCode
|
* @param field
|
* @param wheres
|
* @param request
|
* @param response
|
* @return
|
*/
|
@GetMapping("/Content.do")
|
public EditorBack getCKEditorData(Integer formId, String docCode, String field, HttpServletRequest request, HttpServletResponse response) {
|
EditorBack back = new EditorBack();
|
try {
|
if (formId == null || formId == 0) {
|
back.fail("功能号为空,无法查询到数据");
|
return back;
|
}
|
if (StringUtils.isBlank(field)) {
|
back.fail("字段为空,无法查询到数据");
|
return back;
|
}
|
String where = "";
|
if (StringUtils.isNotBlank(docCode)) {
|
String[] w = docCode.split(";");
|
if (w.length > 1) {
|
for (String v : w) {
|
String[] a = v.split("=");
|
if (a.length == 2) {
|
where += " " + a[0] + "=" + GridUtils.prossSqlParm(a[1]) + " and";
|
}
|
}
|
where = where.substring(1, where.length() - 3);
|
} else {
|
where = "docCode='" + docCode + "'";
|
}
|
} else {
|
back.success("");//返回空值
|
return back;
|
}
|
String dbId = (String) request.getSession().getAttribute(SessionKey.DATA_BASE_ID);
|
SpObserver.setDBtoInstance("_" + dbId);
|
Map<String, Object> table = sqlDBHelperIfc.gethdtable(formId + "");
|
String hdTable = DBHelper.getValue(table, "hdtable");
|
if (StringUtils.isBlank(hdTable)) {//没查询到主表进入
|
back.fail("根据功能号:" + formId + "没有找到此数据的表名,无法查询到数据");
|
return back;
|
}
|
String sql = "select top 1 " + field + " from " + hdTable + " where " + where;
|
String count = ckEditorIfc.getCKEditorData(sql);
|
if (StringUtils.isNotBlank(count)) {
|
back.success(count);
|
}
|
} catch (Exception e) {
|
back.fail(e.getCause() == null ? e.getMessage() : e.getCause().getMessage());
|
} finally {
|
SpObserver.setDBtoInstance();
|
}
|
return back;
|
}
|
|
/**
|
* 文本编辑器附件上传功能
|
*
|
* @param formId
|
* @param docCode
|
* @param field
|
* @param request
|
* @param response
|
* @return
|
*/
|
@RequestMapping("/ContentImage.do")
|
public ImageBack saveCKEditorImage(Integer formId, String docCode, String field, Integer r, HttpServletRequest request, HttpServletResponse response) {
|
ImageBack back = new ImageBack();
|
try {
|
if (formId == 0 || StringUtils.isBlank(field) || StringUtils.isBlank(docCode)) {
|
back.result(false, "", "参数不完整,无法上传附件");
|
return back;
|
}
|
MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
|
MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
|
MultipartFile file = multipartRequest.getFile("upload");//附件
|
if (file.getSize() == 0) {
|
back.result(false, "", "附件上传失败");
|
return back;
|
}
|
String unId = UUID.randomUUID().toString().toUpperCase();
|
HttpSession session = request.getSession();
|
AttachmentEntity attachmentEntity = new AttachmentEntity();
|
attachmentEntity.setFormId(formId);
|
attachmentEntity.setDoccode(docCode);
|
attachmentEntity.setFieldId(field);
|
attachmentEntity.setOriginalFileName(file.getOriginalFilename());
|
attachmentEntity.setUnid(unId);//生成uuid值
|
attachmentEntity.setFileType(file.getContentType());
|
attachmentEntity.setFileSize(file.getSize());
|
attachmentEntity.setAuthorCode(session.getAttribute(SessionKey.USERCODE) + "");
|
attachmentEntity.setAuthorName(session.getAttribute(SessionKey.USERNAME) + "");
|
attachmentEntity.setUploadTime(new Date());
|
attachmentEntity.setLastUpdateTime(new Date());
|
attachmentEntity.setRowId("");
|
String dbId = (String) session.getAttribute(SessionKey.DATA_BASE_ID);
|
SpObserver.setDBtoInstance("_" + dbId); //切换数据源
|
//上传附件
|
AttachmentWhereEntity attachmentWhereEntity = attachmentIfc.saveAttachment(attachmentEntity, file, "1");
|
if (attachmentWhereEntity.getSeq() != null && !"".equals(attachmentWhereEntity.getSeq())) {
|
String url = AttachmentConfig.get("attachment.server") + "/uploads/attachment/" + dbId + "/" + formId + "/" +
|
attachmentWhereEntity.getUnid() + SettingKey.NAVSPLIT + attachmentWhereEntity.getSeq() + "." + attachmentWhereEntity.getFileType();
|
back.result(true, url, file.getOriginalFilename());//"/uploads/attachment/82/120201/175AD875-AC21-4336-B2B9-18F367ED9A97@p@6577.jpg", "测试图片.jpg");
|
|
String key = dbId + "-" + formId + "-" + r;
|
List<String> list = null;
|
if (redisTemplate.hasKey(key)) {//存在
|
list = (List<String>) redisTemplate.opsForValue().get(key);
|
} else {
|
list = new ArrayList<>();//创建存放unid值的对象
|
}
|
list.add(unId);
|
redisTemplate.opsForValue().set(key, list);//,30, TimeUnit.MINUTES);//有效30分钟
|
}
|
} catch (Exception e) {
|
back.result(false, "", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
|
} finally {
|
SpObserver.setDBtoInstance();
|
}
|
return back;
|
}
|
|
@PostMapping("/deleteFile.do")
|
public EditorBack editorImageDelete(@RequestBody FileParam param, HttpServletRequest request) {
|
EditorBack back = new EditorBack();
|
try {
|
if (StringUtils.isBlank(param.getContent())) {
|
back.success("完成");
|
return back;
|
}
|
String dbId = (String) request.getSession().getAttribute(SessionKey.DATA_BASE_ID);
|
String key = dbId + "-" + param.getFormId() + "-" + param.getR();
|
if (!redisTemplate.hasKey(key)) {
|
back.success("完成");
|
return back;
|
}
|
List<String> list = (List<String>) redisTemplate.opsForValue().get(key);
|
List<String> fileUnId = new ArrayList<>();
|
for (String unId : list) {
|
if (!param.getContent().contains(unId)) {//已经不存在文本编辑器里面的附件
|
fileUnId.add(unId);
|
}
|
}
|
if (fileUnId.size() == 0) {
|
redisTemplate.delete(key);
|
back.success("完成");
|
return back;
|
}
|
SpObserver.setDBtoInstance("_" + dbId);
|
Integer num = ckEditorIfc.deleteCKEditorFile(String.join(",", fileUnId));
|
if (num > 0) {
|
redisTemplate.delete(key);
|
back.success("已处理不存在的附件");
|
}
|
} catch (Exception e) {
|
back.fail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
|
} finally {
|
SpObserver.setDBtoInstance();
|
}
|
return back;
|
}
|
}
|