Commit d075aa04 authored by 赵啸非's avatar 赵啸非

修改控件初始值

parent 9fcb7d1f
...@@ -145,6 +145,7 @@ export default { ...@@ -145,6 +145,7 @@ export default {
this.currentIndex = index; this.currentIndex = index;
}, },
handlerSubForm(){ handlerSubForm(){
console.log("form:",JSON.stringify(this.form))
this.$refs[this.formConf.formModel].validate((valid) => { this.$refs[this.formConf.formModel].validate((valid) => {
if (valid) { if (valid) {
this.$message.success('success'); this.$message.success('success');
......
...@@ -295,6 +295,21 @@ public class ExportDocUtil { ...@@ -295,6 +295,21 @@ public class ExportDocUtil {
return sb.toString(); return sb.toString();
} }
public static String createCheckBoxStrOther(Boolean checked, String label) {
StringBuilder sb = new StringBuilder();
if (checked) {
String ckHeader = "☑";
sb.append(ckHeader);
} else {
String ckHeader = "□";
sb.append(ckHeader);
}
sb.append(label);
return sb.toString();
}
/** /**
* 校验并更新文档中的非法el表达式 * 校验并更新文档中的非法el表达式
* *
......
...@@ -4,6 +4,8 @@ import com.mortals.framework.model.Context; ...@@ -4,6 +4,8 @@ import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoEntity; import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoEntity;
import com.mortals.xhx.module.doc.baseinfo.model.vo.DocBaseinfoVo; import com.mortals.xhx.module.doc.baseinfo.model.vo.DocBaseinfoVo;
import com.mortals.xhx.module.doc.form.model.DocFormEntity;
import com.mortals.xhx.module.doc.form.model.vo.DocFormVo;
/** /**
* DocBaseinfoService * DocBaseinfoService
...@@ -25,6 +27,15 @@ public interface DocBaseinfoService extends ICRUDService<DocBaseinfoEntity, Long ...@@ -25,6 +27,15 @@ public interface DocBaseinfoService extends ICRUDService<DocBaseinfoEntity, Long
*/ */
String mergeFormToDocByTemplate(String form, Long templateId, Context context); String mergeFormToDocByTemplate(String form, Long templateId, Context context);
/**
* 合成doc数据模板
* @param context
* @return
*/
String mergeFormToDoc(DocFormEntity docFormVo, Context context);
/** /**
* 分割 * 分割
* @param form * @param form
......
...@@ -8,6 +8,10 @@ import cn.hutool.core.util.RandomUtil; ...@@ -8,6 +8,10 @@ import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.plugin.table.MultipleRowTableRenderPolicy;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
...@@ -21,6 +25,8 @@ import com.mortals.xhx.module.doc.baseinfo.dao.DocBaseinfoDao; ...@@ -21,6 +25,8 @@ import com.mortals.xhx.module.doc.baseinfo.dao.DocBaseinfoDao;
import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoEntity; import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoEntity;
import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoQuery; import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoQuery;
import com.mortals.xhx.module.doc.baseinfo.service.DocBaseinfoService; import com.mortals.xhx.module.doc.baseinfo.service.DocBaseinfoService;
import com.mortals.xhx.module.doc.form.model.DocFormEntity;
import com.mortals.xhx.module.doc.form.model.vo.DocFormVo;
import com.mortals.xhx.module.doc.template.model.DocTemplateEntity; import com.mortals.xhx.module.doc.template.model.DocTemplateEntity;
import com.mortals.xhx.module.doc.template.model.DocTemplateQuery; import com.mortals.xhx.module.doc.template.model.DocTemplateQuery;
import com.mortals.xhx.module.doc.template.service.DocTemplateService; import com.mortals.xhx.module.doc.template.service.DocTemplateService;
...@@ -31,13 +37,16 @@ import freemarker.template.Template; ...@@ -31,13 +37,16 @@ import freemarker.template.Template;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Date; import java.util.Date;
...@@ -258,6 +267,8 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD ...@@ -258,6 +267,8 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
return ""; return "";
} }
@Override @Override
public String submitOtherSystem(String form, Long templateId, String previewPath, String mergeDocPath, Context context) { public String submitOtherSystem(String form, Long templateId, String previewPath, String mergeDocPath, Context context) {
...@@ -284,6 +295,112 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD ...@@ -284,6 +295,112 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
} }
@Override
public String mergeFormToDoc(DocFormEntity docFormVo, Context context) {
//转换表单参数为map集合
ObjectMapper mapper = new ObjectMapper();
ConfigureBuilder builder = Configure.builder();
try {
Map<String, Object> data = mapper.readValue(docFormVo.getFormContent(), Map.class);
//遍历查看是否有图片数据,多选框
data.entrySet().stream().forEach(entry -> {
if (entry.getKey().indexOf("image") != -1) {
//获取值 读取本地图片
String imagepath = uploadService.getFilePath(entry.getValue().toString());
log.info("Image path: " + imagepath);
BufferedImage image = ImgUtil.read(imagepath);
String ext = FileUtil.getSuffix(imagepath);
String imageStr = ImgUtil.toBase64(image, ext);
entry.setValue(imageStr);
}
//构建填充复选框值
if (entry.getKey().indexOf("ck_") != -1 && entry.getKey().indexOf("v") != -1) {
//获取复选框选项,并渲染值
String ckStr = StringUtils.substringBetween(entry.getKey(), "v", "v");
//获取所有选项
List<String> checkboxs = StrUtil.splitTrim(ckStr, "_", -1);
//选中的项
List<String> ckList = Convert.toList(String.class, entry.getValue());
//合并
String ckStrs = checkboxs.stream().map(item -> {
for (String checked : ckList) {
if (checked.equals(item)) {
Map<Boolean, String> map = new HashMap<>();
map.put(true, item);
return map;
}
}
Map<Boolean, String> map = new HashMap<>();
map.put(false, item);
return map;
}).map(m -> m.entrySet().stream().map(m1 -> ExportDocUtil.createCheckBoxStrOther(m1.getKey(), m1.getValue())).findFirst().orElseGet(() -> "")
).collect(Collectors.joining(""));
entry.setValue(ckStrs);
}
//TODO 单选
//绑定动态表单
if (entry.getKey().indexOf("dt_") != -1 ) {
builder.bind(entry.getKey(), new MultipleRowTableRenderPolicy());
}
});
//查询是否有多选框,
//获取模板文件地址
DocTemplateEntity docTemplateEntity = docTemplateService.get(docFormVo.getTemplateId());
if (!ObjectUtils.isEmpty(docTemplateEntity)) {
String path = filePath + docTemplateEntity.getTemplatePath();
int index = StrUtil.lastIndexOfIgnoreCase(path, "/");
String templatePath = path.substring(0, index);
//FreeMarkerUtils.initFreeMarkerPath(templatePath);
String templateName = FileUtil.getName(path);
Configure config = builder.build();
XWPFTemplate template = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
// ClassPathResource classPathResource = new ClassPathResource(path);
template = XWPFTemplate.compile(path, config).render(data);
byteArrayOutputStream = new ByteArrayOutputStream();
template.write(byteArrayOutputStream);
MultipartFile multipartFile = new MockMultipartFile(templateName, templateName,
ContentType.APPLICATION_OCTET_STREAM.toString(),byteArrayOutputStream.toByteArray());
String mergedocPath = uploadService.saveFileUpload(multipartFile, "/mergedoc", context.getUser());
log.info("mergedocPath:" + mergedocPath);
String mergedoc = this.filePath + mergedocPath;
//转换预览图片
String fileName = RandomUtil.randomNumbers(12) + ".jpg";
String preView = this.filePath + "/preview/" + fileName;
WordUtil.convertWordToJPEG(mergedoc, preView);
log.info("preView:" + mergedocPath);
//下载地址拼装
String returnStr = mergedocPath + ";" + "/preview/" + fileName;
return returnStr;
} catch (Exception e) {
log.error("渲染模板失败:", e);
// return new byte[0];
} finally {
try {
template.close();
byteArrayOutputStream.close();
} catch (IOException e) {
log.error("ioEx:", e);
}
}
}
} catch (JsonProcessingException e) {
log.error("转换异常", e);
throw new AppException("表单参数转换异常:" + e.getMessage());
}
return "";
}
public static void main(String[] args) { public static void main(String[] args) {
String temp = "/ddd/bbb.jpg"; String temp = "/ddd/bbb.jpg";
......
package com.mortals.xhx.module.doc.baseinfo.web; package com.mortals.xhx.module.doc.baseinfo.web;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoEntity; import com.mortals.xhx.module.doc.baseinfo.model.DocBaseinfoEntity;
import com.mortals.xhx.module.doc.form.model.DocFormEntity;
import com.mortals.xhx.module.doc.form.model.vo.DocFormVo;
import com.mortals.xhx.module.doc.template.model.vo.DocTemplateVo; import com.mortals.xhx.module.doc.template.model.vo.DocTemplateVo;
import com.mortals.xhx.module.platform.model.PlatformQuery; import com.mortals.xhx.module.platform.model.PlatformQuery;
import com.mortals.xhx.module.platform.service.PlatformService; import com.mortals.xhx.module.platform.service.PlatformService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -46,7 +46,7 @@ public class DocBaseinfoController extends BaseCRUDJsonBodyMappingController<Doc ...@@ -46,7 +46,7 @@ public class DocBaseinfoController extends BaseCRUDJsonBodyMappingController<Doc
} }
@Override @Override
protected void init( Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "platformSn", platformService.find(new PlatformQuery()).stream().collect(Collectors.toMap(x -> x.getPlatformSn(), y -> y.getName()))); this.addDict(model, "platformSn", platformService.find(new PlatformQuery()).stream().collect(Collectors.toMap(x -> x.getPlatformSn(), y -> y.getName())));
super.init(model, context); super.init(model, context);
} }
...@@ -75,4 +75,29 @@ public class DocBaseinfoController extends BaseCRUDJsonBodyMappingController<Doc ...@@ -75,4 +75,29 @@ public class DocBaseinfoController extends BaseCRUDJsonBodyMappingController<Doc
return jsonObject.toJSONString(); return jsonObject.toJSONString();
} }
/**
* 合成表单与模板
*/
@PostMapping(value = "mergeFormToDocx")
@UnAuth
public String mergeFormToDocx(@RequestBody DocFormEntity docFormVo) {
JSONObject jsonObject = new JSONObject();
try {
String paths = this.getService().mergeFormToDoc(docFormVo, getContext());
String[] vals = paths.split(";");
// String redirectUrl = this.getService().submitOtherSystem(form, templateId, vals[0], vals[1], getContext());
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
jsonObject.put("mergeDoc", vals[0]);
jsonObject.put("preview", vals[1]);
// jsonObject.put("redirectUrl", redirectUrl);
} catch (Exception e) {
log.error("合成表单异常", e);
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
jsonObject.put(KEY_RESULT_MSG, super.convertException(e));
}
return jsonObject.toJSONString();
}
} }
\ No newline at end of file
package com.mortals.xhx.module.doc.form.web; package com.mortals.xhx.module.doc.form.web;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.module.doc.form.model.DocFormEntity; import com.mortals.xhx.module.doc.form.model.DocFormEntity;
...@@ -25,8 +26,6 @@ import java.util.List; ...@@ -25,8 +26,6 @@ import java.util.List;
@RequestMapping("doc/form") @RequestMapping("doc/form")
public class DocFormController extends BaseCRUDJsonBodyMappingController<DocFormService, DocFormEntity,Long> { public class DocFormController extends BaseCRUDJsonBodyMappingController<DocFormService, DocFormEntity,Long> {
@Autowired
private ParamService paramService;
public DocFormController(){ public DocFormController(){
super.setFormClass(DocFormForm.class); super.setFormClass(DocFormForm.class);
...@@ -38,4 +37,14 @@ public class DocFormController extends BaseCRUDJsonBodyMappingController<DocForm ...@@ -38,4 +37,14 @@ public class DocFormController extends BaseCRUDJsonBodyMappingController<DocForm
super.init(model, context); super.init(model, context);
} }
public static void main(String[] args) {
DocFormEntity docFormEntity = new DocFormEntity();
docFormEntity.setFormContent("{\"i_1_标题\":\"234\",\"date_1_会议时间\":\"2022 年 09 月 12 日\",\"i_1_会议地点\":\"24\",\"dt_1_汇报\":[{\"i_1_汇报人\":\"2313213\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"1231313\",\"index\":0},{\"i_1_汇报人\":\"啊啊啊\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"巴巴爸爸\",\"index\":1}],\"i_1_记录人\":\"滚滚滚\",\"ck_1_政治面貌_v党员_非党员_党员先锋岗v\":[\"党员\",\"非党员\"],\"r_1_证件类型_v身份证_军官证_残疾证v\":\"残疾证\",\"s_1_设备类型_v呼叫器_窗口屏_评价器v\":\"窗口屏\"}");
docFormEntity.setTemplateId(50L);
System.out.println(JSON.toJSONString(docFormEntity));
}
} }
\ No newline at end of file
{
"local": {
"baseUrl": "http://127.0.0.1:18228/m",
"baseLogin": "http://127.0.0.1:18228/m"
},
"dev": {
"baseUrl": "http://192.168.0.217:18222/m",
"baseLogin": "http://192.168.0.98:11078/base"
},
"test": {
"baseUrl": "http://192.168.0.98:11091/m",
"baseLogin": "http://192.168.0.98:11078/base"
},
"portal": {
"baseUrl": "http://192.168.0.98:11072/zwfw",
"baseLogin": "http://192.168.0.98:11078/base"
}
}
\ No newline at end of file
###登录
POST {{baseUrl}}/login/login
Content-Type: application/json
{
"loginName": "admin",
"password": "admin",
"securityCode": "8888"
}
> {%
client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###首页
POST {{baseUrl}}/login/index
Authorization: {{authToken}}
Content-Type: application/json
{}
###合成模板数据
POST {{baseUrl}}/doc/baseinfo/mergeFormToDocx
Authorization: {{authToken}}
Content-Type: application/json
{
"formContent": "{\"i_1_标题\":\"234\",\"date_1_会议时间\":\"2022 年 09 月 12 日\",\"i_1_会议地点\":\"24\",\"dt_1_汇报\":[{\"i_1_汇报人\":\"2313213\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"1231313\",\"index\":0},{\"i_1_汇报人\":\"啊啊啊\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"巴巴爸爸\",\"index\":1}],\"i_1_记录人\":\"滚滚滚\",\"ck_1_政治面貌_v党员_非党员_党员先锋岗v\":[\"党员\",\"非党员\"],\"r_1_证件类型_v身份证_军官证_残疾证v\":\"残疾证\",\"s_1_设备类型_v呼叫器_窗口屏_评价器v\":\"窗口屏\"}",
"templateId": 50
}
###站点树
GET {{baseUrl}}/site/siteTree
Authorization: {{authToken}}
Content-Type: application/json
{}
###短信设置编辑
GET {{baseUrl}}/sms/set/edit?id={{SmsSet_id}}
Accept: application/json
###短信设置删除
GET {{baseUrl}}/sms/set/delete?id={{SmsSet_id}}
Accept: application/json
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment