package com.product.file.controller;
import cn.hutool.core.text.UnicodeUtil;
import com.alibaba.fastjson.JSON;
import com.product.common.lang.StringUtils;
import com.product.core.config.CoreConst;
import com.product.core.config.Global;
import com.product.core.controller.support.AbstractBaseController;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.entity.RequestParameterEntity;
import com.product.core.exception.BaseException;
import com.product.core.sign.SignUtil;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.file.config.CmnConst;
import com.product.file.config.FileCode;
import com.product.file.service.FileManagerService;
import com.product.file.service.OnlineDocumentEditService;
import com.product.module.sys.entity.SystemUser;
import com.product.module.sys.version.ApiVersion;
import com.product.util.BaseUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author cheng
* @Date 2022/4/6 13:57
* @Desc
*/
@RequestMapping("api/office")
@Controller
public class WebOfficeController extends AbstractBaseController {
@Autowired
FileManagerService fileManagerService;
@Autowired
OnlineDocumentEditService onlineDocumentEditService;
/**
* weboffice 鑾峰彇鏂囦欢
*
* @param response
* @param request
*/
@PostMapping("/get-nest-red-file/{version}")
@ApiVersion(1)
@ResponseBody
public String getNestRedTemplate(HttpServletResponse response, HttpServletRequest request) {
try {
//鑾峰彇鍙傛暟
FieldSetEntity fse = null;
Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
File file = null;
if (bean != null) {
RequestParameterEntity reqp = (RequestParameterEntity) bean;
fse = reqp.getFormData();
file = reqp.getFiles().values().toArray(new File[1])[0];
}
onlineDocumentEditService.nestRedDocument(fse, file);
// byte[] document_templates = fileManagerService.getFileContent("1".equals(location) ? fse.getString("document_template") : fse.getString("document_template_tail"));
// IoUtil.write(response.getOutputStream(), true, document_templates);
return OK();
} catch (BaseException e) {
e.printStackTrace();
return error(e);
} catch (Exception e) {
e.printStackTrace();
SpringMVCContextHolder.getSystemLogger().error(e);
return error(FileCode.NEST_RED_DOCUMENT_FAIL);
}
}
/**
* weboffice 鑾峰彇鏂囦欢
*
* @param response
* @param request
*/
@GetMapping("/get-file/{version}")
@ApiVersion(1)
public void getFile(HttpServletResponse response, HttpServletRequest request) {
try {
//鑾峰彇鍙傛暟
FieldSetEntity fse = null;
Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
if (bean != null) {
RequestParameterEntity reqp = (RequestParameterEntity) bean;
fse = reqp.getFormData();
}
String uuid = fse.getString("uuid");
onlineDocumentEditService.getFile(response, uuid);
// IoUtil.write(response.getOutputStream(), true, fileManagerService.getFileContent(uuid));
} catch (Exception e) {
try {
OutputStream outputStream = response.getOutputStream();
outputStream.flush();
outputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
e.printStackTrace();
SpringMVCContextHolder.getSystemLogger().error(e);
}
}
/**
* weboffice 淇濆瓨鏂囦欢锛堣嚜鍔ㄣ€佹墜鍔級
*
* @param request
* @return
*/
@PostMapping("/save-office/{version}")
@ApiVersion(1)
@ResponseBody
public String saveOffice(HttpServletRequest request) {
try {
//鑾峰彇鍙傛暟
FieldSetEntity fse = null;
Map<String, File> files = null;
Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
if (bean != null) {
RequestParameterEntity reqp = (RequestParameterEntity) bean;
files = reqp.getFiles();
fse = reqp.getFormData();
}
if (fse == null || StringUtils.isEmpty(fse.getUUID()) || files == null || files.size() <= 0 || StringUtils.isEmpty(fse.getString("key"))) {
return error(FileCode.GET_DATA_FAIL);
}
onlineDocumentEditService.uploadFile(fse.getUUID(), files);
return BaseUtil.success(null);
} catch (BaseException e) {
return error(e);
} catch (Exception e) {
e.printStackTrace();
return error(FileCode.OFFICE_SAVE_FILE_FAIL);
}
}
/**
* weboffice 璺宠浆 mvc
*
* @param model
* @param request
* @return
*/
@GetMapping("/open-office/{version}")
@ApiVersion(1)
public String openOffice(Model model, HttpServletRequest request) {
try {
//鑾峰彇鍙傛暟
FieldSetEntity fse = null;
Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
if (bean != null) {
RequestParameterEntity reqp = (RequestParameterEntity) bean;
fse = reqp.getFormData();
// System.out.println(formJson);
System.out.println(SignUtil.getHmacSHA1(reqp.getFormJson(), Global.getSystemConfig("signature.key", "")));
}
//鏂囦欢鍚嶏紙绐楀彛鐨勫悕瀛楋級
String file_title = fse.getString("fileName");
FieldSetEntity fieldSetEntity = fileManagerService.getBaseDao().getFieldSetEntity("product_sys_attachments", fse.getString("uuid"), false);
if (!FieldSetEntity.isEmpty(fieldSetEntity)) {
file_title = fieldSetEntity.getString("file_name");
}
// if (file_title == null) {
// file_title = "";
// } else {
// file_title = UnicodeUtil.toString(file_title);
// }
SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
//
Boolean allowNestRed = false;
String node_uuid = fse.getString("nodeUuid");
String fileType = fse.getString("fileType");
List<Object> nestRedDocumentParams = new ArrayList<>();
// 鍒ゆ柇鏄惁涓� 娴佺▼鑺傜偣涓墦寮€鐨勬枃妗� 涓旀槸 word 绫诲瀷
if (!StringUtils.isEmpty(node_uuid) && ("doc".equals(fileType) || "docx".equals(fileType) || "wps".equals(fileType) || "wpt".equals(fileType))) {
//鑾峰彇娴佺▼鑺傜偣淇℃伅
FieldSetEntity node = onlineDocumentEditService.getBaseDao().getFieldSetEntity("product_sys_flow_node", node_uuid, false);
if (!FieldSetEntity.isEmpty(node)) {
//鍏佽濂楃孩
allowNestRed = node.getBoolean("allow_nest_red");
if (allowNestRed) {
//鏌ヨ濂楃孩閰嶇疆妯℃澘
DataTableEntity dt = onlineDocumentEditService.getBaseDao().listTable("product_sys_document_nest_red_config");
if (!DataTableEntity.isEmpty(dt)) {
for (int i = 0; i < dt.getRows(); i++) {
FieldSetEntity fs = dt.getFieldSetEntity(i);
Map<Object, Object> values = fs.getValues();
values.put("token", SpringMVCContextHolder.getCurrentUser().getToken_info());
values.put("~table~", "product_sys_document_nest_red_config");
values.put("file_uuid", fse.getUUID());
//灏嗘ā鏉块厤缃俊鎭� 杞负瀛楃涓�
HashMap<Object, Object> v = (HashMap<Object, Object>) values;
v = (HashMap<Object, Object>) v.clone();
v.remove("title");
v.remove("description");
String params = JSON.toJSONString(v);
// 閰嶇疆淇℃伅绛惧悕 锛堢敤浜庡绾㈡椂 GET 璇锋眰锛�
String signature = SignUtil.getHmacSHA1(params, Global.getSystemConfig("signature.key", ""));
values.put("signature", signature);
values.put("formJson", params);
nestRedDocumentParams.add(values);
}
}
}
}
}
model.addAttribute("nestDocument", nestRedDocumentParams);
model.addAttribute("allow_nest_red", allowNestRed);
model.addAttribute("file_title", file_title);
model.addAttribute(CmnConst.UUID, fse.getUUID());
model.addAttribute("user_name", currentUser.getUser_name());
//涓嶈兘淇敼姝ゅ弬鏁帮紝鍙傛暟鍜岀鍚嶇粦瀹氫慨鏀瑰弬鏁伴渶瑕佹洿鏂扮鍚�
model.addAttribute(CoreConst.API_POST_REQUEST_DATA + "Temp", request.getParameter("formData"));
//浣跨敤绗竴娆′紶杈撹繃鏉ョ殑绛惧悕鐢ㄤ簬鑾峰彇鏂囦欢 銆佷繚瀛樻枃浠�
model.addAttribute("signature", request.getParameter("signature"));
model.addAttribute("transportProtocols", "http");
model.addAttribute("port", Global.getSystemConfig("server.port", ""));
return "webOffice";
} catch (Exception e) {
e.printStackTrace();
return "404";
}
}
/**
* 璁″垝缂栬緫鏂囨。
*
* @param request
* @return
*/
@PostMapping("/document-edit-plan/{version}")
@ResponseBody
@ApiVersion(1)
public String documentEditPlan(HttpServletRequest request) {
try {
//鑾峰彇鍙傛暟
FieldSetEntity fse = null;
Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
if (bean != null) {
RequestParameterEntity reqp = (RequestParameterEntity) bean;
fse = reqp.getFormData();
}
if (fse == null || StringUtils.isEmpty(fse.getUUID())) {
return error(FileCode.GET_DATA_FAIL);
}
/**
* 浣跨敤鍚屾閿� 闃叉骞跺彂鎵撳紑鐩稿悓鐨勬枃浠�
*/
synchronized (fse.getUUID().intern()) {
onlineDocumentEditService.signDocumentEdit(fse.getUUID());
}
return OK();
} catch (BaseException e) {
return error(e);
} catch (Exception e) {
e.printStackTrace();
return error(FileCode.SIGN_DOCUMENT_EDIT_STATUS_FAIL);
}
}
// /**
// * 閲嶇疆鏂囨。缂栬緫鏃堕棿
// *
// * @param request
// * @return
// */
// @PostMapping("/reset-document-edit-time/{version}")
// @ResponseBody
// @ApiVersion(1)
// public String resetDocumentExpirationTime(HttpServletRequest request) {
// try {
// //鑾峰彇鍙傛暟
// FieldSetEntity fse = null;
// Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
// if (bean != null) {
// RequestParameterEntity reqp = (RequestParameterEntity) bean;
// fse = reqp.getFormData();
// }
// if (fse == null || StringUtils.isEmpty(fse.getUUID())) {
// return error(FileCode.GET_DATA_FAIL);
// }
// onlineDocumentEditService.resetDocumentEepirationTime(fse.getUUID());
// return OK();
// } catch (BaseException e) {
// return error(e);
// } catch (Exception e) {
// e.printStackTrace();
// return error(FileCode.SIGN_DOCUMENT_EDIT_STATUS_FAIL);
// }
// }
}