SaaS公司DocuSign概况、产品功能、融资历史及主要竞品介绍
#### Docusign简介
DocuSign是一家SaaS公司,主要提供在线文档签署服务。公司总部位于美国加州旧金山,于2003年由Tom Gonser、Trent Twombly和 Keith Krach创立。
DocuSign产品功能
DocuSign的主要产品是一个在线文档签署平台,允许用户通过电子邮件和移动应用程序在线签署文档。该平台还提供在线文档管理、在线合同管理和在线协作功能。
DocuSign融资历史
截至2018年6月,DocuSign已经完成了11轮融资,总融资额达到了17亿美元。其中,最近一轮融资是在2017年12月,当时公司获得了4.4亿美元的投资,主要来自于沃尔玛。
DocuSign主要竞品
DocuSign的主要竞品包括Adobe Sign、RightSignature和HelloSign。
相关的业务逻辑。
```java @Service public class BlogService { private final BlogRepository blogRepository;
public BlogService(BlogRepository blogRepository) {
this.blogRepository = blogRepository;
}
public List<Blog> findAll() {
List<Blog> blogList = blogRepository.findAll();
return blogList;
}
public Blog save(Blog blog) {
return blogRepository.save(blog);
}
public Blog findOne(long id) {
return blogRepository.findOne(id);
}
public void delete(long id) {
blogRepository.delete(id);
}
public List<Blog> findTop10ByOrderByUpdateTimeDesc(){
return blogRepository.findTop10ByOrderByUpdateTimeDesc();
}
} ```
2.3 控制层
新建 BlogController
控制层,编写相关的接口。
```java @RestController public class BlogController { private final BlogService blogService;
public BlogController(BlogService blogService) {
this.blogService = blogService;
}
@GetMapping("/blogs")
public ModelAndView list(@RequestParam(value = "async", required = false) boolean async,
@RequestParam(value = "pageIndex", required = false, defauLTValue = "0") int pageIndex,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
@RequestParam(value = "name", required = false, defaultValue = "") String name,
Model model) {
Pageable pageable = new PageRequest(pageIndex, pageSize);
Page<Blog> page = blogService.listBlogsByNameLike(name, pageable);
List<Blog> list = page.getContent();
model.addAttribute("orderModel", 0);
model.addAttribute("page", page);
model.addAttribute("blogList", list);
return new ModelAndView(async == true ? "users/list :: #mAInContainerRepleace" : "users/list", "blogModel", model);
}
@GetMapping("/blogs/{id}")
public ModelAndView view(@PathVariable("id") Long id, Model model) {
Blog blog = blogService.getBlogById(id);
model.addAttribute("blog", blog);
return new ModelAndView("users/view", "blogModel", model);
}
@GetMapping("/blogs/edit/{id}")
public ModelAndView edit(@PathVariable("id") Long id, Model model) {
Blog blog = blogService.getBlogById(id);
model.addAttribute("blog", blog);
return new ModelAndView("users/edit", "blogModel", model);
}
@PostMapping("/blogs/edit")
public ResponseEntity<Response> editBlog(@Valid @ModelAttribute("blog") Blog blog, BIndingResult result,
RedirectAttributes attributes) {
if (result.hasErrors()) {
return ResponseEntity.ok().body(new Response(false, "操作失败"));
}
blogService.saveBlog(blog);
return ResponseEntity.ok().body(new Response(true, "操作成功"));
}
@GetMapping("/blogs/new")
public ModelAndView createForm(Model model) {
model.addAttribute("blog", new Blog());
return new ModelAndView("users/new", "blogModel", model);
}
@PostMapping("/blogs/new")
public ResponseEntity<Response> create(@Valid Blog blog, BindingResult result) {
if (result.hasErrors()) {
return ResponseEntity.ok().body(new Response(false, "操作失败"));
}
blogService.saveBlog(blog);
return ResponseEntity.ok().body(new Response(true, "操作成</p>