Browse Source

[feat] 售后管理

第一次维护出货设备 添加出货设备页面,新增出库单号字段;提交方法实现:当前销售订单关联的出货设备勾选的数据和其他销售订单关联的出货设备勾选的数据进行结合传递给后端;修改当前销售订单关联的出货设备列表和其他销售订单关联的出货设备列表分别实现:若已被本售后出库单添加了,则也会展示,但多选框会禁用,不可再添加;若已被本售后出库单添加了,则也会展示,但多选框会禁用,不可再添加
售后维护设备出库表新增 selectShippingDeviceVOList字段
售后维护设备出库Controller层
修改 售后第一次维护设备 成品添加出货设备信息 新增参数outOrderCode
新增  修改保存售后第一次维护设备 添加出货设备信息后端接口
修改 售后第一次维护设备,添加出货设备信息,展示其他销售订单的出货设备信息实现:保留是否添加出货设备等于1的,以及等于0且出库单号等于本单据的
修改售后第一次维护设备前端页面的addShippingDevicesOne方法:新增
outOrderCode传递给后端
添加出货设备时新增出货设备列表实体类新增 addShippingDeviceFlag
dev
liuxiaoxu 4 months ago
parent
commit
620efce650
  1. 24
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOutOrderController.java
  2. 18
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesOutOrder.java
  3. 2
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/SelectShippingDeviceVO.java
  4. 6
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOutOrderService.java
  5. 66
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOutOrderServiceImpl.java
  6. 193
      ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/addShippingDevicesOne.html
  7. 2
      ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/maintenanceEquipmentOne.html

24
ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOutOrderController.java

@ -229,12 +229,14 @@ public class AftersalesOutOrderController extends BaseController
@RequestParam("salesOrderCode") String salesOrderCode,
@RequestParam("makeNo") String makeNo,
@RequestParam("relatedOrderCode") String relatedOrderCode,
@RequestParam("outOrderCode") String outOrderCode,
ModelMap mmap)
{
AftersalesOutOrderDetail aftersalesOutOrderDetail = aftersalesOutOrderDetailService.selectAftersalesOutOrderDetailById(outOrderDetailId);
mmap.put("salesOrderCode",salesOrderCode);
mmap.put("makeNo",makeNo);
mmap.put("relatedOrderCode",relatedOrderCode);
mmap.put("outOrderCode",outOrderCode);
mmap.put("aftersalesOutOrderDetail", aftersalesOutOrderDetail);
return prefix + "/addShippingDevicesOne";
}
@ -272,17 +274,17 @@ public class AftersalesOutOrderController extends BaseController
//
// /**
// * 修改保存售后第一次维护设备 添加出货设备信息
// */
// @ResponseBody
// @PostMapping("/addShippingDevicesOne")
// public AjaxResult addShippingDevicesOneSave(@RequestBody WarehouseOutOrderDetail warehouseOutOrderDetail)
// {
//
// return toAjax(outOrderDetailService.addShippingDevicesOne(warehouseOutOrderDetail));
// }
/**
* 修改保存售后第一次维护设备 添加出货设备信息
*/
@ResponseBody
@PostMapping("/addShippingDevicesOne")
public AjaxResult addShippingDevicesOneSave(@RequestBody AftersalesOutOrder aftersalesOutOrder)
{
return toAjax(aftersalesOutOrderService.addShippingDevicesOne(aftersalesOutOrder));
}
//
//
//

18
ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesOutOrder.java

@ -1,7 +1,10 @@
package com.ruoyi.aftersales.domain;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.aftersales.domain.vo.SelectShippingDeviceVO;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@ -132,6 +135,12 @@ public class AftersalesOutOrder extends BaseEntity
@Excel(name = "收货电话")
private String deliveryNumber;
/** 添加出货设备列表*/
private List<SelectShippingDeviceVO> selectShippingDeviceVOList;
public void setOutOrderId(Long outOrderId)
{
this.outOrderId = outOrderId;
@ -421,6 +430,14 @@ public class AftersalesOutOrder extends BaseEntity
return deliveryNumber;
}
public List<SelectShippingDeviceVO> getSelectShippingDeviceVOList() {
return selectShippingDeviceVOList;
}
public void setSelectShippingDeviceVOList(List<SelectShippingDeviceVO> selectShippingDeviceVOList) {
this.selectShippingDeviceVOList = selectShippingDeviceVOList;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@ -461,6 +478,7 @@ public class AftersalesOutOrder extends BaseEntity
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("selectShippingDeviceVOList",getSelectShippingDeviceVOList())
.toString();
}
}

2
ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/SelectShippingDeviceVO.java

@ -43,5 +43,7 @@ public class SelectShippingDeviceVO {
/** 二次维修后部件质保时间 */
private Date componentGuaranteeDate;
/** 是否添加出货设备(0代表是 1代表否)*/
private String addShippingDeviceFlag;
}

6
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOutOrderService.java

@ -106,4 +106,10 @@ public interface IAftersalesOutOrderService
* 售后第一次维护设备添加出货设备信息展示其他销售订单的出货设备信息
* */
List<SelectShippingDeviceVO> getOtherSalesOrderShippingDevices(AftersalesOutOrder aftersalesOutOrder);
/**
* 售后第一次维护设备添加出货设备信息
* */
int addShippingDevicesOne(AftersalesOutOrder aftersalesOutOrder);
}

66
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOutOrderServiceImpl.java

@ -11,6 +11,7 @@ import com.ruoyi.aftersales.domain.AftersalesOutOrderDetail;
import com.ruoyi.aftersales.domain.vo.SelectShippingDeviceVO;
import com.ruoyi.aftersales.mapper.AfterSalesShippingDeviceMapper;
import com.ruoyi.aftersales.mapper.AftersalesOutOrderDetailMapper;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
@ -149,7 +150,44 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService
*/
@Override
public int updateMaintenanceEquipmentOne(AftersalesOutOrder aftersalesOutOrder) {
return 0;
String outOrderCode = aftersalesOutOrder.getOutOrderCode();
int updateResult = 0;
List<SelectShippingDeviceVO> selectShippingDeviceVOList = aftersalesOutOrder.getSelectShippingDeviceVOList();
for (SelectShippingDeviceVO selectShippingDeviceVO : selectShippingDeviceVOList) {
AfterSalesShippingDevice afterSalesShippingDevice = new AfterSalesShippingDevice();
afterSalesShippingDevice.setShippingDeviceId(selectShippingDeviceVO.getShippingDeviceId());
afterSalesShippingDevice.setAddShippingDeviceFlag("0");
afterSalesShippingDevice.setOutOrderCode(outOrderCode);
updateResult = afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(afterSalesShippingDevice);
if (updateResult <= 0){
throw new BusinessException("更新出货设备信息失败");
}
}
return updateResult;
}
/**
* 售后第一次维护设备添加出货设备信息
* */
@Override
public int addShippingDevicesOne(AftersalesOutOrder aftersalesOutOrder) {
String outOrderCode = aftersalesOutOrder.getOutOrderCode();
int updateResult = 0;
List<SelectShippingDeviceVO> selectShippingDeviceVOList = aftersalesOutOrder.getSelectShippingDeviceVOList();
for (SelectShippingDeviceVO selectShippingDeviceVO : selectShippingDeviceVOList) {
AfterSalesShippingDevice afterSalesShippingDevice = new AfterSalesShippingDevice();
afterSalesShippingDevice.setShippingDeviceId(selectShippingDeviceVO.getShippingDeviceId());
afterSalesShippingDevice.setAddShippingDeviceFlag("0");
afterSalesShippingDevice.setOutOrderCode(outOrderCode);
updateResult = afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(afterSalesShippingDevice);
if (updateResult <= 0){
throw new BusinessException("更新出货设备信息失败");
}
}
return updateResult;
}
/**
@ -214,18 +252,25 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService
public List<SelectShippingDeviceVO> getOtherSalesOrderShippingDevices(AftersalesOutOrder aftersalesOutOrder) {
List<SelectShippingDeviceVO> selectShippingDeviceVOS = new ArrayList<>();
String outOrderCode = aftersalesOutOrder.getOutOrderCode();
List<SelectShippingDeviceVO> thisSalesOrderShippingDevices = this.getThisSalesOrderShippingDevices(aftersalesOutOrder);
//查找到当前销售订单的出货设备id集合
List<String> collectShippingDeviceId = thisSalesOrderShippingDevices.stream().map(SelectShippingDeviceVO::getShippingDeviceId).collect(Collectors.toList());
// 查找到当前销售订单的出货设备ID集合
List<String> currentShippingDeviceIds = thisSalesOrderShippingDevices.stream()
.map(SelectShippingDeviceVO::getShippingDeviceId)
.collect(Collectors.toList());
//查找到所有出货设备id集合
List<AfterSalesShippingDevice> afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectAllShippingDevices();
List<String> allShippingDeviceIds = afterSalesShippingDevices.stream().map(AfterSalesShippingDevice::getShippingDeviceId).collect(Collectors.toList());
//筛选出所有出货设备id集合中,不在当前销售订单的出货设备id集合中的数据
List<String> otherShippingDeviceIds = allShippingDeviceIds.stream().filter(item -> !collectShippingDeviceId.contains(item)).collect(Collectors.toList());
List<AfterSalesShippingDevice> list = afterSalesShippingDeviceMapper.selectBatchShippingDeviceById(otherShippingDeviceIds);
//保留是否添加出货设备等于1的,以及等于0且出库单号等于本单据的
List<AfterSalesShippingDevice> filteredDevices = afterSalesShippingDevices.stream().filter(device -> "1".equals(device.getAddShippingDeviceFlag())
|| "0".equals(device.getAddShippingDeviceFlag()) && outOrderCode.equals(device.getOutOrderCode())).collect(Collectors.toList());
// 筛选出不在当前销售订单中的数据
List<AfterSalesShippingDevice> otherDevices = filteredDevices.stream()
.filter(device -> !currentShippingDeviceIds.contains(device.getShippingDeviceId()))
.collect(Collectors.toList());
//转换成vo类
this.convertToDeviceVOs(list, selectShippingDeviceVOS);
this.convertToDeviceVOs(otherDevices, selectShippingDeviceVOS);
return selectShippingDeviceVOS;
}
@ -238,7 +283,10 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService
selectShippingDeviceVO.setDeviceModelCode(device.getDeviceModelCode());
selectShippingDeviceVO.setDeviceRunningNumber(device.getDeviceRunningNumber());
selectShippingDeviceVO.setMakePhotoUrl(device.getMakePhotourl());
selectShippingDeviceVO.setAddShippingDeviceFlag(device.getAddShippingDeviceFlag());
selectShippingDeviceVOS.add(selectShippingDeviceVO);
}
}
}

193
ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/addShippingDevicesOne.html

@ -109,6 +109,7 @@
var salesOrderCode = [[${salesOrderCode}]];
var makeNo = [[${makeNo}]];
var relatedOrderCode = [[${relatedOrderCode}]];
var outOrderCode = [[${outOrderCode}]];
$("#form-addShippingDevicesOne-edit").validate({
focusCleanup: true
@ -126,23 +127,34 @@
// 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据
// var table = $('#table-shippingDevices').bootstrapTable('getData');
//获取选中复选框行的数据
const selectedRows = $("#table-shippingDevices").bootstrapTable('getSelections');
const selectedThisRows = $("#thisSalesOrderShippingDevice-table").bootstrapTable('getSelections');
const selectedOtherRows = $("#otherSalesOrderShippingDevice-table").bootstrapTable('getSelections');
// 将 outOrderCode 添加到 shippingDevicesData 对象中
shippingDevicesData.outOrderCode = outOrderCode;
// 检查表格数据是否为空
if (selectedRows.length===0){
$.modal.alertWarning("请至少选择一条出货设备信息后再保存!");
if (selectedThisRows.length + selectedOtherRows.length === 0) {
$.modal.alertWarning("请至少选择一条出货设备后再保存!");
return;
}
// 将表数据转换成与complaintNoticeData格式一致的数组
var equipDetailDataList = selectedRows.map(function(item) {
// 根据实际字段名调整
return {
// 将表数据转换成一致的数组
const equipDetailDataList = [
...selectedThisRows.map(item => ({
"shippingDeviceId": item.shippingDeviceId,
"deviceModelCode": item.deviceModelCode,
"deviceRunningNumber": item.deviceRunningNumber,
"makePhotoUrl": item.makePhotoUrl
// ...其他字段
})),
...selectedOtherRows.map(item => ({
"shippingDeviceId": item.shippingDeviceId,
"deviceModelCode": item.deviceModelCode,
"deviceRunningNumber": item.deviceRunningNumber,
"makePhotoUrl": item.makePhotoUrl
// ...其他字段
};
});
}))
];
// 合并表单数据和表格数据
const combinedData = Object.assign({}, shippingDevicesData, { selectShippingDeviceVOList: equipDetailDataList });
@ -166,69 +178,6 @@
minView: "month",
autoclose: true
});
//
// /*物料信息列表*/
// $(function() {
// // 物料信息
// $('#table-material').bootstrapTable('destroy');
// var materialOptions = {
// id:"table-material",
// url: prefix + "/addShippingDevicesMaterial",
// modalName: "物料信息",
// showColumns: false,
// pagination: false,
// showToggle: false,
// showRefresh:false,
// showSearch:false,
// queryParams:queryParams,
// columns: [{
// checkbox: true
// },
// { title:'销售订单号',
// field:'quoteId',
// visible: false
// },
// {
// title: '料号',
// field: 'materialCode',
// },
// {
// title: '图片',
// field: 'photoUrl',
// },
// {
// title: '物料名称',
// field: 'materialName',
// },
// {
// title: '物料类型',
// field: 'materialType',
// },
// {
// title: '单位',
// field: 'materialUnit',
// },
// {
// title: '品牌',
// field: 'brand',
// },
// {
// title: '描述',
// field: 'describe',
// },
// ]
// };
// $.table.init(materialOptions);
//
// })
// function queryParams(params) {
// var curParams = {
// // 传递参数查询参数
// quoteId: selectMaterialsVO.quoteId,
// materialCode: selectMaterialsVO.materialCode,
// };
// return curParams;
// }
//销售订单的出货设备
$(function(){
@ -243,8 +192,15 @@
showColumns: false,
queryParams:thisQueryParams,
sidePagination: "client",
columns: [{
checkbox: true
columns: [ {
checkbox : true,
formatter: function(value, row, index) {
if(row.addShippingDeviceFlag === "0"){//如果已经操作禁止选择
return { disabled : true,}
}else{
return { disabled : false,}
}
}
},
{
field: 'equipmentIndex',
@ -275,6 +231,12 @@
align: 'center',
title: '生产图片',
},
{
field: 'addShippingDeviceFlag',
align: 'center',
title: '是否添加出货设备',
visible: false
},
]
};
@ -288,7 +250,8 @@
materialNo: aftersalesOutOrderDetail.materialNo,
salesOrderCode:salesOrderCode,
makeNo:makeNo,
relatedOrderCode:relatedOrderCode
relatedOrderCode:relatedOrderCode,
outOrderCode:outOrderCode
};
return curParams;
}
@ -299,9 +262,7 @@
//其他销售订单的出货设备
$(function(){
$(function () {
var options = {
id: "otherSalesOrderShippingDevice-table",
url: prefix + "/getOtherSalesOrderShippingDevices",
@ -310,46 +271,53 @@
showRefresh: false,
showToggle: false,
showColumns: false,
queryParams:otherQueryParams,
queryParams: otherQueryParams,
sidePagination: "client",
columns: [{
checkbox: true
},
columns: [
{
field: 'equipmentIndex',
align: 'center',
title: "序号",
formatter: function (value, row, index) {
// 使用bootstrap-table的内置序号生成
return index + 1;
checkbox : true,
formatter: function(value, row, index) {
if(row.addShippingDeviceFlag === "0"){//如果已经操作禁止选择
return { disabled : true,}
}else{
return { disabled : false,}
}
}
},
{
field: 'shippingDeviceId',
align: 'center',
title: '出货设备id',
},
{
field: 'deviceModelCode',
align: 'center',
title: '设备型号',
},
{
field: 'deviceRunningNumber',
align: 'center',
title: '追踪码',
},
{
field: 'makePhotoUrl',
align: 'center',
title: '生产图片',
},
]
field: 'equipmentIndex',
align: 'center',
title: "序号",
formatter: function (value, row, index) {
// 使用bootstrap-table的内置序号生成
return index + 1;
}
}, {
field: 'shippingDeviceId',
align: 'center',
title: '出货设备id',
}, {
field: 'deviceModelCode',
align: 'center',
title: '设备型号',
}, {
field: 'deviceRunningNumber',
align: 'center',
title: '追踪码',
}, {
field: 'makePhotoUrl',
align: 'center',
title: '生产图片',
}, {
field: 'addShippingDeviceFlag',
align: 'center',
title: '是否添加出货设备',
visible: false
}]
};
$.table.init(options);
})
$.table.init(options);
});
function otherQueryParams(params) {
var curParams = {
@ -357,7 +325,8 @@
materialNo: aftersalesOutOrderDetail.materialNo,
salesOrderCode:salesOrderCode,
makeNo:makeNo,
relatedOrderCode:relatedOrderCode
relatedOrderCode:relatedOrderCode,
outOrderCode:outOrderCode
};
return curParams;
}

2
ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/maintenanceEquipmentOne.html

@ -450,12 +450,14 @@
function addShippingDevicesOne(outOrderDetailId) {
var salesOrderCode = [[${aftersalesOutOrder.salesOrderCode}]];
var relatedOrderCode = [[${aftersalesOutOrder.relatedOrderCode}]];
var outOrderCode = [[${aftersalesOutOrder.outOrderCode}]];
var makeNo = [[${aftersalesOutOrder.makeNo}]];
var queryParams = new URLSearchParams();
queryParams.append('outOrderDetailId', outOrderDetailId);
queryParams.append('salesOrderCode', encodeURIComponent(salesOrderCode));
queryParams.append('makeNo',encodeURIComponent(makeNo));
queryParams.append('relatedOrderCode',encodeURIComponent(relatedOrderCode));
queryParams.append('outOrderCode',encodeURIComponent(outOrderCode));
var url = prefix + '/addShippingDevicesOne?' + queryParams.toString();
$.modal.open("添加出货设备", url);
}

Loading…
Cancel
Save