package com.ldx.connect.controller;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ldx.connect.common.ExcelDataListener;
import com.ldx.connect.common.R;
import com.ldx.connect.common.VCardConverter;
import com.ldx.connect.entity.Contact;
import com.ldx.connect.entity.ExportContact;
import com.ldx.connect.entity.PageResult;
import com.ldx.connect.service.ContactService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Slf4j//日志
@RestController
@RequestMapping("/contact")
public class ContactController {
@Autowired
private ContactService contactService;
@Autowired
private HttpServletRequest request;
@Autowired
private ExcelDataListener excelDataListener;
//获取分页数据
@GetMapping("/page")
public R<Page<Contact>> page(int currentPage, int pageSize, String groupname, String input){
// 获取当前请求的Session
HttpSession session = request.getSession(false); // 参数 false 表示如果Session不存在则不创建新的Session
// 获取Session中存储的属性值
Integer userid = (Integer) session.getAttribute("userid");
//构造分页构造器
Page<Contact> pageInfo=new Page<>(currentPage,pageSize);
//构造条件构造器
LambdaQueryWrapper<Contact> queryWrapper=new LambdaQueryWrapper<>();
//当有groupname参数 查询条件为相等 当有input参数 查询条件为模糊查询 而且默认只能查到自己的数据
queryWrapper.like(groupname != null, Contact::getGroupName, groupname)
.eq(Contact::getUserId, userid)
.like(input != null, Contact::getName, input)
.or()
.like(input != null, Contact::getEmail, input)
.or()
.like(input != null, Contact::getPhoneNumber, input);
//添加排序条件
queryWrapper.orderByAsc(Contact::getName);
//执行查询
contactService.page(pageInfo,queryWrapper);
return R.success(pageInfo);
}
@GetMapping("/espage")
public R<PageResult> espage(int currentPage, int pageSize, String groupname, String input){
System.out.println("@GetMapping(\"/espage\")");
return contactService.espage(currentPage,pageSize,groupname,input);
}
//
@GetMapping("/selectById")
public R<Contact> page(int id){
//查询数据库
LambdaQueryWrapper<Contact> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Contact::getId,id);
Contact emp =contactService.getOne(queryWrapper);
return R.success(emp);
}
//更新数据
@PutMapping("/update")
public R<String> update(@RequestBody Contact contact){
contactService.updateById(contact);
return R.success("修改分类信息");
}
//添加数据
@PostMapping("/add")
public R<String> save(@RequestBody Contact contact){
contactService.save(contact);
return R.success("新增菜品成功");
}
@DeleteMapping("/{id}")
public R<String> delete(@PathVariable Long id) {
boolean deleted = contactService.removeById(id);
return R.success("分类信息删除成功");
}
@PostMapping("/deleteByIds")
public R<String> deleteContactsByIds(@RequestBody List<Long> ids) {
// 在实际应用中,根据传入的 IDs 执行批量删除操作
contactService.removeByIds(ids);
return R.success("批量删除成功");
}
@PostMapping("/move/{groupName}")
public R<String> move(@RequestBody List<Long> ids,@PathVariable String groupName) {
List<Contact> contactList=contactService.listByIds(ids);
for (Contact contact : contactList) {
contact.setGroupName(groupName);
}
contactService.saveOrUpdateBatch(contactList);
return R.success("批量移动成功");
}
@PostMapping("/copy/{groupName}")
public R<String> copy(@RequestBody List<Long> ids,@PathVariable String groupName) {
List<Contact> contactList=contactService.listByIds(ids);
for (Contact contact : contactList) {
//如果是未分组联系人直接设置分组为当前被复制到的地方
if(contact.getGroupName().equals("未分组联系人")){
contact.setGroupName(groupName);
}
else{
//取出分组名并且按照,分割
String[] parts = contact.getGroupName().split(" ");
// 将分组名数组转换为列表,方便操作
List<String> groupNamesList = new ArrayList<>(Arrays.asList(parts));
if(!groupNamesList.contains(groupName)){
contact.setGroupName(contact.getGroupName()+" "+groupName);
}
}
}
contactService.saveOrUpdateBatch(contactList);
return R.success("批量移动成功");
}
@PostMapping("/downloadCSV")
public void downloadCSV(@RequestBody List<Long> ids,HttpServletResponse response) throws IOException {
//根据id查询数据库
List<Contact> contactList = contactService.listByIds(ids);
List<Object> res = new ArrayList<>();
for (Contact contact:contactList) {
ExportContact exportContact=new ExportContact();
BeanUtils.copyProperties(contact,exportContact);
res.add(exportContact);
}
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=bill.xlsx");
EasyExcel.write(response.getOutputStream(), ExportContact.class).sheet("分账数据").doWrite(res);
}
@PostMapping("/uploadCSV")
public void uploadCSV(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), ExportContact.class,excelDataListener).sheet().doRead();
}
@PostMapping("/downloadVCard")
public ResponseEntity<byte[]> downloadVCard(@RequestBody List<Long> ids) {
//根据id查询数据库
List<Contact> contactList = contactService.listByIds(ids);
String vCardString = VCardConverter.convertToVCardString(contactList);
byte[] vCardBytes = vCardString.getBytes(StandardCharsets.UTF_8);
// 设置 HTTP 头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("text/vcard"));
headers.setContentDispositionFormData("attachment", "contacts.vcf");
// 返回包含字节数组的 ResponseEntity
return ResponseEntity.ok()
.headers(headers)
.body(vCardBytes);
}
@PostMapping("/uploadVCard")
public void uploadVCard(@RequestParam("file") MultipartFile file) {
// 获取当前请求的Session
HttpSession session = request.getSession(false); // 参数 false 表示如果Session不存在则不创建新的Session
// 获取Session中存储的属性值
Integer userid = (Integer) session.getAttribute("userid");
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot和Vue的网页端通讯录管理系统设计源码
共972个文件
js:433个
css:179个
scss:107个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 102 浏览量
2024-10-05
09:30:05
上传
评论
收藏 8.61MB ZIP 举报
温馨提示
本项目为基于SpringBoot和Vue框架构建的网页端通讯录管理系统源码,包含932个文件,涉及多种编程语言和技术,包括433个JavaScript文件、151个CSS文件、105个Vue组件、93个SCSS样式文件、83个TypeScript文件、26个Java文件、9个Markdown文件、6个PNG图片、6个SQL数据库文件和5个XML配置文件。该系统旨在提供便捷的通讯录管理功能,是SpringBoot实践的典型应用案例。
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot和Vue的网页端通讯录管理系统设计源码 (972个子文件)
index.css 227KB
index.css 227KB
cascader.css 29KB
cascader.css 29KB
date-picker.css 28KB
date-picker.css 28KB
transfer.css 27KB
transfer.css 27KB
col.css 25KB
col.css 25KB
pagination.css 23KB
pagination.css 23KB
table.css 22KB
table.css 22KB
message-box.css 21KB
message-box.css 21KB
time-picker.css 21KB
time-picker.css 21KB
select.css 18KB
select.css 18KB
slider.css 18KB
slider.css 18KB
tabs.css 16KB
tabs.css 16KB
base.css 16KB
base.css 16KB
dropdown.css 15KB
dropdown.css 15KB
time-select.css 13KB
time-select.css 13KB
table-column.css 13KB
table-column.css 13KB
cascader-panel.css 13KB
cascader-panel.css 13KB
tree.css 13KB
tree.css 13KB
upload.css 12KB
upload.css 12KB
icon.css 12KB
icon.css 12KB
calendar.css 12KB
calendar.css 12KB
style.css 11KB
autocomplete.css 10KB
autocomplete.css 10KB
button.css 10KB
button.css 10KB
input-number.css 10KB
input-number.css 10KB
menu.css 9KB
menu.css 9KB
color-picker.css 7KB
color-picker.css 7KB
checkbox.css 7KB
checkbox.css 7KB
input.css 7KB
input.css 7KB
step.css 5KB
step.css 5KB
collapse.css 5KB
collapse.css 5KB
drawer.css 5KB
drawer.css 5KB
tag.css 5KB
tag.css 5KB
image.css 3KB
image.css 3KB
radio.css 3KB
radio.css 3KB
form.css 3KB
form.css 3KB
dialog.css 3KB
dialog.css 3KB
select-dropdown.css 3KB
select-dropdown.css 3KB
tooltip.css 3KB
tooltip.css 3KB
carousel.css 2KB
carousel.css 2KB
radio-button.css 2KB
radio-button.css 2KB
progress.css 2KB
progress.css 2KB
popover.css 2KB
popover.css 2KB
link.css 2KB
link.css 2KB
message.css 2KB
message.css 2KB
alert.css 2KB
alert.css 2KB
switch.css 2KB
switch.css 2KB
notification.css 2KB
notification.css 2KB
loading.css 2KB
loading.css 2KB
popper.css 2KB
popper.css 2KB
timeline-item.css 1KB
共 972 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
xyq2024
- 粉丝: 2505
- 资源: 5461
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功