Browse Source

[feat]售后管理:

售后维护设备出库
新增添加设备页面
新增详情页面
新增详情物料VO类
新增添加出货设备VO类
出货设备表格新增关联销售订单编号
新增根据销售订单号查询物料信息
新增根据销售订单号查询出货设备信息
dev
liuxiaoxu 5 months ago
parent
commit
c7eecd20cb
  1. 108
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/WarehouseOutOrderController.java
  2. 16
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AfterSalesShippingDevice.java
  3. 35
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/SelectMaterialsVO.java
  4. 22
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/SelectShippingDeviceVO.java
  5. 9
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AfterSalesShippingDeviceMapper.java
  6. 24
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IWarehouseOutOrderService.java
  7. 108
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/WarehouseOutOrderServiceImpl.java
  8. 11
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysCustomerController.java
  9. 8
      ruoyi-admin/src/main/resources/mapper/aftersales/AfterSalesShippingDeviceMapper.xml
  10. 106
      ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/add.html
  11. 186
      ruoyi-admin/src/main/resources/templates/aftersales/warehouseOutOrder/addShippingDevices.html
  12. 198
      ruoyi-admin/src/main/resources/templates/aftersales/warehouseOutOrder/detail.html
  13. 33
      ruoyi-admin/src/main/resources/templates/aftersales/warehouseOutOrder/warehouseOutOrder.html

108
ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/WarehouseOutOrderController.java

@ -1,6 +1,11 @@
package com.ruoyi.aftersales.controller; package com.ruoyi.aftersales.controller;
import java.util.List; import java.util.List;
import com.ruoyi.aftersales.domain.AftersalesOrder;
import com.ruoyi.aftersales.domain.vo.SelectDeviceVO;
import com.ruoyi.aftersales.domain.vo.SelectMaterialsVO;
import com.ruoyi.aftersales.domain.vo.SelectShippingDeviceVO;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -113,38 +118,105 @@ public class WarehouseOutOrderController extends BaseController
} }
/** /**
* 删除出库单 * 查看出库单详情
*/ */
@RequiresPermissions("aftersales:warehouseOutOrder:remove") @GetMapping("/detail/{outOrderId}")
@Log(title = "出库单", businessType = BusinessType.DELETE) public String detail(@PathVariable("outOrderId") Long outOrderId, ModelMap mmap)
@PostMapping( "/remove") {
WarehouseOutOrder warehouseOutOrder = warehouseOutOrderService.selectWarehouseOutOrderById(outOrderId);
mmap.put("warehouseOutOrder", warehouseOutOrder);
return prefix + "/detail";
}
/**
* 修改保存出库单详情
*/
@RequiresPermissions("aftersales:warehouseOutOrder:edit")
@Log(title = "出库单", businessType = BusinessType.UPDATE)
@PostMapping("/detail")
@ResponseBody @ResponseBody
public AjaxResult remove(String ids) public AjaxResult detailSave(WarehouseOutOrder warehouseOutOrder)
{ {
return toAjax(warehouseOutOrderService.deleteWarehouseOutOrderByIds(ids)); return toAjax(warehouseOutOrderService.updateWarehouseOutOrder(warehouseOutOrder));
} }
/** /**
* 作废出库单 * 物料新增出货设备
*/ */
@RequiresPermissions("aftersales:warehouseOutOrder:cancel") @GetMapping("/addShippingDevices/{quoteId}/{materialCode}")
@Log(title = "出库单", businessType = BusinessType.CANCEL) public String addShippingDevices(@PathVariable("quoteId") String quoteId,
@GetMapping( "/cancel/{id}") @PathVariable("materialCode") String materialCode,
ModelMap mmap) {
SelectMaterialsVO selectMaterialsVO = warehouseOutOrderService.selectShippingDevicesById(quoteId, materialCode);
// 假设您还需要根据materialCode获取额外信息,可以在这里添加逻辑
mmap.put("selectMaterialsVO", selectMaterialsVO);
return prefix + "/addShippingDevices";
}
/**
* 修改保存出货设备
*/
@RequiresPermissions("aftersales:warehouseOutOrder:addShippingDevices")
@Log(title = "出库单", businessType = BusinessType.INSERT)
@PostMapping("/addShippingDevices")
@ResponseBody @ResponseBody
public AjaxResult cancel(@PathVariable("id") Long id){ public AjaxResult addShippingDevicesSave(WarehouseOutOrder warehouseOutOrder)
return toAjax(warehouseOutOrderService.cancelWarehouseOutOrderById(id)); {
return toAjax(warehouseOutOrderService.updateWarehouseOutOrder(warehouseOutOrder));
} }
/** /**
* 恢复出库单 * 查询物料信息列表
*/ */
@RequiresPermissions("aftersales:warehouseOutOrder:restore") @RequiresPermissions("aftersales:warehouseOutOrder:optionMaterials")
@Log(title = "出库单", businessType = BusinessType.RESTORE) @PostMapping("/optionMaterials")
@GetMapping( "/restore/{id}")
@ResponseBody @ResponseBody
public AjaxResult restore(@PathVariable("id")Long id) public TableDataInfo optionMaterials(WarehouseOutOrder warehouseOutOrder)
{ {
return toAjax(warehouseOutOrderService.restoreWarehouseOutOrderById(id));
startPage();
List<SelectMaterialsVO> list = warehouseOutOrderService.selectMaterialBySalesOrderCode(warehouseOutOrder);
return getDataTable(list);
}
/**
* 添加出货设备查询物料信息
*/
@RequiresPermissions("aftersales:warehouseOutOrder:addShippingDevicesMaterial")
@PostMapping("/addShippingDevicesMaterial")
@ResponseBody
public TableDataInfo optionMaterial(SelectMaterialsVO selectMaterialsVO)
{
startPage();
List<SelectMaterialsVO> list = warehouseOutOrderService.selectMaterialByMaterialCode(selectMaterialsVO);
return getDataTable(list);
}
/**
* 添加出货设备查询出货设备信息
*/
@RequiresPermissions("aftersales:warehouseOutOrder:addShippingDevicesOptions")
@PostMapping("/addShippingDevicesOptions")
@ResponseBody
public TableDataInfo addShippingDevicesOptions(SelectMaterialsVO selectMaterialsVO)
{
startPage();
List<SelectShippingDeviceVO> list = warehouseOutOrderService.selectShippingDeviceBySalesOrderCode(selectMaterialsVO);
return getDataTable(list);
}
/**
* 删除出库单
*/
@RequiresPermissions("aftersales:warehouseOutOrder:remove")
@Log(title = "出库单", businessType = BusinessType.DELETE)
@PostMapping( "/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(warehouseOutOrderService.deleteWarehouseOutOrderByIds(ids));
} }

16
ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AfterSalesShippingDevice.java

@ -29,6 +29,10 @@ public class AfterSalesShippingDevice extends BaseEntity
@Excel(name = "关联单号") @Excel(name = "关联单号")
private String makeNo; private String makeNo;
/** 关联销售单号 */
@Excel(name = "关联销售单号")
private String salesOrderCode;
/** 料号 */ /** 料号 */
@Excel(name = "料号") @Excel(name = "料号")
private String materialNo; private String materialNo;
@ -182,7 +186,16 @@ public class AfterSalesShippingDevice extends BaseEntity
{ {
return makeNo; return makeNo;
} }
public void setMaterialNo(String materialNo)
public String getSalesOrderCode() {
return salesOrderCode;
}
public void setSalesOrderCode(String salesOrderCode) {
this.salesOrderCode = salesOrderCode;
}
public void setMaterialNo(String materialNo)
{ {
this.materialNo = materialNo; this.materialNo = materialNo;
} }
@ -457,6 +470,7 @@ public class AfterSalesShippingDevice extends BaseEntity
.append("shippingDeviceCode", getShippingDeviceCode()) .append("shippingDeviceCode", getShippingDeviceCode())
.append("shippingDeviceId", getShippingDeviceId()) .append("shippingDeviceId", getShippingDeviceId())
.append("makeNo", getMakeNo()) .append("makeNo", getMakeNo())
.append("salesOrderCode()", getSalesOrderCode())
.append("materialNo", getMaterialNo()) .append("materialNo", getMaterialNo())
.append("materialPhotourl", getMaterialPhotourl()) .append("materialPhotourl", getMaterialPhotourl())
.append("materialName", getMaterialName()) .append("materialName", getMaterialName())

35
ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/SelectMaterialsVO.java

@ -0,0 +1,35 @@
package com.ruoyi.aftersales.domain.vo;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
@Data
public class SelectMaterialsVO {
/*销售订单号*/
private String quoteId;
/*料号*/
private String materialCode;
/** 物料的名称 */
private String materialName;
/** 物料的类型 */
private String materialType;
/** 物料的加工方式 */
private String processMethod;
/** 物料的品牌 */
private String brand;
/** 物料单位*/
private String unit;
/** 物料的图片 */
private String photoUrl;
/** 物料的描述 */
private String describe;
}

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

@ -0,0 +1,22 @@
package com.ruoyi.aftersales.domain.vo;
import lombok.Data;
/**
* 添加出货设备时新增出货设备列表
*/
@Data
public class SelectShippingDeviceVO {
private String quoteId;
private String shippingDeviceId;
private String deviceModelCode;
private String deviceRunningNumber;
private String makePhotoUrl;
}

9
ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AfterSalesShippingDeviceMapper.java

@ -36,6 +36,15 @@ public interface AfterSalesShippingDeviceMapper
*/ */
public List<AfterSalesShippingDevice> selectAfterSalesShippingDeviceList(AfterSalesShippingDevice afterSalesShippingDevice); public List<AfterSalesShippingDevice> selectAfterSalesShippingDeviceList(AfterSalesShippingDevice afterSalesShippingDevice);
/**
* 查询出货设备列表
*
* @param salesOrderCode 销售订单号
* @return 出货设备集合
*/
public List<AfterSalesShippingDevice> selectShippingDeviceBySalesOrderCode(String salesOrderCode);
/** /**
* 新增出货设备 * 新增出货设备
* *

24
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IWarehouseOutOrderService.java

@ -2,6 +2,9 @@ package com.ruoyi.aftersales.service;
import java.util.List; import java.util.List;
import com.ruoyi.aftersales.domain.WarehouseOutOrder; import com.ruoyi.aftersales.domain.WarehouseOutOrder;
import com.ruoyi.aftersales.domain.vo.SelectDeviceVO;
import com.ruoyi.aftersales.domain.vo.SelectMaterialsVO;
import com.ruoyi.aftersales.domain.vo.SelectShippingDeviceVO;
/** /**
* 出库单Service接口 * 出库单Service接口
@ -27,6 +30,23 @@ public interface IWarehouseOutOrderService
*/ */
public List<WarehouseOutOrder> selectWarehouseOutOrderList(WarehouseOutOrder warehouseOutOrder); public List<WarehouseOutOrder> selectWarehouseOutOrderList(WarehouseOutOrder warehouseOutOrder);
/**
* 查询关联销售单的物料列表
*
* @param salesOrderCode 销售单号
* @return 出库单集合
*/
public List<SelectMaterialsVO> selectMaterialBySalesOrderCode(WarehouseOutOrder warehouseOutOrder);
/**
* 查询添加出货设备的物料列表
*
* @param salesOrderCode 销售单号
* @return 出库单集合
*/
public List<SelectMaterialsVO> selectMaterialByMaterialCode(SelectMaterialsVO selectMaterialsVO);
/** /**
* 新增出库单 * 新增出库单
* *
@ -72,4 +92,8 @@ public interface IWarehouseOutOrderService
* @return * @return
*/ */
int restoreWarehouseOutOrderById(Long outOrderId); int restoreWarehouseOutOrderById(Long outOrderId);
SelectMaterialsVO selectShippingDevicesById(String quoteId, String materialCode);
List<SelectShippingDeviceVO> selectShippingDeviceBySalesOrderCode(SelectMaterialsVO selectMaterialsVO);
} }

108
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/WarehouseOutOrderServiceImpl.java

@ -1,9 +1,21 @@
package com.ruoyi.aftersales.service.impl; package com.ruoyi.aftersales.service.impl;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.ruoyi.aftersales.domain.AfterSalesShippingDevice;
import com.ruoyi.aftersales.domain.vo.SelectMaterialsVO;
import com.ruoyi.aftersales.domain.vo.SelectShippingDeviceVO;
import com.ruoyi.aftersales.mapper.AfterSalesShippingDeviceMapper;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysSalesOrderChild;
import com.ruoyi.system.mapper.SysSalesOrderChildMapper;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.implementation.bytecode.Throw;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.aftersales.mapper.WarehouseOutOrderMapper; import com.ruoyi.aftersales.mapper.WarehouseOutOrderMapper;
import com.ruoyi.aftersales.domain.WarehouseOutOrder; import com.ruoyi.aftersales.domain.WarehouseOutOrder;
@ -17,11 +29,18 @@ import com.ruoyi.common.core.text.Convert;
* @date 2024-04-23 * @date 2024-04-23
*/ */
@Service @Service
@Slf4j
public class WarehouseOutOrderServiceImpl implements IWarehouseOutOrderService public class WarehouseOutOrderServiceImpl implements IWarehouseOutOrderService
{ {
@Autowired @Autowired
private WarehouseOutOrderMapper warehouseOutOrderMapper; private WarehouseOutOrderMapper warehouseOutOrderMapper;
@Autowired
private SysSalesOrderChildMapper sysSalesOrderChildMapper;
@Autowired
private AfterSalesShippingDeviceMapper shippingDeviceMapper;
/** /**
* 查询出库单 * 查询出库单
* *
@ -46,6 +65,93 @@ public class WarehouseOutOrderServiceImpl implements IWarehouseOutOrderService
return warehouseOutOrderMapper.selectWarehouseOutOrderList(warehouseOutOrder); return warehouseOutOrderMapper.selectWarehouseOutOrderList(warehouseOutOrder);
} }
@Override
public List<SelectMaterialsVO> selectMaterialBySalesOrderCode(WarehouseOutOrder warehouseOutOrder) {
List<SelectMaterialsVO> selectMaterialsVOs = new ArrayList<>();
List<SysSalesOrderChild> sysSalesOrderChildren = sysSalesOrderChildMapper.selectSysSalesOrderChildByQuoteId(warehouseOutOrder.getSalesOrderCode());
if (!StringUtils.isNotEmpty(sysSalesOrderChildren)){
// 记录日志
log.warn("未查找到与销售订单关联的物料数据, 销售订单编码: {}", warehouseOutOrder.getSalesOrderCode());
throw new RuntimeException("未查找到物料相关数据");
}
for (SysSalesOrderChild sysSalesOrderChild : sysSalesOrderChildren) {
SelectMaterialsVO selectMaterialsVO = new SelectMaterialsVO();
selectMaterialsVO.setQuoteId(sysSalesOrderChild.getQuoteId());
selectMaterialsVO.setMaterialCode(sysSalesOrderChild.getMaterialCode());
selectMaterialsVO.setMaterialName(sysSalesOrderChild.getMaterialName());
selectMaterialsVO.setMaterialType(sysSalesOrderChild.getMaterialType());
selectMaterialsVO.setBrand(sysSalesOrderChild.getBrand());
selectMaterialsVO.setDescribe(sysSalesOrderChild.getDescribe());
selectMaterialsVO.setUnit(sysSalesOrderChild.getUnit());
selectMaterialsVO.setPhotoUrl(sysSalesOrderChild.getPhotoUrl());
selectMaterialsVO.setProcessMethod(sysSalesOrderChild.getProcessMethod());
selectMaterialsVOs.add(selectMaterialsVO);
}
return selectMaterialsVOs;
}
@Override
public SelectMaterialsVO selectShippingDevicesById(String quoteId, String materialCode) {
SelectMaterialsVO selectMaterialsVO = new SelectMaterialsVO();
SysSalesOrderChild sysSalesOrderChild = sysSalesOrderChildMapper.selectOneByQuoteIdAndMaterialCode(quoteId, materialCode);
if (StringUtils.isNotNull(sysSalesOrderChild)){
selectMaterialsVO.setQuoteId(quoteId);
selectMaterialsVO.setMaterialCode(materialCode);
selectMaterialsVO.setMaterialType(sysSalesOrderChild.getMaterialType());
selectMaterialsVO.setBrand(sysSalesOrderChild.getBrand());
selectMaterialsVO.setDescribe(sysSalesOrderChild.getDescribe());
selectMaterialsVO.setUnit(sysSalesOrderChild.getUnit());
selectMaterialsVO.setPhotoUrl(sysSalesOrderChild.getPhotoUrl());
selectMaterialsVO.setProcessMethod(sysSalesOrderChild.getProcessMethod());
}
return selectMaterialsVO;
}
/*根据销售单号查询出货设备信息*/
@Override
public List<SelectShippingDeviceVO> selectShippingDeviceBySalesOrderCode(SelectMaterialsVO selectMaterialsVO) {
List<SelectShippingDeviceVO> selectShippingDeviceVOs = new ArrayList<>();
List<AfterSalesShippingDevice> afterSalesShippingDevices = shippingDeviceMapper.selectShippingDeviceBySalesOrderCode(selectMaterialsVO.getQuoteId());
if (!StringUtils.isNotEmpty(afterSalesShippingDevices)) {
// 记录日志
log.warn("未查找到与销售订单关联的出库设备数据, 销售订单编码: {}", selectMaterialsVO.getQuoteId());
throw new RuntimeException("未查找到物料相关数据");
}
for (AfterSalesShippingDevice afterSalesShippingDevice : afterSalesShippingDevices) {
SelectShippingDeviceVO shippingDeviceVO = new SelectShippingDeviceVO();
shippingDeviceVO.setShippingDeviceId(afterSalesShippingDevice.getShippingDeviceId());
shippingDeviceVO.setDeviceModelCode(afterSalesShippingDevice.getDeviceModelCode());
shippingDeviceVO.setDeviceRunningNumber(afterSalesShippingDevice.getDeviceRunningNumber());
shippingDeviceVO.setMakePhotoUrl(afterSalesShippingDevice.getMakePhotourl());
shippingDeviceVO.setQuoteId(afterSalesShippingDevice.getSalesOrderCode());
selectShippingDeviceVOs.add(shippingDeviceVO);
}
return selectShippingDeviceVOs;
}
@Override
public List<SelectMaterialsVO> selectMaterialByMaterialCode(SelectMaterialsVO selectMaterialsVO) {
List<SelectMaterialsVO> selectMaterialsVOs = new ArrayList<>();
SysSalesOrderChild sysSalesOrderChild = sysSalesOrderChildMapper.selectOneByQuoteIdAndMaterialCode(selectMaterialsVO.getQuoteId(), selectMaterialsVO.getMaterialCode());
if (StringUtils.isNotNull(sysSalesOrderChild)){
// selectMaterialsVO.setQuoteId(selectMaterialsVO.getQuoteId());
// selectMaterialsVO.setMaterialCode(selectMaterialsVO.getMaterialCode());
selectMaterialsVO.setMaterialName(sysSalesOrderChild.getMaterialName());
selectMaterialsVO.setMaterialType(sysSalesOrderChild.getMaterialType());
selectMaterialsVO.setBrand(sysSalesOrderChild.getBrand());
selectMaterialsVO.setDescribe(sysSalesOrderChild.getDescribe());
selectMaterialsVO.setUnit(sysSalesOrderChild.getUnit());
selectMaterialsVO.setPhotoUrl(sysSalesOrderChild.getPhotoUrl());
selectMaterialsVO.setProcessMethod(sysSalesOrderChild.getProcessMethod());
selectMaterialsVOs.add(selectMaterialsVO);
}
return selectMaterialsVOs;
}
/** /**
* 新增出库单 * 新增出库单
* *
@ -123,4 +229,6 @@ public class WarehouseOutOrderServiceImpl implements IWarehouseOutOrderService
{ {
return warehouseOutOrderMapper.restoreWarehouseOutOrderById(outOrderId); return warehouseOutOrderMapper.restoreWarehouseOutOrderById(outOrderId);
} }
} }

11
ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysCustomerController.java

@ -285,6 +285,17 @@ public class SysCustomerController extends BaseController
List<SysCustomer> list = sysCustomerService.selectSysCustomerToList(); List<SysCustomer> list = sysCustomerService.selectSysCustomerToList();
return getDataTable(list); return getDataTable(list);
} }
/**
* 客诉报告查询客户信息
* */
@ResponseBody
@GetMapping("/getCustomers")
public List<SysCustomer> getCustomers() {
List<SysCustomer> list = sysCustomerService.selectSysCustomerToList();
return list;
}
@RequiresPermissions("system:customer:audit") @RequiresPermissions("system:customer:audit")
@PostMapping("/operList") @PostMapping("/operList")
@ResponseBody @ResponseBody

8
ruoyi-admin/src/main/resources/mapper/aftersales/AfterSalesShippingDeviceMapper.xml

@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="shippingDeviceCode" column="shipping_device_code" /> <result property="shippingDeviceCode" column="shipping_device_code" />
<result property="shippingDeviceId" column="shipping_device_id" /> <result property="shippingDeviceId" column="shipping_device_id" />
<result property="makeNo" column="make_no" /> <result property="makeNo" column="make_no" />
<result property="salesOrderCode" column="sales_order_code" />
<result property="materialNo" column="material_no" /> <result property="materialNo" column="material_no" />
<result property="materialPhotourl" column="material_photoUrl" /> <result property="materialPhotourl" column="material_photoUrl" />
<result property="materialName" column="material_name" /> <result property="materialName" column="material_name" />
@ -45,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectAfterSalesShippingDeviceVo"> <sql id="selectAfterSalesShippingDeviceVo">
select shipping_device_code, shipping_device_id, make_no, material_no, material_photoUrl, material_name, material_type, material_class, material_model_code, material_unit, material_brand, material_describe, device_model_code, device_running_number, make_photoUrl, sn_code, aftersales_photoUrl, factory_date, guarantee_period, guarantee_period_flag, lock_date, lock_date_flag, wastage_expire_date, wastage_expire_flag, component_guarantee_date, component_guarantee_flag, engineer_name, salesman_name, make_name,customer_id, customer_name, maintain_order_code, maintain_time, create_by, create_time, update_by, update_time from aftersales_shipping_device select shipping_device_code, shipping_device_id, make_no,sales_order_code, material_no, material_photoUrl, material_name, material_type, material_class, material_model_code, material_unit, material_brand, material_describe, device_model_code, device_running_number, make_photoUrl, sn_code, aftersales_photoUrl, factory_date, guarantee_period, guarantee_period_flag, lock_date, lock_date_flag, wastage_expire_date, wastage_expire_flag, component_guarantee_date, component_guarantee_flag, engineer_name, salesman_name, make_name,customer_id, customer_name, maintain_order_code, maintain_time, create_by, create_time, update_by, update_time from aftersales_shipping_device
</sql> </sql>
<select id="selectAfterSalesShippingDeviceList" parameterType="AfterSalesShippingDevice" resultMap="AfterSalesShippingDeviceResult"> <select id="selectAfterSalesShippingDeviceList" parameterType="AfterSalesShippingDevice" resultMap="AfterSalesShippingDeviceResult">
@ -81,6 +82,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where make_no = #{makeNo} where make_no = #{makeNo}
</select> </select>
<select id="selectShippingDeviceBySalesOrderCode" parameterType="String" resultMap="AfterSalesShippingDeviceResult">
<include refid="selectAfterSalesShippingDeviceVo"/>
where sales_order_code = #{salesOrderCode}
</select>
<insert id="insertAfterSalesShippingDevice" parameterType="AfterSalesShippingDevice" useGeneratedKeys="true" keyProperty="shippingDeviceCode"> <insert id="insertAfterSalesShippingDevice" parameterType="AfterSalesShippingDevice" useGeneratedKeys="true" keyProperty="shippingDeviceCode">
insert into aftersales_shipping_device insert into aftersales_shipping_device
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">

106
ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/add.html

@ -6,22 +6,23 @@
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-complaintNotice-add"> <form class="form-horizontal m" id="form-complaintNotice-add">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">客诉单号:</label> <label class="col-sm-4 control-label">客户编号:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="complaintNoticeCode" class="form-control" type="text"> <select class="form-control" id="customerId" name="customerId" required>
</select>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">关联生产单号</label> <label class="col-sm-3 control-label">客户名称</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="makeNo" class="form-control" type="text"> <input name="customerName" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">用户ID</label> <label class="col-sm-3 control-label">生产单号</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="userId" class="form-control" type="text"> <input name="makeNo" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
@ -33,62 +34,31 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">是否结案:</label> <label class="col-sm-3 control-label">备注信息:</label>
<div class="col-sm-8">
<select name="closingProcedures" class="form-control m-b" th:with="type=${@dict.getType('aftersales_closing_procedures')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">客户ID:</label>
<div class="col-sm-8">
<input name="customerId" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">客户名称:</label>
<div class="col-sm-8">
<input name="customerName" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">料号:</label>
<div class="col-sm-8">
<input name="materialNo" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">物料名称:</label>
<div class="col-sm-8">
<input name="materialName" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">物料合计:</label>
<div class="col-sm-8">
<input name="materialSum" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">数量合计:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="enterpriseSum" class="form-control" type="text"> <input name="remark" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> </form>
<label class="col-sm-3 control-label">交货数量:</label>
<div class="col-sm-8"> <div class="container">
<input name="deliveryGoodsNum" class="form-control" type="text"> <div class="form-row">
<div class="btn-group-sm" id="toolbar" role="group">
<span>选择报价信息</span>
<a class="btn btn-success" onclick="insertRow()">
<i class="fa fa-plus"></i> 添加物料
</a>
<a class="btn btn-danger multiple disabled" onclick="insertNRow()">
<i class="fa fa-remove"></i> 添加无料号物料
</a>
</div> </div>
</div> </div>
<div class="form-group"> <div class="row">
<label class="col-sm-3 control-label">备注信息:</label> <div class="col-sm-12 select-table table-striped">
<div class="col-sm-8"> <table id="bootstrap-sub-table-quoteChild"></table>
<input name="remark" class="form-control" type="text">
</div> </div>
</div> </div>
</form> </div>
</div> </div>
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script th:inline="javascript"> <script th:inline="javascript">
@ -102,6 +72,26 @@
$.operate.save(prefix + "/add", $('#form-complaintNotice-add').serialize()); $.operate.save(prefix + "/add", $('#form-complaintNotice-add').serialize());
} }
} }
//获取客户信息
$(document).ready(function() {
// 初始化客户编号下拉框
$.getJSON(ctx + "system/customer/getCustomers", function(customers) {
$.each(customers, function(index, customer) {
$('#customerId').append(new Option(customer.customerId, customer.customerId));
});
});
// 监听客户编号选择事件
$('#customerId').on('change', function() {
const customerId = $(this).val();
$.getJSON(prefix + "/getCustomerDetails?customerId=" + encodeURIComponent(customerId), function(customer) {
$('#customerName').val(customer.customerName);
});
});
});
</script> </script>
</body> </body>
</html> </html>

186
ruoyi-admin/src/main/resources/templates/aftersales/warehouseOutOrder/addShippingDevices.html

@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('添加出货设备')" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-warehouseOutOrder-edit" th:object="${selectMaterialsVO}">
<!-- <input name="quoteId" th:field="*{quoteId}" type="hidden">-->
<!-- <input name="materialCode" th:field="*{materialCode}" type="hidden">-->
<div class="col-sm-12 select-table table-striped">
<h3 class="mb-4">物料信息</h3>
<table id="table-material"></table>
</div>
<div class="col-sm-12 select-table table-striped">
<h3 class="mb-4">出货设备</h3>
<table id="table-shippingDevices"></table>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:inline="javascript">
// var addFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:addShippingDevice')}]];
// var addFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:addShippingDevice')}]];
var prefix = ctx + "aftersales/warehouseOutOrder";
var selectMaterialsVO = [[${selectMaterialsVO}]];
$("#form-warehouseOutOrder-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-warehouseOutOrder-edit').serialize());
}
}
$("input[name='outOrderTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$("input[name='planDeliveryTime']").datetimepicker({
format: "yyyy-mm-dd",
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() {
// 物料信息
$('#table-shippingDevices').bootstrapTable('destroy');
var shippingDevicesOptions = {
id: "table-shippingDevices",
url: prefix + "/addShippingDevicesOptions",
modalName: "物料信息",
showColumns: false,
pagination: false,
showToggle: false,
showRefresh: false,
showSearch: false,
queryParams:shippingDevicesQueryParams,
columns: [
{
checkbox: true // 保留原有全选checkbox
},
{
title: '销售订单号',
field: 'quoteId',
visible: false
},
{
title: '出货设备ID',
field: 'shippingDeviceId',
},
{
title: '设备型号',
field: 'deviceModelCode',
},
{
title: '流水号',
field: 'deviceRunningNumber',
},
{
title: '生产图片',
field: 'makePhotoUrl',
},
{
title: '确认添加', // 修改标题为操作
align: 'center',
// formatter: function(value, row, index) {
// // 自定义操作列内容,包含一个确认添加按钮和一个独立的checkbox
// var checkboxHtml = '<input type="checkbox" value="' + row.shippingDeviceId + '" class="custom-checkbox">';
// var addButtonHtml = '<a class="btn btn-success btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="addShippingDevices(\'' + row.materialCode + '\')"><i class="fa fa-add"></i>添加出货设备</a>';
// return checkboxHtml + ' ' + addButtonHtml;
// },
// events: { // 添加事件处理器
// 'click .custom-checkbox': function(e, value, row, index) {
// // 这里可以添加点击checkbox时的处理逻辑
// var checkbox = e.target;
// console.log("Checkbox for device ID: " + row.shippingDeviceId + " was clicked. Checked: " + checkbox.checked);
// }
// }
}
]
};
$.table.init(shippingDevicesOptions);
});
function shippingDevicesQueryParams(params) {
var curParams = {
// 传递参数查询参数
quoteId: selectMaterialsVO.quoteId,
};
return curParams;
}
</script>
</body>
</html>

198
ruoyi-admin/src/main/resources/templates/aftersales/warehouseOutOrder/detail.html

@ -0,0 +1,198 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改出库单')" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-warehouseOutOrder-edit" th:object="${warehouseOutOrder}">
<input name="outOrderId" th:field="*{outOrderId}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">出库单号:</label>
<div class="col-sm-8">
<input name="outOrderCode" th:field="*{outOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">出库对象:</label>
<div class="col-sm-8">
<input name="outOrderName" th:field="*{outOrderName}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">销售单号:</label>
<div class="col-sm-8">
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">申请人员:</label>
<div class="col-sm-8">
<input name="applyName" th:field="*{applyName}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">生产单号:</label>
<div class="col-sm-8">
<input name="makeNo" th:field="*{makeNo}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">出库状态:</label>
<div class="col-sm-8">
<select name="warehouseOutStatus" class="form-control m-b" th:with="type=${@dict.getType('warehouse_out_status')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{warehouseOutStatus}"></option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">关联订单号:</label>
<div class="col-sm-8">
<input name="relatedOrderCode" th:field="*{relatedOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">客户ID:</label>
<div class="col-sm-8">
<input name="customerId" th:field="*{customerId}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">客户名称:</label>
<div class="col-sm-8">
<input name="customerName" th:field="*{customerName}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">收货联系人:</label>
<div class="col-sm-8">
<input name="deliveryName" th:field="*{deliveryName}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">收货电话:</label>
<div class="col-sm-8">
<input name="deliveryNumber" th:field="*{deliveryNumber}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">收货地址:</label>
<div class="col-sm-8">
<input name="deliveryAddress" th:field="*{deliveryAddress}" class="form-control" type="text">
</div>
</div>
<div class="col-sm-12 select-table table-striped">
<h3 class="mb-4">物料信息</h3>
<table id="bootstrap-table"></table>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:addShippingDevices')}]];
var prefix = ctx + "aftersales/warehouseOutOrder";
var warehouseOutOrder = [[${warehouseOutOrder}]];
$("#form-warehouseOutOrder-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-warehouseOutOrder-edit').serialize());
}
}
$("input[name='outOrderTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$("input[name='planDeliveryTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$(function() {
var options = {
url: prefix + "/optionMaterials",
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',
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="addShippingDevices(\'' + row.quoteId + '\',\'' + row.materialCode + '\')"><i class="fa fa-add"></i>添加出货设备</a>');
return actions.join('');
}
}
]
};
$.table.init(options);
})
function queryParams(params) {
var curParams = {
// 传递参数查询参数
salesOrderCode: warehouseOutOrder.salesOrderCode
};
return curParams;
}
/*添加出货设备*/
function addShippingDevices(quoteId, materialCode) {
// 确保URL编码,特别是如果materialCode中可能含有特殊字符
var url = ctx + 'aftersales/warehouseOutOrder/addShippingDevices/' + encodeURIComponent(quoteId) + '/' + encodeURIComponent(materialCode);
$.modal.open("添加出货设备", url);
}
</script>
</body>
</html>

33
ruoyi-admin/src/main/resources/templates/aftersales/warehouseOutOrder/warehouseOutOrder.html

@ -54,21 +54,6 @@
</div> </div>
</form> </form>
</div> </div>
<!-- <div class="btn-group-sm" id="toolbar" role="group">-->
<!-- <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="aftersales:warehouseOutOrder:add">-->
<!-- <i class="fa fa-plus"></i> 添加-->
<!-- </a>-->
<!-- <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="aftersales:warehouseOutOrder:edit">-->
<!-- <i class="fa fa-edit"></i> 修改-->
<!-- </a>-->
<!-- <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="aftersales:warehouseOutOrder:remove">-->
<!-- <i class="fa fa-remove"></i> 删除-->
<!-- </a>-->
<!-- <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="aftersales:warehouseOutOrder:export">-->
<!-- <i class="fa fa-download"></i> 导出-->
<!-- </a>-->
<!-- </div>-->
<div class="col-sm-12 select-table table-striped"> <div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table> <table id="bootstrap-table"></table>
</div> </div>
@ -77,6 +62,7 @@
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script th:inline="javascript"> <script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:edit')}]]; var editFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:edit')}]];
var detailFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:detail')}]];
var removeFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:remove')}]]; var removeFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:remove')}]];
var cancelFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:cancel')}]]; var cancelFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:cancel')}]];
var restoreFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:restore')}]]; var restoreFlag = [[${@permission.hasPermi('aftersales:warehouseOutOrder:restore')}]];
@ -186,19 +172,22 @@
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.outOrderId + '\')"><i class="fa fa-edit"></i>编辑</a> '); // actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.outOrderId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.outOrderId + '\')"><i class="fa fa-remove"></i>删除</a> '); actions.push('<a class="btn btn-success btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="detail(\'' + row.outOrderId + '\')"><i class="fa fa-edit"></i>详情</a> ');
if(row.delFlag == '0'){
actions.push('<a class="btn btn-danger btn-xs ' + cancelFlag + '" href="javascript:void(0)" onclick="$.operate.cancel(\'' + row.id + '\')"><i class="fa fa-remove"></i>作废</a> ');
}else{
actions.push('<a class="btn btn-success btn-xs ' + restoreFlag + '" href="javascript:void(0)" onclick="$.operate.restore(\'' + row.id + '\')"><i class="fa fa-window-restore"></i>恢复</a> ');
}
return actions.join(''); return actions.join('');
} }
}] }]
}; };
$.table.init(options); $.table.init(options);
}); });
/*详情*/
function detail(outOrderId ) {
// 在这里编写派单操作的逻辑,使用传入的aftersalesOrderId参数
// 示例逻辑:
var url = ctx + 'aftersales/warehouseOutOrder/detail/'+outOrderId;
$.modal.open("详情",url);
}
</script> </script>
</body> </body>
</html> </html>
Loading…
Cancel
Save