Browse Source

[feat] 售后管理

按照万材要求,售后管理售后客诉通知单新增导出功能,支持部分行和全部行导出,导出更多数据
新增导出所有和选择导出后端接口
新增 导出售后管理售后客诉通知单明细方法
新增根据出货设备查询售后客诉通知单集合方法
新增导出售后客诉通知单明细
dev
liuxiaoxu 3 days ago
parent
commit
0c1fd28763
  1. 16
      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. 84
      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

16
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.AfterSalesShippingDevice;
import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; 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.AftersalesComplaintExportVO;
import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO; 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.IAfterSalesShippingDeviceService;
import com.ruoyi.aftersales.service.IAftersalesComplaintNoticeDetailService; import com.ruoyi.aftersales.service.IAftersalesComplaintNoticeDetailService;
import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.core.text.Convert;
@ -75,11 +77,21 @@ public class AftersalesComplaintNoticeController extends BaseController
@Log(title = "售后客诉通知单", businessType = BusinessType.EXPORT) @Log(title = "售后客诉通知单", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
@ResponseBody @ResponseBody
public AjaxResult export(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail,String ids) public AjaxResult export(AftersalesComplaintNotice complaintNotice,String ids)
{ {
List<AftersalesComplaintExportVO> complaintNoticeDetails = complaintNoticeDetailService.getAfterComplaintExportList(Convert.toStrArray(ids)); if (StringUtils.isEmpty(ids)){
List<AftersalesComplaintNotice> list = aftersalesComplaintNoticeService.selectAftersalesComplaintNoticeList(complaintNotice);
List<AftersalesComplaintExportVO> complaintNoticeDetails = complaintNoticeDetailService.getAfterComplaintExportList(list);
ExcelUtil<AftersalesComplaintExportVO> util = new ExcelUtil<AftersalesComplaintExportVO>(AftersalesComplaintExportVO.class); ExcelUtil<AftersalesComplaintExportVO> util = new ExcelUtil<AftersalesComplaintExportVO>(AftersalesComplaintExportVO.class);
return util.exportExcel(complaintNoticeDetails, "售后客诉通知单数据"); 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) @Excel(name = "设备型号", sort = 9)
private String materialModelCode; 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; private String complaintProblem;
/** 不良报告问题 */
@Excel(name = "不良图片",sort = 11)
private String adverseReportUrl;
/** 紧急程度 */ /** 紧急程度 */
@Excel(name = "紧急程度",sort = 12,dictType = "aftersales_emergency_degree") @Excel(name = "紧急程度",sort = 12,dictType = "aftersales_emergency_degree")
private String emergencyDegree; 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 * @param complainNoticeCode
* */ * */
List<AftersalesComplaintNoticeDetail> selectMaterialListByNoticeCode(String 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); 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; package com.ruoyi.aftersales.service;
import java.util.List; import java.util.List;
import com.ruoyi.aftersales.domain.AftersalesComplaintNotice;
import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail;
import com.ruoyi.aftersales.domain.vo.AftersalesComplaintExportVO; import com.ruoyi.aftersales.domain.vo.AftersalesComplaintExportVO;
import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO; import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO;
@ -35,7 +37,7 @@ public interface IAftersalesComplaintNoticeDetailService
* @param complaintNoticeCodes 售后客诉通知单号 * @param complaintNoticeCodes 售后客诉通知单号
* @return 售后客诉通知单详情集合 * @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<AftersalesMaterialVO> selectMaterialInfoByMakeNo(String makeNo);
/**
* 根据客诉单号查找售后客诉通知单
* */
List<AftersalesComplaintNotice> selectAftersalesComplaintNoticeListByCodes(String[] complaintNoticeCodes);
} }

84
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.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date; import java.util.function.Function;
import java.util.List; import java.util.stream.Collectors;
import java.util.Optional;
import com.ruoyi.aftersales.domain.AfterSalesShippingDevice; import com.ruoyi.aftersales.domain.AfterSalesShippingDevice;
import com.ruoyi.aftersales.domain.AftersalesComplaintNotice; import com.ruoyi.aftersales.domain.AftersalesComplaintNotice;
@ -79,44 +78,49 @@ public class AftersalesComplaintNoticeDetailServiceImpl implements IAftersalesCo
* 导出售后客诉通知单详情列表 * 导出售后客诉通知单详情列表
*/ */
@Override @Override
public List<AftersalesComplaintExportVO> getAfterComplaintExportList(String[] complaintNoticeCodes) { public List<AftersalesComplaintExportVO> getAfterComplaintExportList(List<AftersalesComplaintNotice> list) {
List<AftersalesComplaintNotice> complaintNoticeList = new ArrayList<>(); // 获取所有的客诉单号
if(StringUtils.isNotEmpty(complaintNoticeCodes)){ List<String> collectNoticeCodes = list.stream()
complaintNoticeList = complaintNoticeMapper.selectComplaintNoticeByCodes(complaintNoticeCodes); .map(AftersalesComplaintNotice::getComplaintNoticeCode)
}else { .collect(Collectors.toList());
AftersalesComplaintNotice tempNotice = new AftersalesComplaintNotice();
complaintNoticeList = complaintNoticeMapper.selectAftersalesComplaintNoticeList(tempNotice); // 根据客诉单号查询对应的客诉详情列表
} List<AftersalesComplaintNoticeDetail> noticeDetails = aftersalesComplaintNoticeDetailMapper.selectAftersalesComplaintNoticeDetailListByCodeList(collectNoticeCodes);
List<AftersalesComplaintExportVO> exportVOList = new ArrayList<>();
for (AftersalesComplaintNotice notice: complaintNoticeList) { // 创建一个 AftersalesComplaintNotice 的 Map,键为客诉单号
String noticeCode = notice.getComplaintNoticeCode(); Map<String, AftersalesComplaintNotice> aftersalesComplaintNoticeMap = list.stream()
List<AftersalesComplaintNoticeDetail> noticeDetails = aftersalesComplaintNoticeDetailMapper.selectMaterialListByNoticeCode(noticeCode); .collect(Collectors.toMap(AftersalesComplaintNotice::getComplaintNoticeCode, Function.identity()));
if(StringUtils.isNotEmpty(noticeDetails)){
for (AftersalesComplaintNoticeDetail noticeDetail: noticeDetails) { // 初始化导出列表
AftersalesComplaintExportVO exportVO = new AftersalesComplaintExportVO(); List<AftersalesComplaintExportVO> aftersalesComplaintExportVOS = new ArrayList<>();
exportVO.setComplaintNoticeCode(noticeCode);
exportVO.setSnCode(notice.getSnCode()); for (AftersalesComplaintNoticeDetail detail : noticeDetails) {
exportVO.setSalesOrderCode(notice.getSalesOrderCode()); AftersalesComplaintExportVO exportVo = new AftersalesComplaintExportVO();
exportVO.setClosingProcedures(notice.getClosingProcedures());
exportVO.setCustomerName(notice.getCustomerName()); // 从 AftersalesComplaintNoticeDetail 填充数据
exportVO.setMakeNo(notice.getMakeNo()); exportVo.setComplaintProblem(detail.getComplaintProblem());
exportVO.setRemark(notice.getRemark()); exportVo.setEmergencyDegree(detail.getEmergencyDegree());
exportVO.setMaterialNo(notice.getMaterialNo());
exportVO.setMaterialName(notice.getMaterialName()); // 从 AftersalesComplaintNotice 填充数据,通过客诉单号进行关联
exportVO.setMaterialBrand(notice.getMaterialBrand()); AftersalesComplaintNotice notice = aftersalesComplaintNoticeMap.get(detail.getComplaintNoticeCode());
exportVO.setMaterialModelCode(notice.getMaterialModelCode()); if (notice != null) {
exportVO.setCreateBy(notice.getCreateBy()); exportVo.setSnCode(notice.getSnCode());
exportVO.setCreateTime(notice.getCreateTime()); exportVo.setComplaintNoticeCode(notice.getComplaintNoticeCode());
exportVO.setUpdateBy(notice.getUpdateBy()); exportVo.setSalesOrderCode(notice.getSalesOrderCode());
exportVO.setUpdateTime(notice.getUpdateTime()); exportVo.setCustomerName(notice.getCustomerName());
exportVO.setComplaintProblem(noticeDetail.getComplaintProblem()); exportVo.setMakeNo(notice.getMakeNo());
exportVO.setAdverseReportUrl(noticeDetail.getAdverseReportUrl()); exportVo.setMaterialNo(notice.getMaterialNo());
exportVO.setEmergencyDegree(noticeDetail.getEmergencyDegree()); exportVo.setMaterialName(notice.getMaterialName());
exportVOList.add(exportVO); 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); 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> </foreach>
</select> </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 id="insertAftersalesComplaintNoticeDetail" parameterType="AftersalesComplaintNoticeDetail" useGeneratedKeys="true" keyProperty="complaintNoticeDetailId">
insert into aftersales_complaint_notice_detail insert into aftersales_complaint_notice_detail
<trim prefix="(" suffix=")" suffixOverrides=","> <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 max(complaint_notice_code) from aftersales_complaint_notice_detail where complaint_notice_code like concat(#{code},'%')
</select> </select>
</mapper> </mapper>
Loading…
Cancel
Save