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");
xyq2024
- 粉丝: 2962
- 资源: 5572
最新资源
- 基于微信小程序图书馆座位再利用系统-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 基于微信小程序校园订餐的设计与开发+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- 基于微信小程序的科创微应用平台设计与实现+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- Python 实现粒子群优化(PSO)算法的深度置信网络(DBN)进行多输入单输出回归预测的实例(含完整的程序,GUI设计和代码详解)
- 基于小程序的物流管理系统---论文-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 基于小程序的购物系统设计与实现+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- 基于微信小程序的教学质量评价系统ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- Python 实现贝叶斯优化卷积神经网络(BO-CNN)进行时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- 基于小程序的老孙电子点菜系统开发设计与实现+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- 基于微信小程序的社区垃圾回收管理系统ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- Python 项目实例,展示如何使用LSTM(长短期记忆)神经网络进行时间序列预测(含完整的程序,GUI设计和代码详解)
- 基于微信小程序的企业职工薪资查询系统设计与实现+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- 基于微信小程序的商品展示+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- 基于智能推荐的校园社区服务微信小程序_5x8ot-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 基于微信小程序的体育课评分系统+ssm-微信小程序毕业项目,适合计算机毕-设、实训项目、大作业学习.rar
- Python 实现BO-CNN(贝叶斯优化卷积神经网络)模型的详细项目实例(含完整的程序,GUI设计和代码详解)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈