Browse Source

[feat] 售后管理

按照万材要求,售后管理售后客诉通知单新增导出功能,支持部分行和全部行导出,导出更多数据
新增导出所有和选择导出后端接口
新增 导出售后管理售后客诉通知单明细方法
新增根据出货设备查询售后客诉通知单集合方法
新增导出售后客诉通知单明细
dev
liuxiaoxu 2 days ago
parent
commit
0c1fd28763
  1. 20
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeController.java
  2. 30
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/AftersalesComplaintExportVO.java
  3. 6
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeDetailMapper.java
  4. 1
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeMapper.java
  5. 4
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeDetailService.java
  6. 4
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeService.java
  7. 86
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeDetailServiceImpl.java
  8. 8
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeServiceImpl.java
  9. 10
      ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesComplaintNoticeDetailMapper.xml

20
ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeController.java

@ -4,8 +4,10 @@ import java.util.List;
import com.ruoyi.aftersales.domain.AfterSalesShippingDevice;
import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail;
import com.ruoyi.aftersales.domain.AftersalesOrder;
import com.ruoyi.aftersales.domain.vo.AftersalesComplaintExportVO;
import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO;
import com.ruoyi.aftersales.domain.vo.ExportAftersalesOrderVo;
import com.ruoyi.aftersales.service.IAfterSalesShippingDeviceService;
import com.ruoyi.aftersales.service.IAftersalesComplaintNoticeDetailService;
import com.ruoyi.common.core.text.Convert;
@ -75,11 +77,21 @@ public class AftersalesComplaintNoticeController extends BaseController
@Log(title = "售后客诉通知单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail,String ids)
public AjaxResult export(AftersalesComplaintNotice complaintNotice,String ids)
{
List<AftersalesComplaintExportVO> complaintNoticeDetails = complaintNoticeDetailService.getAfterComplaintExportList(Convert.toStrArray(ids));
ExcelUtil<AftersalesComplaintExportVO> util = new ExcelUtil<AftersalesComplaintExportVO>(AftersalesComplaintExportVO.class);
return util.exportExcel(complaintNoticeDetails, "售后客诉通知单数据");
if (StringUtils.isEmpty(ids)){
List<AftersalesComplaintNotice> list = aftersalesComplaintNoticeService.selectAftersalesComplaintNoticeList(complaintNotice);
List<AftersalesComplaintExportVO> complaintNoticeDetails = complaintNoticeDetailService.getAfterComplaintExportList(list);
ExcelUtil<AftersalesComplaintExportVO> util = new ExcelUtil<AftersalesComplaintExportVO>(AftersalesComplaintExportVO.class);
return util.exportExcel(complaintNoticeDetails, "售后客诉通知单数据");
}else {
String[] complaintNoticeCodes = ids.split(",");
List<AftersalesComplaintNotice> list = aftersalesComplaintNoticeService.selectAftersalesComplaintNoticeListByCodes(complaintNoticeCodes);
List<AftersalesComplaintExportVO> complaintNoticeDetails = complaintNoticeDetailService.getAfterComplaintExportList(list);
ExcelUtil<AftersalesComplaintExportVO> util = new ExcelUtil<AftersalesComplaintExportVO>(AftersalesComplaintExportVO.class);
return util.exportExcel(complaintNoticeDetails, "售后客诉通知单数据");
}
}
/**

30
ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/AftersalesComplaintExportVO.java

@ -45,39 +45,19 @@ public class AftersalesComplaintExportVO extends BaseEntity {
@Excel(name = "设备型号", sort = 9)
private String materialModelCode;
/** 是否结案 */
@Excel(name = "是否结案", sort = 10,dictType = "aftersales_closing_procedures")
private String closingProcedures;
/** 客诉问题 */
@Excel(name = "客诉问题",sort = 10)
@Excel(name = "客诉问题",sort = 11)
private String complaintProblem;
/** 不良报告问题 */
@Excel(name = "不良图片",sort = 11)
private String adverseReportUrl;
/** 紧急程度 */
@Excel(name = "紧急程度",sort = 12,dictType = "aftersales_emergency_degree")
private String emergencyDegree;
/** 是否结案 */
@Excel(name = "是否结案", sort = 13,dictType = "aftersales_closing_procedures")
private String closingProcedures;
/** 备注 */
@Excel(name = "备注", sort = 14)
private String remark;
/** 录入人 */
@Excel(name = "录入人", sort = 15)
private String createBy;
/** 录入时间 */
@Excel(name = "录入时间", sort = 16, dateFormat = "yyyy-MM-dd")
private Date createTime;
/** 更新人 */
@Excel(name = "更新人", sort = 17)
private String updateBy;
/** 更新时间 */
@Excel(name = "更新时间", sort = 18, dateFormat = "yyyy-MM-dd")
private Date updateTime;
}

6
ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeDetailMapper.java

@ -106,4 +106,10 @@ public interface AftersalesComplaintNoticeDetailMapper
* @param complainNoticeCode
* */
List<AftersalesComplaintNoticeDetail> selectMaterialListByNoticeCode(String complainNoticeCode);
/**
*
* */
List<AftersalesComplaintNoticeDetail> selectAftersalesComplaintNoticeDetailListByCodeList(List<String> collectNoticeCodes);
}

1
ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeMapper.java

@ -94,4 +94,5 @@ public interface AftersalesComplaintNoticeMapper
/*
* 根据客诉订单号批量查找*/
public List<AftersalesComplaintNotice> selectComplaintNoticeByCodes(String[] codes);
}

4
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeDetailService.java

@ -1,6 +1,8 @@
package com.ruoyi.aftersales.service;
import java.util.List;
import com.ruoyi.aftersales.domain.AftersalesComplaintNotice;
import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail;
import com.ruoyi.aftersales.domain.vo.AftersalesComplaintExportVO;
import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO;
@ -35,7 +37,7 @@ public interface IAftersalesComplaintNoticeDetailService
* @param complaintNoticeCodes 售后客诉通知单号
* @return 售后客诉通知单详情集合
*/
public List<AftersalesComplaintExportVO> getAfterComplaintExportList(String[] complaintNoticeCodes) ;
public List<AftersalesComplaintExportVO> getAfterComplaintExportList(List<AftersalesComplaintNotice> list) ;
/**
* 新增售后客诉通知单详情

4
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeService.java

@ -90,4 +90,8 @@ public interface IAftersalesComplaintNoticeService
* */
List<AftersalesMaterialVO> selectMaterialInfoByMakeNo(String makeNo);
/**
* 根据客诉单号查找售后客诉通知单
* */
List<AftersalesComplaintNotice> selectAftersalesComplaintNoticeListByCodes(String[] complaintNoticeCodes);
}

86
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeDetailServiceImpl.java

@ -2,10 +2,9 @@ package com.ruoyi.aftersales.service.impl;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.ruoyi.aftersales.domain.AfterSalesShippingDevice;
import com.ruoyi.aftersales.domain.AftersalesComplaintNotice;
@ -78,45 +77,50 @@ public class AftersalesComplaintNoticeDetailServiceImpl implements IAftersalesCo
/**
* 导出售后客诉通知单详情列表
*/
@Override
public List<AftersalesComplaintExportVO> getAfterComplaintExportList(String[] complaintNoticeCodes) {
List<AftersalesComplaintNotice> complaintNoticeList = new ArrayList<>();
if(StringUtils.isNotEmpty(complaintNoticeCodes)){
complaintNoticeList = complaintNoticeMapper.selectComplaintNoticeByCodes(complaintNoticeCodes);
}else {
AftersalesComplaintNotice tempNotice = new AftersalesComplaintNotice();
complaintNoticeList = complaintNoticeMapper.selectAftersalesComplaintNoticeList(tempNotice);
}
List<AftersalesComplaintExportVO> exportVOList = new ArrayList<>();
for (AftersalesComplaintNotice notice: complaintNoticeList) {
String noticeCode = notice.getComplaintNoticeCode();
List<AftersalesComplaintNoticeDetail> noticeDetails = aftersalesComplaintNoticeDetailMapper.selectMaterialListByNoticeCode(noticeCode);
if(StringUtils.isNotEmpty(noticeDetails)){
for (AftersalesComplaintNoticeDetail noticeDetail: noticeDetails) {
AftersalesComplaintExportVO exportVO = new AftersalesComplaintExportVO();
exportVO.setComplaintNoticeCode(noticeCode);
exportVO.setSnCode(notice.getSnCode());
exportVO.setSalesOrderCode(notice.getSalesOrderCode());
exportVO.setClosingProcedures(notice.getClosingProcedures());
exportVO.setCustomerName(notice.getCustomerName());
exportVO.setMakeNo(notice.getMakeNo());
exportVO.setRemark(notice.getRemark());
exportVO.setMaterialNo(notice.getMaterialNo());
exportVO.setMaterialName(notice.getMaterialName());
exportVO.setMaterialBrand(notice.getMaterialBrand());
exportVO.setMaterialModelCode(notice.getMaterialModelCode());
exportVO.setCreateBy(notice.getCreateBy());
exportVO.setCreateTime(notice.getCreateTime());
exportVO.setUpdateBy(notice.getUpdateBy());
exportVO.setUpdateTime(notice.getUpdateTime());
exportVO.setComplaintProblem(noticeDetail.getComplaintProblem());
exportVO.setAdverseReportUrl(noticeDetail.getAdverseReportUrl());
exportVO.setEmergencyDegree(noticeDetail.getEmergencyDegree());
exportVOList.add(exportVO);
}
@Override
public List<AftersalesComplaintExportVO> getAfterComplaintExportList(List<AftersalesComplaintNotice> list) {
// 获取所有的客诉单号
List<String> collectNoticeCodes = list.stream()
.map(AftersalesComplaintNotice::getComplaintNoticeCode)
.collect(Collectors.toList());
// 根据客诉单号查询对应的客诉详情列表
List<AftersalesComplaintNoticeDetail> noticeDetails = aftersalesComplaintNoticeDetailMapper.selectAftersalesComplaintNoticeDetailListByCodeList(collectNoticeCodes);
// 创建一个 AftersalesComplaintNotice 的 Map,键为客诉单号
Map<String, AftersalesComplaintNotice> aftersalesComplaintNoticeMap = list.stream()
.collect(Collectors.toMap(AftersalesComplaintNotice::getComplaintNoticeCode, Function.identity()));
// 初始化导出列表
List<AftersalesComplaintExportVO> aftersalesComplaintExportVOS = new ArrayList<>();
for (AftersalesComplaintNoticeDetail detail : noticeDetails) {
AftersalesComplaintExportVO exportVo = new AftersalesComplaintExportVO();
// 从 AftersalesComplaintNoticeDetail 填充数据
exportVo.setComplaintProblem(detail.getComplaintProblem());
exportVo.setEmergencyDegree(detail.getEmergencyDegree());
// 从 AftersalesComplaintNotice 填充数据,通过客诉单号进行关联
AftersalesComplaintNotice notice = aftersalesComplaintNoticeMap.get(detail.getComplaintNoticeCode());
if (notice != null) {
exportVo.setSnCode(notice.getSnCode());
exportVo.setComplaintNoticeCode(notice.getComplaintNoticeCode());
exportVo.setSalesOrderCode(notice.getSalesOrderCode());
exportVo.setCustomerName(notice.getCustomerName());
exportVo.setMakeNo(notice.getMakeNo());
exportVo.setMaterialNo(notice.getMaterialNo());
exportVo.setMaterialName(notice.getMaterialName());
exportVo.setMaterialBrand(notice.getMaterialBrand());
exportVo.setMaterialModelCode(notice.getMaterialModelCode());
exportVo.setClosingProcedures(notice.getClosingProcedures());
}
// 添加到结果列表
aftersalesComplaintExportVOS.add(exportVo);
}
return exportVOList;
return aftersalesComplaintExportVOS;
}
/**

8
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeServiceImpl.java

@ -95,6 +95,14 @@ public class AftersalesComplaintNoticeServiceImpl implements IAftersalesComplain
return aftersalesComplaintNoticeMapper.selectAftersalesComplaintNoticeList(aftersalesComplaintNotice);
}
/**
* 根据客诉单号查找售后客诉通知单
* */
@Override
public List<AftersalesComplaintNotice> selectAftersalesComplaintNoticeListByCodes(String[] complaintNoticeCodes) {
return aftersalesComplaintNoticeMapper.selectComplaintNoticeByCodes(complaintNoticeCodes);
}
/**
* 新增售后客诉通知单
*

10
ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesComplaintNoticeDetailMapper.xml

@ -52,6 +52,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</select>
<select id="selectAftersalesComplaintNoticeDetailListByCodeList" parameterType="String" resultMap="AftersalesComplaintNoticeDetailResult">
<include refid="selectAftersalesComplaintNoticeDetailVo"/>
where complaint_notice_code in
<foreach item="complaintNoticeCode" index="index" collection="list" open="(" separator="," close=")">
#{complaintNoticeCode}
</foreach>
</select>
<insert id="insertAftersalesComplaintNoticeDetail" parameterType="AftersalesComplaintNoticeDetail" useGeneratedKeys="true" keyProperty="complaintNoticeDetailId">
insert into aftersales_complaint_notice_detail
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -126,4 +135,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT max(complaint_notice_code) from aftersales_complaint_notice_detail where complaint_notice_code like concat(#{code},'%')
</select>
</mapper>
Loading…
Cancel
Save