From caa972cd246d9b40465385bfc0b2f98581653da7 Mon Sep 17 00:00:00 2001 From: liuxiaoxu <1793812695@qq.com> Date: Sun, 16 Feb 2025 16:00:07 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E9=94=80=E5=94=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20=E6=8C=89=E7=85=A7=E4=B8=87=E6=9D=90=E8=A6=81=E6=B1=82?= =?UTF-8?q?=EF=BC=8C=E9=94=80=E5=94=AE=E7=AE=A1=E7=90=86=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=8D=95=E6=96=B0=E5=A2=9E=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81=E9=83=A8=E5=88=86?= =?UTF-8?q?=E8=A1=8C=E5=92=8C=E5=85=A8=E9=83=A8=E8=A1=8C=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E5=87=BA=E6=9B=B4=E5=A4=9A=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E9=94=80=E5=94=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=94=AE=E5=90=8E=E9=80=9A=E7=9F=A5=E5=8D=95=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E5=AE=9E=E4=BD=93=E7=B1=BB=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AF=BC=E5=87=BA=E6=89=80=E6=9C=89=E5=92=8C=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=AF=BC=E5=87=BA=E5=90=8E=E7=AB=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E5=AF=BC=E5=87=BA=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=8D=95=E6=98=8E=E7=BB=86=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E6=A0=B9=E6=8D=AE=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=8D=95=E5=8F=B7=E9=9B=86=E5=90=88=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=94=AE=E5=90=8E=E9=80=9A=E7=9F=A5=E5=8D=95=E9=9B=86?= =?UTF-8?q?=E5=90=88=E6=96=B9=E6=B3=95=20=E6=96=B0=E5=A2=9E=20=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=94=AE=E5=90=8E=E9=80=9A=E7=9F=A5=E5=8D=95=E5=8F=B7?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=94=AE=E5=90=8E=E9=80=9A=E7=9F=A5=E5=8D=95?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=95=B0=E6=8D=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalesAftersalesNoticeController.java | 27 +++- .../VO/ExportSalesAftersalesNoticeVo.java | 133 ++++++++++++++++++ .../SalesAftersalesNoticeDetailMapper.java | 6 + .../mapper/SalesAftersalesNoticeMapper.java | 4 + .../ISalesAftersalesNoticeService.java | 12 ++ .../SalesAftersalesNoticeServiceImpl.java | 80 ++++++++++- .../SalesAftersalesNoticeDetailMapper.xml | 7 + .../sales/SalesAftersalesNoticeMapper.xml | 8 ++ .../afterSalesNotice/afterSalesNotice.html | 62 +++++++- 9 files changed, 331 insertions(+), 8 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/ExportSalesAftersalesNoticeVo.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAftersalesNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAftersalesNoticeController.java index 078b84f0..5f798b37 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAftersalesNoticeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAftersalesNoticeController.java @@ -8,6 +8,7 @@ import com.ruoyi.aftersales.service.IAftersalesOrderService; import com.ruoyi.process.general.service.IProcessService; import com.ruoyi.quality.domain.VO.CheckoutMaterialVO; import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail; +import com.ruoyi.sales.domain.VO.ExportSalesAftersalesNoticeVo; import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO; import com.ruoyi.sales.service.ISalesAftersalesNoticeDetailService; import com.ruoyi.system.domain.SysSalesOrder; @@ -95,15 +96,33 @@ public class SalesAftersalesNoticeController extends BaseController */ @RequiresPermissions("sales:afterSalesNotice:export") @Log(title = "售后通知单", businessType = BusinessType.EXPORT) - @PostMapping("/export") + @PostMapping("/exportAll") @ResponseBody - public AjaxResult export(SalesAftersalesNoticeVO salesAftersalesNoticeVO) + public AjaxResult exportAll(SalesAftersalesNoticeVO salesAftersalesNoticeVO) { List list = salesAftersalesNoticeService.selectSalesAftersalesNoticeList(salesAftersalesNoticeVO); - ExcelUtil util = new ExcelUtil(SalesAftersalesNoticeVO.class); - return util.exportExcel(list, "售后通知单数据"); + List exportSalesAftersalesNoticeVos = salesAftersalesNoticeService.exportSalesAftersalesNoticeList(list); + ExcelUtil util = new ExcelUtil(ExportSalesAftersalesNoticeVo.class); + return util.exportExcel(exportSalesAftersalesNoticeVos, "售后通知单数据"); } + + /** + * 导出售后通知单列表 + */ + @RequiresPermissions("sales:afterSalesNotice:export") + @Log(title = "售后通知单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(@RequestBody String[] aftersalesNoticeCodes) + { + List list = salesAftersalesNoticeService.selectSalesAftersalesNoticeListByCodes(aftersalesNoticeCodes); + List exportSalesAftersalesNoticeVos = salesAftersalesNoticeService.exportSalesAftersalesNoticeList(list); + ExcelUtil util = new ExcelUtil(ExportSalesAftersalesNoticeVo.class); + return util.exportExcel(exportSalesAftersalesNoticeVos, "售后通知单数据"); + } + + /** * 新增售后通知单 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/ExportSalesAftersalesNoticeVo.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/ExportSalesAftersalesNoticeVo.java new file mode 100644 index 00000000..a68bf15c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/ExportSalesAftersalesNoticeVo.java @@ -0,0 +1,133 @@ +package com.ruoyi.sales.domain.VO; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.util.Date; + +/** +* 销售管理售后通知单导出明细 +* */ +@Data +public class ExportSalesAftersalesNoticeVo { + + + /** 售后单号 */ + @Excel(name = "售后单号") + private String aftersalesNoticeCode; + + /** 关联销售订单编号 */ + @Excel(name = "关联销售订单编号") + private String salesOrderCode; + + + /** 关联生产订单号 */ + @Excel(name = "关联生产订单号") + private String makeNo; + + /** 审核状态 */ + @Excel(name = "审核状态", dictType = "auditStatus") + private String auditStatus; + + /** 售后状态 */ + @Excel(name = "售后状态",dictType = "sales_aftersales_status") + private String aftersalesStatus; + + /** 业务人员 */ + @Excel(name = "业务人员") + private String businessMembers; + + /** 售后人员 */ + @Excel(name = "售后人员") + private String aftersalesMembers; + + /** 客户代码 */ + @Excel(name = "客户代码") + private String enterpriseCode; + + /** 客户名称 */ + @Excel(name = "客户名称") + private String enterpriseName; + + /** 物料数合计 */ + @Excel(name = "物料数合计") + private String materialSum; + + /** 数量合计 */ + @Excel(name = "数量合计") + private String enterpriseSum; + + /** 客户要求出发日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "客户要求出发日期") + private Date startTime; + + /** 联系人 */ + @Excel(name = "联系人") + private String customerContact; + + /** 联系电话 */ + @Excel(name = "联系电话") + private String contactNumber; + + /** 公司地址 */ + @Excel(name = "公司地址") + private String companyAddress; + + /** 紧急程度(0一般、1紧急) */ + @Excel(name = "紧急程度", dictType = "aftersales_emergency_degree") + private String emergencyDegree; + + /** 售后问题 */ + @Excel(name = "售后问题") + private String aftersalesProblem; + + /** 报告问题 */ + @Excel(name = "报告问题") + private String aftersalesReportUrl; + + /** 客户ID */ + private String customerId; + + /** 客户名称 */ + private String customerName; + + /** SN号(产品序列号) */ + @Excel(name = "SN号") + private String snCode; + + /** 设备流水号 */ + @Excel(name = "设备流水号") + private String deviceRunningNumber; + + /** 物料名称 */ + @Excel(name = "物料名称") + private String materialName; + + /** 料号 */ + @Excel(name = "料号") + private String materialNo; + + /** 物料品牌 */ + @Excel(name = "物料品牌") + private String materialBrand; + + /** 物料单位 */ + @Excel(name = "物料单位") + private String materialUnit; + + /** 物料描述 */ + @Excel(name = "物料描述") + private String materialDescribe; + + /** 物料加工方式 */ + @Excel(name = "物料加工方式", dictType = "processMethod") + private String materialProcessMethod; + + /** 已出库数量 */ + @Excel(name = "已出库数量") + private Integer shippedGoodsSum; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeDetailMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeDetailMapper.java index 6499d98f..0d7c25fe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeDetailMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeDetailMapper.java @@ -79,4 +79,10 @@ public interface SalesAftersalesNoticeDetailMapper * 根据售后通知单号查询售后通知单详情数据 * */ List selectSalesAftersalesNoticeDetailListByCode(String aftersalesNoticeCode); + + /** + * 根据售后通知单号查询售后通知单详情数据 + * */ + List selectAftersalesNoticeDetailListByCodes(List collectNoticeCodes); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeMapper.java index 231e2a26..99ea16bf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeMapper.java @@ -86,4 +86,8 @@ public interface SalesAftersalesNoticeMapper * */ int updateSalesAftersalesNoticeByCode(SalesAftersalesNotice salesAftersalesNotice); + /** + * 根据售后通知单号集合查询售后通知单集合 + * */ + List selectSalesAftersalesNoticeListByCodes(String[] aftersalesNoticeCodes); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeService.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeService.java index 80b4f272..cc055ed7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeService.java @@ -4,6 +4,7 @@ import java.util.List; import com.ruoyi.aftersales.domain.AftersalesOrder; import com.ruoyi.sales.domain.SalesAftersalesNotice; +import com.ruoyi.sales.domain.VO.ExportSalesAftersalesNoticeVo; import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO; import com.ruoyi.system.domain.SysSalesOrder; import com.ruoyi.system.domain.Vo.SelectAftersalesNoticeVO; @@ -95,4 +96,15 @@ public interface ISalesAftersalesNoticeService * 根据销售单号查询售后通知单Vo类 * */ List selectMaterialInfoBySalesOrderCode(String salesOrderCode); + + /** + * 导出售后通知单明细 + * */ + List exportSalesAftersalesNoticeList(List list); + + /** + * 根据售后通知单号集合查询售后通知单集合 + * */ + List selectSalesAftersalesNoticeListByCodes(String[] aftersalesNoticeCodes); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeServiceImpl.java index 1f0b5bb2..7b4b4684 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.sales.service.impl; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import com.github.pagehelper.Page; import com.ruoyi.common.core.domain.entity.SysUser; @@ -13,11 +15,11 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.process.general.service.IProcessService; import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper; import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail; +import com.ruoyi.sales.domain.VO.ExportSalesAftersalesNoticeVo; import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO; import com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper; -import com.ruoyi.system.domain.SysMakeOrder; -import com.ruoyi.system.domain.SysSalesOrder; -import com.ruoyi.system.domain.SysSalesOrderChild; +import com.ruoyi.system.domain.*; +import com.ruoyi.system.domain.Vo.ExportSalesShippingInformDetailVo; import com.ruoyi.system.domain.Vo.SelectAftersalesNoticeVO; import com.ruoyi.system.mapper.SysMakeOrderMapper; import com.ruoyi.system.mapper.SysSalesOrderChildMapper; @@ -90,6 +92,16 @@ public class SalesAftersalesNoticeServiceImpl implements ISalesAftersalesNoticeS return salesAftersalesNoticeMapper.selectSalesAftersalesNoticeById(aftersalesNoticeId); } + + /** + * 根据售后通知单号集合查询售后通知单集合 + * */ + @Override + public List selectSalesAftersalesNoticeListByCodes(String[] aftersalesNoticeCodes) { + List list = salesAftersalesNoticeMapper.selectSalesAftersalesNoticeListByCodes(aftersalesNoticeCodes); + return list; + } + /** * 查询售后通知单列表 * @@ -339,6 +351,68 @@ public class SalesAftersalesNoticeServiceImpl implements ISalesAftersalesNoticeS } + /** + * 导出售后单明细 + * */ + @Override + public List exportSalesAftersalesNoticeList(List list) { + // 获取所有的售后单号 + List collectNoticeCodes = list.stream().map(SalesAftersalesNoticeVO::getAftersalesNoticeCode).collect(Collectors.toList()); + + // 根据售后单号查询对应的详情列表 + List aftersalesNoticeDetails = aftersalesNoticeDetailMapper.selectAftersalesNoticeDetailListByCodes(collectNoticeCodes); + + // 创建一个售后通知VO的Map,键为售后单号 + Map salesAftersalesNoticeVOMap = list.stream() + .collect(Collectors.toMap(SalesAftersalesNoticeVO::getAftersalesNoticeCode, Function.identity())); + + // 初始化导出列表 + List exportSalesAftersalesNoticeVos = new ArrayList<>(); + + for (SalesAftersalesNoticeDetail detail : aftersalesNoticeDetails) { + ExportSalesAftersalesNoticeVo exportVo = new ExportSalesAftersalesNoticeVo(); + + // 从SalesAftersalesNoticeDetail填充数据 + exportVo.setEmergencyDegree(detail.getEmergencyDegree()); + exportVo.setAftersalesProblem(detail.getAftersalesProblem()); + exportVo.setAftersalesReportUrl(detail.getAftersalesReportUrl()); + exportVo.setSnCode(detail.getSnCode()); + exportVo.setDeviceRunningNumber(detail.getDeviceRunningNumber()); + exportVo.setMaterialName(detail.getMaterialName()); + exportVo.setMaterialNo(detail.getMaterialNo()); + exportVo.setMaterialBrand(detail.getMaterialBrand()); + exportVo.setMaterialUnit(detail.getMaterialUnit()); + exportVo.setMaterialDescribe(detail.getMaterialDescribe()); + exportVo.setMaterialProcessMethod(detail.getMaterialProcessMethod()); + exportVo.setShippedGoodsSum(detail.getShippedGoodsSum()); + + // 从SalesAftersalesNoticeVO填充数据,通过售后单号进行关联 + SalesAftersalesNoticeVO noticeVO = salesAftersalesNoticeVOMap.get(detail.getAftersalesNoticeCode()); + if (noticeVO != null) { + exportVo.setAftersalesNoticeCode(noticeVO.getAftersalesNoticeCode()); + exportVo.setSalesOrderCode(noticeVO.getSalesOrderCode()); + exportVo.setMakeNo(noticeVO.getMakeNo()); + exportVo.setAuditStatus(noticeVO.getAuditStatus()); + exportVo.setAftersalesStatus(noticeVO.getAftersalesStatus()); + exportVo.setBusinessMembers(noticeVO.getBusinessMembers()); + exportVo.setAftersalesMembers(noticeVO.getAftersalesMembers()); + exportVo.setEnterpriseCode(noticeVO.getEnterpriseCode()); + exportVo.setEnterpriseName(noticeVO.getEnterpriseName()); + exportVo.setMaterialSum(noticeVO.getMaterialSum()); + exportVo.setEnterpriseSum(noticeVO.getEnterpriseSum()); + exportVo.setStartTime(noticeVO.getStartTime()); + exportVo.setCustomerContact(noticeVO.getCustomerContact()); + exportVo.setContactNumber(noticeVO.getContactNumber()); + exportVo.setCompanyAddress(noticeVO.getCompanyAddress()); + } + + // 添加到结果列表 + exportSalesAftersalesNoticeVos.add(exportVo); + } + + return exportSalesAftersalesNoticeVos; + } + /** * 创建售后单审核流程 * @param applyTitle diff --git a/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeDetailMapper.xml index b61b9a47..4d42f7dc 100644 --- a/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeDetailMapper.xml @@ -53,6 +53,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where aftersales_notice_code = #{aftersalesNoticeCode} + diff --git a/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeMapper.xml b/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeMapper.xml index 593e04ba..1d8b0465 100644 --- a/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeMapper.xml @@ -69,6 +69,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where aftersales_notice_code = #{aftersalesNoticeCode} + + insert into sales_aftersales_notice diff --git a/ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/afterSalesNotice.html b/ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/afterSalesNotice.html index 169c3d3f..1867bf10 100644 --- a/ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/afterSalesNotice.html +++ b/ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/afterSalesNotice.html @@ -55,8 +55,13 @@ +
-
+
@@ -289,6 +294,61 @@ $.modal.open("详情",url); } + + // 导出 + function exportExcel(formId) { + // $.table.set(); + var aftersalesNoticeCodeData = []; + var selections = $("#bootstrap-table").bootstrapTable("getSelections"); + if(selections.length === 0){ + $.modal.confirm("确定导出所有售后通知单吗?", function() { + var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId; + var params = $("#bootstrap-table").bootstrapTable('getOptions'); + var dataParam = $("#" + currentId).serializeArray(); + dataParam.push({ "name": "orderByColumn", "value": params.sortName }); + dataParam.push({ "name": "isAsc", "value": params.sortOrder }); + $.modal.loading("正在导出数据,请稍后..."); + $.post(prefix + '/exportAll', dataParam, function(result) { + if (result.code == web_status.SUCCESS) { + window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true; + } else if (result.code == web_status.WARNING) { + $.modal.alertWarning(result.msg) + } else { + $.modal.alertError(result.msg); + } + $.modal.closeLoading(); + }); + }); + }else { + $.modal.confirm("确定导出选中的所有售后通知单吗?", function () { + //·拼接单号 + for(let i=0;i \ No newline at end of file