From 21464905deb2c905bcf87ac7e20ae5e8288bcc55 Mon Sep 17 00:00:00 2001 From: PQZ Date: Wed, 19 Nov 2025 19:35:59 +0800 Subject: [PATCH] 111111 --- .../cus/controller/CusMainController.java | 52 ++++++++---- .../com/ruoyi/cus/dto/CusBankImportDTO.java | 28 +++++++ .../java/com/ruoyi/cus/dto/CusImportDTO.java | 77 ++++++++++++++++++ .../ruoyi/cus/service/ICusImportService.java | 16 ++++ .../service/impl/CusImportServiceImpl.java | 80 +++++++++++++++++++ dl_vue/src/views/cus/main/index.vue | 53 ++++++++++++ 6 files changed, 290 insertions(+), 16 deletions(-) create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusImportDTO.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusImportService.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/controller/CusMainController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/controller/CusMainController.java index 3cdaff6..713fb6c 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/controller/CusMainController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/controller/CusMainController.java @@ -1,5 +1,6 @@ package com.ruoyi.cus.controller; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.cus.service.ICusImportService; import com.ruoyi.cus.vo.CusMainVO; import com.ruoyi.cus.vo.MainVO; import com.ruoyi.utils.CodeGenerator; @@ -33,21 +35,24 @@ import com.ruoyi.cus.domain.CusMain; import com.ruoyi.cus.service.ICusMainService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 客户信息Controller - * + * * @author vinjor-m * @date 2025-11-03 */ @RestController @RequestMapping("/cus/main") -public class CusMainController extends BaseController -{ +public class CusMainController extends BaseController { @Autowired private ICusMainService cusMainService; @Autowired private CodeGenerator codeGenerator; + @Autowired + private ICusImportService cusImportService; + /** * 生成客户编码 */ @@ -76,6 +81,7 @@ public class CusMainController extends BaseController return AjaxResult.error(e.getMessage()); } } + /** * 查询客户信息列表 */ @@ -83,10 +89,9 @@ public class CusMainController extends BaseController @GetMapping("/list") public AjaxResult list(MainVO cusMain, @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) - { + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page<>(pageNum, pageSize); - IPage list = cusMainService.queryListPage(cusMain,page); + IPage list = cusMainService.queryListPage(cusMain, page); return success(list); } @@ -96,19 +101,35 @@ public class CusMainController extends BaseController @PreAuthorize("@ss.hasPermi('cus:main:export')") @Log(title = "客户信息", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, CusMain cusMain) - { + public void export(HttpServletResponse response, CusMain cusMain) { List list = cusMainService.list(); ExcelUtil util = new ExcelUtil(CusMain.class); util.exportExcel(response, list, "客户信息数据"); } + /** + * 客户信息导入 + * + * @param file TODO + * @return com.ruoyi.common.core.domain.AjaxResult + * @author PQZ + * @date 14:29 2025/11/19 + **/ + @Log(title = "客户信息导入", businessType = BusinessType.IMPORT) + @PostMapping("/importCus") + public AjaxResult importCusAndContacts(@RequestParam("file") MultipartFile file) throws IOException { + if (file.isEmpty()) { + return AjaxResult.error("上传文件不能为空"); + } + return cusImportService.importCusAndContacts(file); + } + /** * 获取客户信息详细信息--编辑 */ @PreAuthorize("@ss.hasPermi('cus:main:query')") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") String id){ + public AjaxResult getInfo(@PathVariable("id") String id) { return success(cusMainService.getDataById(id)); } @@ -117,7 +138,7 @@ public class CusMainController extends BaseController */ @PreAuthorize("@ss.hasPermi('cus:main:query')") @GetMapping(value = "/viewData") - public AjaxResult viewData(String id){ + public AjaxResult viewData(String id) { return success(cusMainService.viewData(id)); } @@ -127,8 +148,8 @@ public class CusMainController extends BaseController @PreAuthorize("@ss.hasPermi('cus:main:add')") @Log(title = "客户信息", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody CusMainVO cusMainVO){ - if(StringUtils.isEmpty(cusMainVO.getMainInfo().getId())){ + public AjaxResult add(@RequestBody CusMainVO cusMainVO) { + if (StringUtils.isEmpty(cusMainVO.getMainInfo().getId())) { cusMainVO.getMainInfo().setCusCode(codeGenerator.generate()); } cusMainService.saveNewCus(cusMainVO); @@ -141,9 +162,8 @@ public class CusMainController extends BaseController */ @PreAuthorize("@ss.hasPermi('cus:main:remove')") @Log(title = "客户信息", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable String[] ids) - { + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) { List list = new ArrayList<>(Arrays.asList(ids)); return toAjax(cusMainService.removeByIds(list)); } @@ -152,7 +172,7 @@ public class CusMainController extends BaseController * 获取客户资料信息--公司信息、管理信息 */ @GetMapping(value = "/getOtherInfo") - public AjaxResult getOtherInfo(String cusId){ + public AjaxResult getOtherInfo(String cusId) { return success(cusMainService.getOtherInfo(cusId)); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java new file mode 100644 index 0000000..a13de66 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java @@ -0,0 +1,28 @@ +package com.ruoyi.cus.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class CusBankImportDTO { + @Excel(name = "客户代码") + private String cusCode; + @Excel(name = "银行账号") + private String bankAccount; + @Excel(name = "银行名称") + private String bankName; + @Excel(name = "币种") + private String currency; + @Excel(name = "银行代码") + private String bankCode; + @Excel(name = "银行swift代码") + private String swiftCode; + @Excel(name = "银行地址") + private String bankAddress; + @Excel(name = "分支机构代码") + private String branchCode; + @Excel(name = "税号") + private String taxId; +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusImportDTO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusImportDTO.java new file mode 100644 index 0000000..451830a --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusImportDTO.java @@ -0,0 +1,77 @@ +package com.ruoyi.cus.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class CusImportDTO { + // 客户主表字段 + @Excel(name = "客户代码") + private String cusCode; + @Excel(name = "客户名称") + private String fullName; + @Excel(name = "客户简称") + private String shortName; + @Excel(name = "客户类型") + private String cusType; + @Excel(name = "国家/地区") + private String country; + @Excel(name = "时区") + private String zoneName; + @Excel(name = "主营产品") + private String mainProds; + @Excel(name = "企业网站") + private String siteUrl; + @Excel(name = "创建人") + private String createBy; + @Excel(name = "创建日期") + private String createTime; + @Excel(name = "修改日期") + private String updateTime; + @Excel(name = "客户备注") + private String cusRemark; + + // 客户公司信息表字段 + @Excel(name = "客户来源") + private String cusSource; + @Excel(name = "客户等级") + private String cusLevel; + @Excel(name = "业务类型") + private String businessType; + @Excel(name = "联系地址") + private String contactAddress; + + // 客户管理信息表字段 + @Excel(name = "部门") + private String dept; + @Excel(name = "业务员") + private String userName; + @Excel(name = "跟进阶段") + private String followStep; + @Excel(name = "预计转入公海原因") + private String seasReason; + @Excel(name = "公海组") + private String seasGroup; + @Excel(name = "原部门") + private String oldDept; + + // 客户联系人表字段 + @Excel(name = "姓名") + private String name; + @Excel(name = "昵称") + private String nickName; + @Excel(name = "邮箱") + private String email; + @Excel(name = "手机") + private String telephone; + @Excel(name = "性别") + private String sex; + @Excel(name = "生日") + private String birthday; + @Excel(name = "whatsApp") + private String whatsApp; + @Excel(name = "联系人备注") + private String contactRemark; +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusImportService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusImportService.java new file mode 100644 index 0000000..99c1b2d --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusImportService.java @@ -0,0 +1,16 @@ +package com.ruoyi.cus.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +public interface ICusImportService { + /** + * 导入客户及联系人信息 + * @param file 导入文件 + * @return 导入结果 + */ + AjaxResult importCusAndContacts(MultipartFile file) throws IOException; + +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java new file mode 100644 index 0000000..c483577 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java @@ -0,0 +1,80 @@ +package com.ruoyi.cus.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.cus.dto.CusBankImportDTO; +import com.ruoyi.cus.dto.CusImportDTO; +import com.ruoyi.cus.service.ICusImportService; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +@Service +@Transactional(rollbackFor = Exception.class) +public class CusImportServiceImpl implements ICusImportService { + /** + * 导入客户及联系人信息 + * + * @param file 导入文件 + * @return 导入结果 + */ + @Override + public AjaxResult importCusAndContacts(MultipartFile file) throws IOException { + try { + // 先打印所有sheet页名称 + Workbook workbook = new XSSFWorkbook(file.getInputStream()); + int numberOfSheets = workbook.getNumberOfSheets(); + System.out.println("总共有 " + numberOfSheets + " 个sheet页"); + + for (int i = 0; i < numberOfSheets; i++) { + Sheet sheet = workbook.getSheetAt(i); + System.out.println("Sheet " + i + " 名称: " + sheet.getSheetName()); + } + + // 关闭workbook + workbook.close(); + // 重新获取输入流用于数据读取 + InputStream inputStream = file.getInputStream(); + + // 读取第二个sheet页数据(索引为1) + ExcelUtil cusUtil = new ExcelUtil<>(CusImportDTO.class); + List secondSheetList = cusUtil.importExcel("客户联系人", inputStream, 1); + + System.out.println("第二个sheet页数据条数: " + (secondSheetList != null ? secondSheetList.size() : 0)); + + // 重新获取输入流用于读取第三个sheet页数据 + InputStream thirdSheetInputStream = file.getInputStream(); + + // 读取第三个sheet页数据(索引为2) + ExcelUtil bankUtil = new ExcelUtil<>(CusBankImportDTO.class); + List thirdSheetList = bankUtil.importExcel("银行资料", thirdSheetInputStream, 0); + System.out.println("第三个sheet页数据条数: " + (thirdSheetList != null ? thirdSheetList.size() : 0)); + return AjaxResult.success("导入成功"); + } catch (Exception e) { + return AjaxResult.error("导入失败:" + e.getMessage()); + } + } + + /** + * 数据处理 + * + * @param cusList List + * @param bankList List + * @author PQZ + * @date 15:30 2025/11/19 + **/ + private void saveCusAndBank(List cusList, List bankList) { + + + } + + +} + diff --git a/dl_vue/src/views/cus/main/index.vue b/dl_vue/src/views/cus/main/index.vue index ee542af..806ae16 100644 --- a/dl_vue/src/views/cus/main/index.vue +++ b/dl_vue/src/views/cus/main/index.vue @@ -63,6 +63,16 @@ v-hasPermi="['cus:main:export']" >导出 + + 导入 + + @@ -241,12 +251,28 @@ + + + + +
将文件拖到此处,或点击上传
+
+ 仅允许导入xls、xlsx格式文件。 + 下载模板 +
+
+ +