diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOrderController.java index c3f46828..470601a0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOrderController.java @@ -2,6 +2,9 @@ package com.ruoyi.aftersales.controller; import java.util.List; +import com.ruoyi.aftersales.domain.AftersalesOutOrder; +import com.ruoyi.aftersales.domain.vo.ExportAftersalesOrderVo; +import com.ruoyi.aftersales.domain.vo.ExportAftersalesOutOrderVo; import com.ruoyi.aftersales.domain.vo.SelectDeviceVO; import com.ruoyi.aftersales.service.IAfterSalesShippingDeviceService; import com.ruoyi.common.core.domain.entity.SysUser; @@ -86,11 +89,23 @@ public class AftersalesOrderController extends BaseController @Log(title = "售后单", businessType = BusinessType.EXPORT) @PostMapping("/export") @ResponseBody - public AjaxResult export(AftersalesOrder aftersalesOrder) + public AjaxResult export(AftersalesOrder aftersalesOrder,String ids) { - List list = aftersalesOrderService.selectAftersalesOrderList(aftersalesOrder); - ExcelUtil util = new ExcelUtil(AftersalesOrder.class); - return util.exportExcel(list, "售后单数据"); + + if (org.springframework.util.StringUtils.isEmpty(ids)){ + + List list = aftersalesOrderService.selectAftersalesOrderList(aftersalesOrder); + List exportAftersalesOrderVos = aftersalesOrderService.exportAftersalesOrderList(list); + ExcelUtil util = new ExcelUtil(ExportAftersalesOrderVo.class); + return util.exportExcel(exportAftersalesOrderVos, "售后单数据"); + }else { + String[] aftersalesOrderCodes = ids.split(","); + List list = aftersalesOrderService.selectAftersalesOrderByCodes(aftersalesOrderCodes); + List exportAftersalesOrderVos = aftersalesOrderService.exportAftersalesOrderList(list); + ExcelUtil util = new ExcelUtil(ExportAftersalesOrderVo.class); + return util.exportExcel(exportAftersalesOrderVos, "售后单数据"); + } + } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesOrder.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesOrder.java index 9aaf437f..8b9901a1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesOrder.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesOrder.java @@ -38,7 +38,7 @@ public class AftersalesOrder extends BaseEntity private String auditStatus; /** 售后状态 */ - @Excel(name = "售后状态") + @Excel(name = "售后状态",dictType = "sales_aftersales_status") private String aftersalesStatus; /** 业务员 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/ExportAftersalesOrderVo.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/ExportAftersalesOrderVo.java new file mode 100644 index 00000000..3389ac7e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/ExportAftersalesOrderVo.java @@ -0,0 +1,118 @@ +package com.ruoyi.aftersales.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.util.Date; + +/** +* 导出售后单明细 +* */ +@Data +public class ExportAftersalesOrderVo { + + + /** 售后单号 */ + @Excel(name = "售后单号") + private String aftersalesOrderCode; + + /** 关联销售订单号 */ + @Excel(name = "关联销售订单号") + private String salesOrderCode; + + + /** 售后状态 */ + @Excel(name = "售后状态",dictType = "sales_aftersales_status") + private String aftersalesStatus; + + /** 业务员 */ + @Excel(name = "业务员") + private String businessName; + + /** 售后员 */ + @Excel(name = "售后员") + private String aftersalesName; + + /** 客户ID */ + @Excel(name = "客户ID") + private String customerId; + + /** 客户名称 */ + @Excel(name = "客户名称") + private String customerName; + + + /** 物料数合计 */ + @Excel(name = "物料数合计") + private String materialSum; + + /** 数量合计 */ + @Excel(name = "数量合计") + private String enterpriseSum; + + /** 客户要求出发日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "客户要求出发日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date startDate; + + /** 收货联系人 */ + @Excel(name = "收货联系人") + private String deliveryName; + + /** 收货电话 */ + @Excel(name = "收货电话") + private String deliveryNumber; + + /** 公司地址 */ + @Excel(name = "公司地址") + private String companyAddress; + + + /** 料号 */ + @Excel(name = "料号") + private String materialNo; + + /** 物料名称 */ + @Excel(name = "物料名称") + private String materialName; + + /** 物料品牌 */ + @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; + + /** 紧急程度(0一般、1紧急) */ + @Excel(name = "紧急程度",dictType = "aftersales_emergency_degree") + private String emergencyDegree; + + /** 售后问题 */ + @Excel(name = "售后问题") + private String aftersalesProblem; + + + /** SN号(产品序列号) */ + @Excel(name = "SN号") + private String snCode; + + /** 设备流水号 */ + @Excel(name = "设备流水号") + private String deviceRunningNumber; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesOrderMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesOrderMapper.java index 488a7b87..4090c57c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesOrderMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesOrderMapper.java @@ -89,4 +89,9 @@ public interface AftersalesOrderMapper * 根据售后单号查询售后单详情数据 * */ AftersalesOrder selectAftersalesOrderByCode(String aftersalesOrderCode); + + /** + * 通过售后单号数组查询售后单详情数据 + * */ + List selectAftersalesOrderByCodes(String[] aftersalesOrderCodes); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOrderService.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOrderService.java index 76bf3ed4..9f60e7ca 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOrderService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOrderService.java @@ -2,6 +2,7 @@ package com.ruoyi.aftersales.service; import java.util.List; import com.ruoyi.aftersales.domain.AftersalesOrder; +import com.ruoyi.aftersales.domain.vo.ExportAftersalesOrderVo; import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO; import org.activiti.engine.runtime.ProcessInstance; @@ -98,4 +99,15 @@ public interface IAftersalesOrderService * 根据售后单号查询售后单详情数据 * */ AftersalesOrder selectAftersalesOrderByCode(String aftersalesNoticeCode); + + /** + * 通过售后单号数组查询售后单详情数据 + * */ + List selectAftersalesOrderByCodes(String[] aftersalesOrderCodes); + + + /** + * 导出售后单明细 + * */ + List exportAftersalesOrderList(List list); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOrderServiceImpl.java index 1dc48680..3b8dc77b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOrderServiceImpl.java @@ -1,7 +1,10 @@ package com.ruoyi.aftersales.service.impl; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import com.ruoyi.aftersales.domain.vo.ExportAftersalesOrderVo; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.DateUtils; @@ -12,6 +15,7 @@ import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper; import com.ruoyi.sales.domain.SalesAftersalesNotice; import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail; import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO; +import com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper; import com.ruoyi.sales.mapper.SalesAftersalesNoticeMapper; import com.ruoyi.system.domain.SysAttach; import com.ruoyi.system.domain.SysMakeOrder; @@ -56,6 +60,9 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService @Autowired private SalesAftersalesNoticeMapper salesAftersalesNoticeMapper; + @Autowired + private SalesAftersalesNoticeDetailMapper aftersalesNoticeDetailMapper; + /** * 查询售后单 * @@ -97,6 +104,16 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService return aftersalesOrderMapper.selectAftersalesOrderList(aftersalesOrder); } + + /** + * 通过售后单号数组查询售后单详情数据 + * */ + @Override + public List selectAftersalesOrderByCodes(String[] aftersalesOrderCodes) { + + return aftersalesOrderMapper.selectAftersalesOrderByCodes(aftersalesOrderCodes); + } + /** * 新增售后单 * @@ -324,4 +341,65 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService return aftersalesOrderMapper.selectAftersalesOrderWithAttachById(aftersalesOrder.getAftersalesOrderId()); } + + /** + * 导出售后单明细 + * */ + @Override + public List exportAftersalesOrderList(List list) { + // 获取所有的售后单号 + List collectAftersalesOrderCodes = list.stream() + .map(AftersalesOrder::getAftersalesOrderCode) + .collect(Collectors.toList()); + + // 根据售后单号查询对应的物料详情列表 + List salesAftersalesNoticeDetails = aftersalesNoticeDetailMapper.selectAftersalesNoticeDetailListByCodes(collectAftersalesOrderCodes); + + // 创建一个 AftersalesOrder 的 Map,键为售后单号 + Map aftersalesOrderMap = list.stream() + .collect(Collectors.toMap(AftersalesOrder::getAftersalesOrderCode, Function.identity(), (existing, replacement) -> existing)); + + // 初始化导出列表 + List exportAftersalesOrderVos = new ArrayList<>(); + + for (SalesAftersalesNoticeDetail detail : salesAftersalesNoticeDetails) { + ExportAftersalesOrderVo exportVo = new ExportAftersalesOrderVo(); + + // 从 SalesAftersalesNoticeDetail 填充数据 + exportVo.setMaterialNo(detail.getMaterialNo()); + exportVo.setMaterialName(detail.getMaterialName()); + exportVo.setMaterialBrand(detail.getMaterialBrand()); + exportVo.setMaterialUnit(detail.getMaterialUnit()); + exportVo.setMaterialDescribe(detail.getMaterialDescribe()); + exportVo.setMaterialProcessMethod(detail.getMaterialProcessMethod()); + exportVo.setShippedGoodsSum(detail.getShippedGoodsSum()); + exportVo.setEmergencyDegree(detail.getEmergencyDegree()); + exportVo.setAftersalesProblem(detail.getAftersalesProblem()); + exportVo.setSnCode(detail.getSnCode()); + exportVo.setDeviceRunningNumber(detail.getDeviceRunningNumber()); + + // 从 AftersalesOrder 填充数据,通过售后单号进行关联 + AftersalesOrder order = aftersalesOrderMap.get(detail.getAftersalesNoticeCode()); + if (order != null) { + exportVo.setAftersalesOrderCode(order.getAftersalesOrderCode()); + exportVo.setSalesOrderCode(order.getSalesOrderCode()); + exportVo.setAftersalesStatus(order.getAftersalesStatus()); + exportVo.setBusinessName(order.getBusinessName()); + exportVo.setAftersalesName(order.getAftersalesName()); + exportVo.setCustomerId(order.getCustomerId()); + exportVo.setCustomerName(order.getCustomerName()); + exportVo.setMaterialSum(order.getMaterialSum()); + exportVo.setEnterpriseSum(order.getEnterpriseSum()); + exportVo.setStartDate(order.getStartDate()); + exportVo.setDeliveryName(order.getDeliveryName()); + exportVo.setDeliveryNumber(order.getDeliveryNumber()); + exportVo.setCompanyAddress(order.getCompanyAddress()); + } + + // 添加到结果列表 + exportAftersalesOrderVos.add(exportVo); + } + + return exportAftersalesOrderVos; + } } 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 0d7c25fe..f6c36766 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 @@ -85,4 +85,5 @@ public interface SalesAftersalesNoticeDetailMapper * */ List selectAftersalesNoticeDetailListByCodes(List collectNoticeCodes); + } diff --git a/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesOrderMapper.xml b/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesOrderMapper.xml index ec0ade3b..ace29395 100644 --- a/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesOrderMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesOrderMapper.xml @@ -115,6 +115,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where aftersales_order_code = #{aftersalesOrderCode} + + insert into aftersales_order diff --git a/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/aftersalesOrder.html b/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/aftersalesOrder.html index 933599a8..68875c9c 100644 --- a/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/aftersalesOrder.html +++ b/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/aftersalesOrder.html @@ -47,6 +47,13 @@ + + +
@@ -240,6 +247,30 @@ // } // } + // 导出 + function exportExcel() { + var ids = $.table.selectColumns("aftersalesOrderCode"); + var dataParam = $("#formId").serializeArray(); + + let tipMsg = "确定导出当前所有数据吗?"; + if ($.common.isNotEmpty(ids)) { + tipMsg = `确定导出 ${ids} 数据吗?`; + dataParam.push({ "name": "ids", "value": ids }); + } + $.modal.confirm(tipMsg, function () { + $.modal.loading("正在导出数据,请稍后..."); + $.post( prefix + "/export", dataParam, function (result) { + if (result.code === web_status.SUCCESS) { + window.location.href = ctx + "common/download?fileName="+ encodeURI(result.msg) + "&delete=" + true; + } else { + $.modal.alertError(result.msg); + } + $.modal.closeLoading(); + }); + }); + } + + \ No newline at end of file