zhangsiqi
4 months ago
30 changed files with 2133 additions and 99 deletions
@ -0,0 +1,317 @@ |
|||||
|
package com.ruoyi.sales.domain; |
||||
|
|
||||
|
import org.apache.commons.lang3.builder.ToStringBuilder; |
||||
|
import org.apache.commons.lang3.builder.ToStringStyle; |
||||
|
import com.ruoyi.common.annotation.Excel; |
||||
|
import com.ruoyi.common.core.domain.BaseEntity; |
||||
|
|
||||
|
/** |
||||
|
* 售后通知单详情对象 sales_aftersales_notice_detail |
||||
|
* |
||||
|
* @author 刘晓旭 |
||||
|
* @date 2024-07-22 |
||||
|
*/ |
||||
|
public class SalesAftersalesNoticeDetail extends BaseEntity |
||||
|
{ |
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** 售后通知单详情ID */ |
||||
|
private Long aftersalesNoticeDetailId; |
||||
|
|
||||
|
/** 售后通知单号 */ |
||||
|
@Excel(name = "售后通知单号") |
||||
|
private String aftersalesNoticeCode; |
||||
|
|
||||
|
/** 关联生产订单号 */ |
||||
|
private String makeNo; |
||||
|
|
||||
|
/** 关联销售订单编号 */ |
||||
|
private String salesOrderCode; |
||||
|
|
||||
|
/** 用户ID */ |
||||
|
private Long userId; |
||||
|
|
||||
|
/** 紧急程度(0一般、1紧急) */ |
||||
|
@Excel(name = "紧急程度", readConverterExp = "0=一般、1紧急") |
||||
|
private String emergencyDegree; |
||||
|
|
||||
|
/** 售后问题 */ |
||||
|
@Excel(name = "售后问题") |
||||
|
private String aftersalesProblem; |
||||
|
|
||||
|
/** 报告问题 */ |
||||
|
@Excel(name = "报告问题") |
||||
|
private String aftersalesReportUrl; |
||||
|
|
||||
|
/** 客户ID */ |
||||
|
private String customerId; |
||||
|
|
||||
|
/** 客户名称 */ |
||||
|
private String customerName; |
||||
|
|
||||
|
/** SN号(产品序列号) */ |
||||
|
@Excel(name = "SN号", readConverterExp = "产=品序列号") |
||||
|
private String snCode; |
||||
|
|
||||
|
/** 设备流水号 */ |
||||
|
@Excel(name = "设备流水号") |
||||
|
private String deviceRunningNumber; |
||||
|
|
||||
|
/** 物料名称 */ |
||||
|
@Excel(name = "物料名称") |
||||
|
private String materialName; |
||||
|
|
||||
|
/** 物料类型 */ |
||||
|
@Excel(name = "物料类型") |
||||
|
private String materialType; |
||||
|
|
||||
|
/** 物料图片地址 */ |
||||
|
@Excel(name = "物料图片地址") |
||||
|
private String materialPhotourl; |
||||
|
|
||||
|
/** 料号 */ |
||||
|
@Excel(name = "料号") |
||||
|
private String materialNo; |
||||
|
|
||||
|
/** 物料品牌 */ |
||||
|
@Excel(name = "物料品牌") |
||||
|
private String materialBrand; |
||||
|
|
||||
|
/** 物料单位 */ |
||||
|
@Excel(name = "物料单位") |
||||
|
private String materialUnit; |
||||
|
|
||||
|
/** 物料描述 */ |
||||
|
@Excel(name = "物料描述") |
||||
|
private String materialDescribe; |
||||
|
|
||||
|
/** 物料加工方式 */ |
||||
|
@Excel(name = "物料加工方式") |
||||
|
private String materialProcessMethod; |
||||
|
|
||||
|
/** 已出库数量 */ |
||||
|
@Excel(name = "已出库数量") |
||||
|
private Integer shippedGoodsSum; |
||||
|
|
||||
|
public void setAftersalesNoticeDetailId(Long aftersalesNoticeDetailId) |
||||
|
{ |
||||
|
this.aftersalesNoticeDetailId = aftersalesNoticeDetailId; |
||||
|
} |
||||
|
|
||||
|
public Long getAftersalesNoticeDetailId() |
||||
|
{ |
||||
|
return aftersalesNoticeDetailId; |
||||
|
} |
||||
|
public void setAftersalesNoticeCode(String aftersalesNoticeCode) |
||||
|
{ |
||||
|
this.aftersalesNoticeCode = aftersalesNoticeCode; |
||||
|
} |
||||
|
|
||||
|
public String getAftersalesNoticeCode() |
||||
|
{ |
||||
|
return aftersalesNoticeCode; |
||||
|
} |
||||
|
public void setMakeNo(String makeNo) |
||||
|
{ |
||||
|
this.makeNo = makeNo; |
||||
|
} |
||||
|
|
||||
|
public String getMakeNo() |
||||
|
{ |
||||
|
return makeNo; |
||||
|
} |
||||
|
public void setSalesOrderCode(String salesOrderCode) |
||||
|
{ |
||||
|
this.salesOrderCode = salesOrderCode; |
||||
|
} |
||||
|
|
||||
|
public String getSalesOrderCode() |
||||
|
{ |
||||
|
return salesOrderCode; |
||||
|
} |
||||
|
public void setUserId(Long userId) |
||||
|
{ |
||||
|
this.userId = userId; |
||||
|
} |
||||
|
|
||||
|
public Long getUserId() |
||||
|
{ |
||||
|
return userId; |
||||
|
} |
||||
|
public void setEmergencyDegree(String emergencyDegree) |
||||
|
{ |
||||
|
this.emergencyDegree = emergencyDegree; |
||||
|
} |
||||
|
|
||||
|
public String getEmergencyDegree() |
||||
|
{ |
||||
|
return emergencyDegree; |
||||
|
} |
||||
|
public void setAftersalesProblem(String aftersalesProblem) |
||||
|
{ |
||||
|
this.aftersalesProblem = aftersalesProblem; |
||||
|
} |
||||
|
|
||||
|
public String getAftersalesProblem() |
||||
|
{ |
||||
|
return aftersalesProblem; |
||||
|
} |
||||
|
public void setAftersalesReportUrl(String aftersalesReportUrl) |
||||
|
{ |
||||
|
this.aftersalesReportUrl = aftersalesReportUrl; |
||||
|
} |
||||
|
|
||||
|
public String getAftersalesReportUrl() |
||||
|
{ |
||||
|
return aftersalesReportUrl; |
||||
|
} |
||||
|
public void setCustomerId(String customerId) |
||||
|
{ |
||||
|
this.customerId = customerId; |
||||
|
} |
||||
|
|
||||
|
public String getCustomerId() |
||||
|
{ |
||||
|
return customerId; |
||||
|
} |
||||
|
public void setCustomerName(String customerName) |
||||
|
{ |
||||
|
this.customerName = customerName; |
||||
|
} |
||||
|
|
||||
|
public String getCustomerName() |
||||
|
{ |
||||
|
return customerName; |
||||
|
} |
||||
|
public void setSnCode(String snCode) |
||||
|
{ |
||||
|
this.snCode = snCode; |
||||
|
} |
||||
|
|
||||
|
public String getSnCode() |
||||
|
{ |
||||
|
return snCode; |
||||
|
} |
||||
|
public void setDeviceRunningNumber(String deviceRunningNumber) |
||||
|
{ |
||||
|
this.deviceRunningNumber = deviceRunningNumber; |
||||
|
} |
||||
|
|
||||
|
public String getDeviceRunningNumber() |
||||
|
{ |
||||
|
return deviceRunningNumber; |
||||
|
} |
||||
|
public void setMaterialName(String materialName) |
||||
|
{ |
||||
|
this.materialName = materialName; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialName() |
||||
|
{ |
||||
|
return materialName; |
||||
|
} |
||||
|
public void setMaterialType(String materialType) |
||||
|
{ |
||||
|
this.materialType = materialType; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialType() |
||||
|
{ |
||||
|
return materialType; |
||||
|
} |
||||
|
public void setMaterialPhotourl(String materialPhotourl) |
||||
|
{ |
||||
|
this.materialPhotourl = materialPhotourl; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialPhotourl() |
||||
|
{ |
||||
|
return materialPhotourl; |
||||
|
} |
||||
|
public void setMaterialNo(String materialNo) |
||||
|
{ |
||||
|
this.materialNo = materialNo; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialNo() |
||||
|
{ |
||||
|
return materialNo; |
||||
|
} |
||||
|
public void setMaterialBrand(String materialBrand) |
||||
|
{ |
||||
|
this.materialBrand = materialBrand; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialBrand() |
||||
|
{ |
||||
|
return materialBrand; |
||||
|
} |
||||
|
public void setMaterialUnit(String materialUnit) |
||||
|
{ |
||||
|
this.materialUnit = materialUnit; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialUnit() |
||||
|
{ |
||||
|
return materialUnit; |
||||
|
} |
||||
|
public void setMaterialDescribe(String materialDescribe) |
||||
|
{ |
||||
|
this.materialDescribe = materialDescribe; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialDescribe() |
||||
|
{ |
||||
|
return materialDescribe; |
||||
|
} |
||||
|
public void setMaterialProcessMethod(String materialProcessMethod) |
||||
|
{ |
||||
|
this.materialProcessMethod = materialProcessMethod; |
||||
|
} |
||||
|
|
||||
|
public String getMaterialProcessMethod() |
||||
|
{ |
||||
|
return materialProcessMethod; |
||||
|
} |
||||
|
public void setShippedGoodsSum(Integer shippedGoodsSum) |
||||
|
{ |
||||
|
this.shippedGoodsSum = shippedGoodsSum; |
||||
|
} |
||||
|
|
||||
|
public Integer getShippedGoodsSum() |
||||
|
{ |
||||
|
return shippedGoodsSum; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String toString() { |
||||
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
||||
|
.append("aftersalesNoticeDetailId", getAftersalesNoticeDetailId()) |
||||
|
.append("aftersalesNoticeCode", getAftersalesNoticeCode()) |
||||
|
.append("makeNo", getMakeNo()) |
||||
|
.append("salesOrderCode", getSalesOrderCode()) |
||||
|
.append("userId", getUserId()) |
||||
|
.append("emergencyDegree", getEmergencyDegree()) |
||||
|
.append("aftersalesProblem", getAftersalesProblem()) |
||||
|
.append("aftersalesReportUrl", getAftersalesReportUrl()) |
||||
|
.append("customerId", getCustomerId()) |
||||
|
.append("customerName", getCustomerName()) |
||||
|
.append("snCode", getSnCode()) |
||||
|
.append("deviceRunningNumber", getDeviceRunningNumber()) |
||||
|
.append("materialName", getMaterialName()) |
||||
|
.append("materialType", getMaterialType()) |
||||
|
.append("materialPhotourl", getMaterialPhotourl()) |
||||
|
.append("materialNo", getMaterialNo()) |
||||
|
.append("materialBrand", getMaterialBrand()) |
||||
|
.append("materialUnit", getMaterialUnit()) |
||||
|
.append("materialDescribe", getMaterialDescribe()) |
||||
|
.append("materialProcessMethod", getMaterialProcessMethod()) |
||||
|
.append("shippedGoodsSum", getShippedGoodsSum()) |
||||
|
.append("createBy", getCreateBy()) |
||||
|
.append("createTime", getCreateTime()) |
||||
|
.append("updateBy", getUpdateBy()) |
||||
|
.append("updateTime", getUpdateTime()) |
||||
|
.append("remark", getRemark()) |
||||
|
.toString(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
package com.ruoyi.sales.mapper; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail; |
||||
|
|
||||
|
/** |
||||
|
* 售后通知单详情Mapper接口 |
||||
|
* |
||||
|
* @author 刘晓旭 |
||||
|
* @date 2024-07-22 |
||||
|
*/ |
||||
|
public interface SalesAftersalesNoticeDetailMapper |
||||
|
{ |
||||
|
/** |
||||
|
* 查询售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 售后通知单详情 |
||||
|
*/ |
||||
|
public SalesAftersalesNoticeDetail selectSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
|
||||
|
/** |
||||
|
* 查询售后通知单详情列表 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 售后通知单详情集合 |
||||
|
*/ |
||||
|
public List<SalesAftersalesNoticeDetail> selectSalesAftersalesNoticeDetailList(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail); |
||||
|
|
||||
|
/** |
||||
|
* 新增售后通知单详情 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int insertSalesAftersalesNoticeDetail(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail); |
||||
|
|
||||
|
/** |
||||
|
* 修改售后通知单详情 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int updateSalesAftersalesNoticeDetail(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail); |
||||
|
|
||||
|
/** |
||||
|
* 删除售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int deleteSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
|
||||
|
/** |
||||
|
* 批量删除售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailIds 需要删除的数据ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int deleteSalesAftersalesNoticeDetailByIds(String[] aftersalesNoticeDetailIds); |
||||
|
|
||||
|
/** |
||||
|
* 作废售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int cancelSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
|
||||
|
/** |
||||
|
* 恢复售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int restoreSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
} |
@ -0,0 +1,75 @@ |
|||||
|
package com.ruoyi.sales.service; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail; |
||||
|
|
||||
|
/** |
||||
|
* 售后通知单详情Service接口 |
||||
|
* |
||||
|
* @author 刘晓旭 |
||||
|
* @date 2024-07-22 |
||||
|
*/ |
||||
|
public interface ISalesAftersalesNoticeDetailService |
||||
|
{ |
||||
|
/** |
||||
|
* 查询售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 售后通知单详情 |
||||
|
*/ |
||||
|
public SalesAftersalesNoticeDetail selectSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
|
||||
|
/** |
||||
|
* 查询售后通知单详情列表 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 售后通知单详情集合 |
||||
|
*/ |
||||
|
public List<SalesAftersalesNoticeDetail> selectSalesAftersalesNoticeDetailList(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail); |
||||
|
|
||||
|
/** |
||||
|
* 新增售后通知单详情 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int insertSalesAftersalesNoticeDetail(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail); |
||||
|
|
||||
|
/** |
||||
|
* 修改售后通知单详情 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int updateSalesAftersalesNoticeDetail(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail); |
||||
|
|
||||
|
/** |
||||
|
* 批量删除售后通知单详情 |
||||
|
* |
||||
|
* @param ids 需要删除的数据ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int deleteSalesAftersalesNoticeDetailByIds(String ids); |
||||
|
|
||||
|
/** |
||||
|
* 删除售后通知单详情信息 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
public int deleteSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
|
||||
|
/** |
||||
|
* 作废售后通知单详情 |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return |
||||
|
*/ |
||||
|
int cancelSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
|
||||
|
/** |
||||
|
* 恢复售后通知单详情 |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return |
||||
|
*/ |
||||
|
int restoreSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId); |
||||
|
} |
@ -0,0 +1,126 @@ |
|||||
|
package com.ruoyi.sales.service.impl; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import com.ruoyi.common.utils.DateUtils; |
||||
|
import com.ruoyi.common.utils.ShiroUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper; |
||||
|
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail; |
||||
|
import com.ruoyi.sales.service.ISalesAftersalesNoticeDetailService; |
||||
|
import com.ruoyi.common.core.text.Convert; |
||||
|
|
||||
|
/** |
||||
|
* 售后通知单详情Service业务层处理 |
||||
|
* |
||||
|
* @author 刘晓旭 |
||||
|
* @date 2024-07-22 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class SalesAftersalesNoticeDetailServiceImpl implements ISalesAftersalesNoticeDetailService |
||||
|
{ |
||||
|
@Autowired |
||||
|
private SalesAftersalesNoticeDetailMapper salesAftersalesNoticeDetailMapper; |
||||
|
|
||||
|
/** |
||||
|
* 查询售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 售后通知单详情 |
||||
|
*/ |
||||
|
@Override |
||||
|
public SalesAftersalesNoticeDetail selectSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId) |
||||
|
{ |
||||
|
return salesAftersalesNoticeDetailMapper.selectSalesAftersalesNoticeDetailById(aftersalesNoticeDetailId); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询售后通知单详情列表 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 售后通知单详情 |
||||
|
*/ |
||||
|
@Override |
||||
|
public List<SalesAftersalesNoticeDetail> selectSalesAftersalesNoticeDetailList(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail) |
||||
|
{ |
||||
|
return salesAftersalesNoticeDetailMapper.selectSalesAftersalesNoticeDetailList(salesAftersalesNoticeDetail); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增售后通知单详情 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@Override |
||||
|
public int insertSalesAftersalesNoticeDetail(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail) |
||||
|
{ |
||||
|
String loginName = ShiroUtils.getLoginName(); |
||||
|
salesAftersalesNoticeDetail.setCreateBy(loginName); |
||||
|
salesAftersalesNoticeDetail.setCreateTime(DateUtils.getNowDate()); |
||||
|
return salesAftersalesNoticeDetailMapper.insertSalesAftersalesNoticeDetail(salesAftersalesNoticeDetail); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改售后通知单详情 |
||||
|
* |
||||
|
* @param salesAftersalesNoticeDetail 售后通知单详情 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@Override |
||||
|
public int updateSalesAftersalesNoticeDetail(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail) |
||||
|
{ |
||||
|
String loginName = ShiroUtils.getLoginName(); |
||||
|
salesAftersalesNoticeDetail.setUpdateBy(loginName); |
||||
|
salesAftersalesNoticeDetail.setUpdateTime(DateUtils.getNowDate()); |
||||
|
return salesAftersalesNoticeDetailMapper.updateSalesAftersalesNoticeDetail(salesAftersalesNoticeDetail); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除售后通知单详情对象 |
||||
|
* |
||||
|
* @param ids 需要删除的数据ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@Override |
||||
|
public int deleteSalesAftersalesNoticeDetailByIds(String ids) |
||||
|
{ |
||||
|
return salesAftersalesNoticeDetailMapper.deleteSalesAftersalesNoticeDetailByIds(Convert.toStrArray(ids)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除售后通知单详情信息 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@Override |
||||
|
public int deleteSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId) |
||||
|
{ |
||||
|
return salesAftersalesNoticeDetailMapper.deleteSalesAftersalesNoticeDetailById(aftersalesNoticeDetailId); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 作废售后通知单详情 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@Override |
||||
|
public int cancelSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId) |
||||
|
{ |
||||
|
return salesAftersalesNoticeDetailMapper.cancelSalesAftersalesNoticeDetailById(aftersalesNoticeDetailId); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 恢复售后通知单详情信息 |
||||
|
* |
||||
|
* @param aftersalesNoticeDetailId 售后通知单详情ID |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@Override |
||||
|
public int restoreSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId) |
||||
|
{ |
||||
|
return salesAftersalesNoticeDetailMapper.restoreSalesAftersalesNoticeDetailById(aftersalesNoticeDetailId); |
||||
|
} |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
package com.ruoyi.system.domain.Vo; |
||||
|
|
||||
|
import com.ruoyi.system.domain.BaseEmpRequisiteOrder; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class BaseEmpRequisiteOrderVO extends BaseEmpRequisiteOrder { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
/** 申请人姓名 */ |
||||
|
private String applyUserName; |
||||
|
/** 任务ID */ |
||||
|
private String taskId; |
||||
|
/** 任务名称 */ |
||||
|
private String taskName; |
||||
|
/** 办理时间 */ |
||||
|
private Date doneTime; |
||||
|
/** 创建人 */ |
||||
|
private String createUserName; |
||||
|
/** 流程实例状态 1 激活 2 挂起 */ |
||||
|
private String suspendState; |
||||
|
/** 待办用户id */ |
||||
|
private String todoUserId; |
||||
|
/** 流程实例类型名称 */ |
||||
|
private String instanceTypeName; |
||||
|
|
||||
|
/** |
||||
|
* 关键词 |
||||
|
*/ |
||||
|
private String keyword; |
||||
|
} |
@ -0,0 +1,88 @@ |
|||||
|
package com.ruoyi.system.domain.Vo; |
||||
|
|
||||
|
import com.ruoyi.common.annotation.Excel; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
/*销售发起售后选择设备*/ |
||||
|
public class SelectAftersalesNoticeVO { |
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** 售后通知单详情ID */ |
||||
|
private Long aftersalesNoticeDetailId; |
||||
|
|
||||
|
/** 售后通知单号 */ |
||||
|
@Excel(name = "售后通知单号") |
||||
|
private String aftersalesNoticeCode; |
||||
|
|
||||
|
/** 关联生产订单号 */ |
||||
|
private String makeNo; |
||||
|
|
||||
|
/** 关联销售订单编号 */ |
||||
|
private String salesOrderCode; |
||||
|
|
||||
|
/** 用户ID */ |
||||
|
private Long userId; |
||||
|
|
||||
|
/** 紧急程度(0一般、1紧急) */ |
||||
|
@Excel(name = "紧急程度", readConverterExp = "0=一般、1紧急") |
||||
|
private String emergencyDegree; |
||||
|
|
||||
|
/** 售后问题 */ |
||||
|
@Excel(name = "售后问题") |
||||
|
private String aftersalesProblem; |
||||
|
|
||||
|
/** 报告问题 */ |
||||
|
@Excel(name = "报告问题") |
||||
|
private String aftersalesReportUrl; |
||||
|
|
||||
|
/** 客户ID */ |
||||
|
private String customerId; |
||||
|
|
||||
|
/** 客户名称 */ |
||||
|
private String customerName; |
||||
|
|
||||
|
/** SN号(产品序列号) */ |
||||
|
@Excel(name = "SN号", readConverterExp = "产=品序列号") |
||||
|
private String snCode; |
||||
|
|
||||
|
/** 设备流水号 */ |
||||
|
@Excel(name = "设备流水号") |
||||
|
private String deviceRunningNumber; |
||||
|
|
||||
|
/** 物料名称 */ |
||||
|
@Excel(name = "物料名称") |
||||
|
private String materialName; |
||||
|
|
||||
|
/** 物料类型 */ |
||||
|
@Excel(name = "物料类型") |
||||
|
private String materialType; |
||||
|
|
||||
|
/** 物料图片地址 */ |
||||
|
@Excel(name = "物料图片地址") |
||||
|
private String materialPhotourl; |
||||
|
|
||||
|
/** 料号 */ |
||||
|
@Excel(name = "料号") |
||||
|
private String materialNo; |
||||
|
|
||||
|
/** 物料品牌 */ |
||||
|
@Excel(name = "物料品牌") |
||||
|
private String materialBrand; |
||||
|
|
||||
|
/** 物料单位 */ |
||||
|
@Excel(name = "物料单位") |
||||
|
private String materialUnit; |
||||
|
|
||||
|
/** 物料描述 */ |
||||
|
@Excel(name = "物料描述") |
||||
|
private String materialDescribe; |
||||
|
|
||||
|
/** 物料加工方式 */ |
||||
|
@Excel(name = "物料加工方式") |
||||
|
private String materialProcessMethod; |
||||
|
|
||||
|
/** 已出库数量 */ |
||||
|
@Excel(name = "已出库数量") |
||||
|
private Integer shippedGoodsSum; |
||||
|
} |
@ -0,0 +1,160 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<!DOCTYPE mapper |
||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper"> |
||||
|
|
||||
|
<resultMap type="SalesAftersalesNoticeDetail" id="SalesAftersalesNoticeDetailResult"> |
||||
|
<result property="aftersalesNoticeDetailId" column="aftersales_notice_detail_id" /> |
||||
|
<result property="aftersalesNoticeCode" column="aftersales_notice_code" /> |
||||
|
<result property="makeNo" column="make_no" /> |
||||
|
<result property="salesOrderCode" column="sales_order_code" /> |
||||
|
<result property="userId" column="user_id" /> |
||||
|
<result property="emergencyDegree" column="emergency_degree" /> |
||||
|
<result property="aftersalesProblem" column="aftersales_problem" /> |
||||
|
<result property="aftersalesReportUrl" column="aftersales_report_url" /> |
||||
|
<result property="customerId" column="customer_id" /> |
||||
|
<result property="customerName" column="customer_name" /> |
||||
|
<result property="snCode" column="sn_code" /> |
||||
|
<result property="deviceRunningNumber" column="device_running_number" /> |
||||
|
<result property="materialName" column="material_name" /> |
||||
|
<result property="materialType" column="material_type" /> |
||||
|
<result property="materialPhotourl" column="material_photoUrl" /> |
||||
|
<result property="materialNo" column="material_no" /> |
||||
|
<result property="materialBrand" column="material_brand" /> |
||||
|
<result property="materialUnit" column="material_unit" /> |
||||
|
<result property="materialDescribe" column="material_describe" /> |
||||
|
<result property="materialProcessMethod" column="material_process_method" /> |
||||
|
<result property="shippedGoodsSum" column="shipped_goods_sum" /> |
||||
|
<result property="createBy" column="create_by" /> |
||||
|
<result property="createTime" column="create_time" /> |
||||
|
<result property="updateBy" column="update_by" /> |
||||
|
<result property="updateTime" column="update_time" /> |
||||
|
<result property="remark" column="remark" /> |
||||
|
</resultMap> |
||||
|
|
||||
|
<sql id="selectSalesAftersalesNoticeDetailVo"> |
||||
|
select aftersales_notice_detail_id, aftersales_notice_code, make_no, sales_order_code, user_id, emergency_degree, aftersales_problem, aftersales_report_url, customer_id, customer_name, sn_code, device_running_number, material_name, material_type, material_photoUrl, material_no, material_brand, material_unit, material_describe, material_process_method, shipped_goods_sum, create_by, create_time, update_by, update_time, remark from sales_aftersales_notice_detail |
||||
|
</sql> |
||||
|
|
||||
|
<select id="selectSalesAftersalesNoticeDetailList" parameterType="SalesAftersalesNoticeDetail" resultMap="SalesAftersalesNoticeDetailResult"> |
||||
|
<include refid="selectSalesAftersalesNoticeDetailVo"/> |
||||
|
<where> |
||||
|
</where> |
||||
|
</select> |
||||
|
|
||||
|
<select id="selectSalesAftersalesNoticeDetailById" parameterType="Long" resultMap="SalesAftersalesNoticeDetailResult"> |
||||
|
<include refid="selectSalesAftersalesNoticeDetailVo"/> |
||||
|
where aftersales_notice_detail_id = #{aftersalesNoticeDetailId} |
||||
|
</select> |
||||
|
|
||||
|
<insert id="insertSalesAftersalesNoticeDetail" parameterType="SalesAftersalesNoticeDetail" useGeneratedKeys="true" keyProperty="aftersalesNoticeDetailId"> |
||||
|
insert into sales_aftersales_notice_detail |
||||
|
<trim prefix="(" suffix=")" suffixOverrides=","> |
||||
|
<if test="aftersalesNoticeCode != null">aftersales_notice_code,</if> |
||||
|
<if test="makeNo != null">make_no,</if> |
||||
|
<if test="salesOrderCode != null">sales_order_code,</if> |
||||
|
<if test="userId != null">user_id,</if> |
||||
|
<if test="emergencyDegree != null">emergency_degree,</if> |
||||
|
<if test="aftersalesProblem != null">aftersales_problem,</if> |
||||
|
<if test="aftersalesReportUrl != null">aftersales_report_url,</if> |
||||
|
<if test="customerId != null">customer_id,</if> |
||||
|
<if test="customerName != null">customer_name,</if> |
||||
|
<if test="snCode != null">sn_code,</if> |
||||
|
<if test="deviceRunningNumber != null">device_running_number,</if> |
||||
|
<if test="materialName != null">material_name,</if> |
||||
|
<if test="materialType != null">material_type,</if> |
||||
|
<if test="materialPhotourl != null">material_photoUrl,</if> |
||||
|
<if test="materialNo != null">material_no,</if> |
||||
|
<if test="materialBrand != null">material_brand,</if> |
||||
|
<if test="materialUnit != null">material_unit,</if> |
||||
|
<if test="materialDescribe != null">material_describe,</if> |
||||
|
<if test="materialProcessMethod != null">material_process_method,</if> |
||||
|
<if test="shippedGoodsSum != null">shipped_goods_sum,</if> |
||||
|
<if test="createBy != null">create_by,</if> |
||||
|
<if test="createTime != null">create_time,</if> |
||||
|
<if test="updateBy != null">update_by,</if> |
||||
|
<if test="updateTime != null">update_time,</if> |
||||
|
<if test="remark != null">remark,</if> |
||||
|
</trim> |
||||
|
<trim prefix="values (" suffix=")" suffixOverrides=","> |
||||
|
<if test="aftersalesNoticeCode != null">#{aftersalesNoticeCode},</if> |
||||
|
<if test="makeNo != null">#{makeNo},</if> |
||||
|
<if test="salesOrderCode != null">#{salesOrderCode},</if> |
||||
|
<if test="userId != null">#{userId},</if> |
||||
|
<if test="emergencyDegree != null">#{emergencyDegree},</if> |
||||
|
<if test="aftersalesProblem != null">#{aftersalesProblem},</if> |
||||
|
<if test="aftersalesReportUrl != null">#{aftersalesReportUrl},</if> |
||||
|
<if test="customerId != null">#{customerId},</if> |
||||
|
<if test="customerName != null">#{customerName},</if> |
||||
|
<if test="snCode != null">#{snCode},</if> |
||||
|
<if test="deviceRunningNumber != null">#{deviceRunningNumber},</if> |
||||
|
<if test="materialName != null">#{materialName},</if> |
||||
|
<if test="materialType != null">#{materialType},</if> |
||||
|
<if test="materialPhotourl != null">#{materialPhotourl},</if> |
||||
|
<if test="materialNo != null">#{materialNo},</if> |
||||
|
<if test="materialBrand != null">#{materialBrand},</if> |
||||
|
<if test="materialUnit != null">#{materialUnit},</if> |
||||
|
<if test="materialDescribe != null">#{materialDescribe},</if> |
||||
|
<if test="materialProcessMethod != null">#{materialProcessMethod},</if> |
||||
|
<if test="shippedGoodsSum != null">#{shippedGoodsSum},</if> |
||||
|
<if test="createBy != null">#{createBy},</if> |
||||
|
<if test="createTime != null">#{createTime},</if> |
||||
|
<if test="updateBy != null">#{updateBy},</if> |
||||
|
<if test="updateTime != null">#{updateTime},</if> |
||||
|
<if test="remark != null">#{remark},</if> |
||||
|
</trim> |
||||
|
</insert> |
||||
|
|
||||
|
<update id="updateSalesAftersalesNoticeDetail" parameterType="SalesAftersalesNoticeDetail"> |
||||
|
update sales_aftersales_notice_detail |
||||
|
<trim prefix="SET" suffixOverrides=","> |
||||
|
<if test="aftersalesNoticeCode != null">aftersales_notice_code = #{aftersalesNoticeCode},</if> |
||||
|
<if test="makeNo != null">make_no = #{makeNo},</if> |
||||
|
<if test="salesOrderCode != null">sales_order_code = #{salesOrderCode},</if> |
||||
|
<if test="userId != null">user_id = #{userId},</if> |
||||
|
<if test="emergencyDegree != null">emergency_degree = #{emergencyDegree},</if> |
||||
|
<if test="aftersalesProblem != null">aftersales_problem = #{aftersalesProblem},</if> |
||||
|
<if test="aftersalesReportUrl != null">aftersales_report_url = #{aftersalesReportUrl},</if> |
||||
|
<if test="customerId != null">customer_id = #{customerId},</if> |
||||
|
<if test="customerName != null">customer_name = #{customerName},</if> |
||||
|
<if test="snCode != null">sn_code = #{snCode},</if> |
||||
|
<if test="deviceRunningNumber != null">device_running_number = #{deviceRunningNumber},</if> |
||||
|
<if test="materialName != null">material_name = #{materialName},</if> |
||||
|
<if test="materialType != null">material_type = #{materialType},</if> |
||||
|
<if test="materialPhotourl != null">material_photoUrl = #{materialPhotourl},</if> |
||||
|
<if test="materialNo != null">material_no = #{materialNo},</if> |
||||
|
<if test="materialBrand != null">material_brand = #{materialBrand},</if> |
||||
|
<if test="materialUnit != null">material_unit = #{materialUnit},</if> |
||||
|
<if test="materialDescribe != null">material_describe = #{materialDescribe},</if> |
||||
|
<if test="materialProcessMethod != null">material_process_method = #{materialProcessMethod},</if> |
||||
|
<if test="shippedGoodsSum != null">shipped_goods_sum = #{shippedGoodsSum},</if> |
||||
|
<if test="createBy != null">create_by = #{createBy},</if> |
||||
|
<if test="createTime != null">create_time = #{createTime},</if> |
||||
|
<if test="updateBy != null">update_by = #{updateBy},</if> |
||||
|
<if test="updateTime != null">update_time = #{updateTime},</if> |
||||
|
<if test="remark != null">remark = #{remark},</if> |
||||
|
</trim> |
||||
|
where aftersales_notice_detail_id = #{aftersalesNoticeDetailId} |
||||
|
</update> |
||||
|
|
||||
|
<delete id="deleteSalesAftersalesNoticeDetailById" parameterType="Long"> |
||||
|
delete from sales_aftersales_notice_detail where aftersales_notice_detail_id = #{aftersalesNoticeDetailId} |
||||
|
</delete> |
||||
|
|
||||
|
<delete id="deleteSalesAftersalesNoticeDetailByIds" parameterType="String"> |
||||
|
delete from sales_aftersales_notice_detail where aftersales_notice_detail_id in |
||||
|
<foreach item="aftersalesNoticeDetailId" collection="array" open="(" separator="," close=")"> |
||||
|
#{aftersalesNoticeDetailId} |
||||
|
</foreach> |
||||
|
</delete> |
||||
|
|
||||
|
<update id="cancelSalesAftersalesNoticeDetailById" parameterType="Long"> |
||||
|
update sales_aftersales_notice_detail set del_flag = '1' where aftersales_notice_detail_id = #{aftersalesNoticeDetailId} |
||||
|
</update> |
||||
|
|
||||
|
<update id="restoreSalesAftersalesNoticeDetailById" parameterType="Long"> |
||||
|
update sales_aftersales_notice_detail set del_flag = '0' where aftersales_notice_detail_id = #{aftersalesNoticeDetailId} |
||||
|
</update> |
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,153 @@ |
|||||
|
<!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" /> |
||||
|
<th:block th:include="include :: summernote-css" /> |
||||
|
</head> |
||||
|
<body class="white-bg"> |
||||
|
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> |
||||
|
<form class="form-horizontal m" id="form-empRequisition-scjl" th:object="${formData}"> |
||||
|
<input name="requisiteId" th:field="*{requisiteId}" type="hidden"> |
||||
|
<input name="taskId" th:field="*{taskId}" type="hidden"> |
||||
|
<input name="taskName" th:field="*{taskName}" type="hidden"> |
||||
|
<input name="instanceId" th:field="*{instanceId}" type="hidden"> |
||||
|
<input name="instanceType" th:field="*{instanceType}" type="hidden"> |
||||
|
<input type="hidden" name="p_COM_comment" /> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">领料单编号:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="requisitieCode" th:field="*{requisitieCode}" 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="correlationCode" th:field="*{correlationCode}" 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="remark" th:field="*{remark}" class="form-control" type="text"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label is-required" for="scjlVerifyApproved">审批意见:</label> |
||||
|
<div class="col-sm-6"> |
||||
|
<select name="p_B_scjlVerifyApproved" id="scjlVerifyApproved" class="form-control" required> |
||||
|
<option value=""></option> |
||||
|
<option value="true">同意</option> |
||||
|
<option value="false">拒绝</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-6 control-label">批注:</label> |
||||
|
<div class="col-sm-6"> |
||||
|
<textarea name="comment" class="form-control"></textarea> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
<div class="container"> |
||||
|
<div class="form-row"> |
||||
|
<div class="btn-group-sm" id="toolbar" role="group"> |
||||
|
<span>报价信息</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 select-table table-striped"> |
||||
|
<table id="bootstrap-sub-table-empRequisitionChild"></table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<th:block th:include="include :: footer" /> |
||||
|
<th:block th:include="include :: datetimepicker-js" /> |
||||
|
<th:block th:include="include :: bootstrap-table-editable-js" /> |
||||
|
<th:block th:include="include :: summernote-js" /> |
||||
|
<script th:src="@{/js/activiti.js}"></script> |
||||
|
<script th:inline="javascript"> |
||||
|
var prefix = ctx + "system/empRequisiteOrder"; |
||||
|
var materialTypeDatas = [[${@category.getChildByCode('materialType')}]]; |
||||
|
var auditStatusDatas = [[${@dict.getType('auditStatus')}]]; |
||||
|
var sysUnitClassDatas = [[${@dict.getType('sys_unit_class')}]]; |
||||
|
var processMethodDatas = [[${@dict.getType('processMethod')}]]; |
||||
|
$("#form-empRequisition-scjl").validate({ |
||||
|
focusCleanup: true |
||||
|
}); |
||||
|
//获取子表信息 |
||||
|
$(function() { |
||||
|
var options = { |
||||
|
id:'bootstrap-sub-table-empRequisitionChild', |
||||
|
pagination: false, |
||||
|
sidePagination: "client", |
||||
|
model: "物料报价信息", |
||||
|
data: [[${formData.baseEmpRequisiteOrderChildList}]], |
||||
|
columns: [ |
||||
|
{checkbox: true}, |
||||
|
{field: 'index',align: 'center', title: "序号", |
||||
|
formatter: function (value, row, index) { |
||||
|
var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index)); |
||||
|
return columnIndex + $.table.serialNumber(index); |
||||
|
} |
||||
|
}, |
||||
|
{title: '物料索引id',field: 'materialId',align: 'center',visible: false}, |
||||
|
{title: '料号',field: 'materialCode',align: 'center'}, |
||||
|
{title: '物料名称',field: 'materialName',align: 'center'}, |
||||
|
{title: '图片',field: 'photoUrl', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.imageView(value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '物料类型',field: 'materialType',align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.selectCategoryLabel(materialTypeDatas, value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '型号',field: 'materialModel',align: 'center'}, |
||||
|
{title: '规格',field: 'specification',align: 'center'}, |
||||
|
{ title: '描述',field: 'describe',align: 'center'}, |
||||
|
{title: '品牌',field: 'brand',align: 'center'}, |
||||
|
{ title: '单位',field: 'unit',align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.selectDictLabel(sysUnitClassDatas, value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '半成品类型',field: 'processMethod',align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.selectDictLabel(processMethodDatas, value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '物料的数量', field: 'materialNum',align: 'center',editable: true,}, |
||||
|
{title: '物料的不含税单价(RMB)',field: 'materialNoRmb',align: 'center',}, |
||||
|
{title: '物料的含税单价(RMB)',field: 'materialRmb',align: 'center',}, |
||||
|
{title: '物料的含税总价(RMB)',field: 'materialNoRmbSum',align: 'center',}, |
||||
|
{title: '物料的不含税总价(RMB)',field: 'materialRmbSum',align: 'center',}, |
||||
|
{title: '录入人',field: 'createBy',align: 'center',visible: false}, |
||||
|
{title: '录入时间',field: 'createTime',align: 'center',visible: false }, |
||||
|
{title: '更新人',field: 'updateBy',align: 'center',visible: false}, |
||||
|
{title: '上次更新时间',field: 'updateTime',align: 'center',visible: false}, |
||||
|
{title: '备注',field: 'remark',align: 'center',editable: true}, |
||||
|
], |
||||
|
onEditableSave:function(field, row, oldValue, $el){ |
||||
|
row.materialNoRmbSum = Number(row.materialNum * Number(row.materialNoRmb)).toFixed(2); |
||||
|
row.materialRmbSum = Number(row.materialRmb * row.materialNum).toFixed(2); |
||||
|
}, |
||||
|
}; |
||||
|
$.table.init(options); |
||||
|
}); |
||||
|
function submitHandler() { |
||||
|
|
||||
|
if ($.validate.form()) { |
||||
|
if ($('textarea[name="comment"]').val()) { |
||||
|
$('input[name="p_COM_comment"]').val($('textarea[name="comment"]').val()); |
||||
|
} |
||||
|
var taskId = [[${taskId}]]; |
||||
|
$.operate.save(prefix + "/complete/" + taskId, $('#form-empRequisition-scjl').serialize()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,151 @@ |
|||||
|
<!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" /> |
||||
|
<th:block th:include="include :: summernote-css" /> |
||||
|
</head> |
||||
|
<body class="white-bg"> |
||||
|
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> |
||||
|
<form class="form-horizontal m" id="form-empRequisition-sczg" th:object="${formData}"> |
||||
|
<input name="requisiteId" th:field="*{requisiteId}" type="hidden"> |
||||
|
<input name="taskId" th:field="*{taskId}" type="hidden"> |
||||
|
<input name="taskName" th:field="*{taskName}" type="hidden"> |
||||
|
<input name="instanceId" th:field="*{instanceId}" type="hidden"> |
||||
|
<input name="instanceType" th:field="*{instanceType}" type="hidden"> |
||||
|
<input type="hidden" name="p_COM_comment" /> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">领料单编号:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="requisitieCode" th:field="*{requisitieCode}" 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="correlationCode" th:field="*{correlationCode}" 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="remark" th:field="*{remark}" class="form-control" type="text"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label is-required" for="sczgVerifyApproved">审批意见:</label> |
||||
|
<div class="col-sm-6"> |
||||
|
<select name="p_B_sczgVerifyApproved" id="sczgVerifyApproved" class="form-control" required> |
||||
|
<option value=""></option> |
||||
|
<option value="true">同意</option> |
||||
|
<option value="false">拒绝</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-6 control-label">批注:</label> |
||||
|
<div class="col-sm-6"> |
||||
|
<textarea name="comment" class="form-control"></textarea> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
<div class="container"> |
||||
|
<div class="form-row"> |
||||
|
<div class="btn-group-sm" id="toolbar" role="group"> |
||||
|
<span>报价信息</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 select-table table-striped"> |
||||
|
<table id="bootstrap-sub-table-empRequisitionChild"></table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<th:block th:include="include :: footer" /> |
||||
|
<th:block th:include="include :: select2-js" /> |
||||
|
<th:block th:include="include :: bootstrap-table-editable-js" /> |
||||
|
<th:block th:include="include :: datetimepicker-js" /> |
||||
|
<th:block th:include="include :: summernote-js" /> |
||||
|
<script th:src="@{/js/activiti.js}"></script> |
||||
|
<script th:inline="javascript"> |
||||
|
var prefix = ctx + "system/empRequisiteOrder"; |
||||
|
var materialTypeDatas = [[${@category.getChildByCode('materialType')}]]; |
||||
|
var auditStatusDatas = [[${@dict.getType('auditStatus')}]]; |
||||
|
var sysUnitClassDatas = [[${@dict.getType('sys_unit_class')}]]; |
||||
|
var processMethodDatas = [[${@dict.getType('processMethod')}]]; |
||||
|
$("#form-empRequisition-sczg").validate({ |
||||
|
focusCleanup: true |
||||
|
}); |
||||
|
//获取子表信息 |
||||
|
$(function() { |
||||
|
var options = { |
||||
|
id:'bootstrap-sub-table-empRequisitionChild', |
||||
|
pagination: false, |
||||
|
sidePagination: "client", |
||||
|
model: "物料报价信息", |
||||
|
data: [[${formData.baseEmpRequisiteOrderChildList}]], |
||||
|
columns: [ |
||||
|
{checkbox: true}, |
||||
|
{field: 'index',align: 'center', title: "序号", |
||||
|
formatter: function (value, row, index) { |
||||
|
var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index)); |
||||
|
return columnIndex + $.table.serialNumber(index); |
||||
|
} |
||||
|
}, |
||||
|
{title: '物料索引id',field: 'materialId',align: 'center',visible: false}, |
||||
|
{title: '料号',field: 'materialCode',align: 'center'}, |
||||
|
{title: '物料名称',field: 'materialName',align: 'center'}, |
||||
|
{title: '图片',field: 'photoUrl', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.imageView(value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '物料类型',field: 'materialType',align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.selectCategoryLabel(materialTypeDatas, value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '型号',field: 'materialModel',align: 'center'}, |
||||
|
{title: '规格',field: 'specification',align: 'center'}, |
||||
|
{ title: '描述',field: 'describe',align: 'center'}, |
||||
|
{title: '品牌',field: 'brand',align: 'center'}, |
||||
|
{ title: '单位',field: 'unit',align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.selectDictLabel(sysUnitClassDatas, value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '半成品类型',field: 'processMethod',align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
return $.table.selectDictLabel(processMethodDatas, value); |
||||
|
} |
||||
|
}, |
||||
|
{title: '物料的数量', field: 'materialNum',align: 'center',editable: true,}, |
||||
|
{title: '物料的不含税单价(RMB)',field: 'materialNoRmb',align: 'center',}, |
||||
|
{title: '物料的含税单价(RMB)',field: 'materialRmb',align: 'center',}, |
||||
|
{title: '物料的含税总价(RMB)',field: 'materialNoRmbSum',align: 'center',}, |
||||
|
{title: '物料的不含税总价(RMB)',field: 'materialRmbSum',align: 'center',}, |
||||
|
{title: '录入人',field: 'createBy',align: 'center',visible: false}, |
||||
|
{title: '录入时间',field: 'createTime',align: 'center',visible: false }, |
||||
|
{title: '更新人',field: 'updateBy',align: 'center',visible: false}, |
||||
|
{title: '上次更新时间',field: 'updateTime',align: 'center',visible: false}, |
||||
|
{title: '备注',field: 'remark',align: 'center',editable: true}, |
||||
|
], |
||||
|
}; |
||||
|
console.log(options.data); |
||||
|
$.table.init(options); |
||||
|
}); |
||||
|
function submitHandler() { |
||||
|
|
||||
|
if ($.validate.form()) { |
||||
|
if ($('textarea[name="comment"]').val()) { |
||||
|
$('input[name="p_COM_comment"]').val($('textarea[name="comment"]').val()); |
||||
|
} |
||||
|
var taskId = [[${taskId}]]; |
||||
|
$.operate.save(prefix + "/complete/" + taskId, $('#form-empRequisition-sczg').serialize()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,283 @@ |
|||||
|
<!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-startAftersales-edit" th:object="${sysSalesOrder}"> |
||||
|
<input name="salesOrderId" th:field="*{salesOrderId}" type="hidden"> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">订单类型:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<select name="salesOrderType" class="form-control m-b" th:with="type=${@dict.getType('sys_order_type')}" disabled> |
||||
|
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{salesOrderType}"></option> |
||||
|
</select> |
||||
|
</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" readonly> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">客户ID:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="enterpriseCode" th:field="*{enterpriseCode}" class="form-control" type="text" readonly> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">客户名称:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="enterpriseName" th:field="*{enterpriseName}" class="form-control" type="text" readonly> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">收货联系人:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="customerDelivery" th:field="*{customerDelivery}" class="form-control" type="text" disabled> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">收货电话:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="deliveryPhone" th:field="*{deliveryPhone}" class="form-control" type="text" disabled> |
||||
|
</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" disabled> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="form-group"> |
||||
|
<label class="col-sm-3 control-label">备注:</label> |
||||
|
<div class="col-sm-8"> |
||||
|
<input name="remark" th:field="*{remark}" class="form-control" type="text"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
<!--物料信息--> |
||||
|
<div class="container"> |
||||
|
<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> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 select-table table-striped"> |
||||
|
<table id="bootstrap-table"></table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<th:block th:include="include :: footer" /> |
||||
|
<th:block th:include="include :: datetimepicker-js" /> |
||||
|
<!--用于可以修改列表字段的插件--> |
||||
|
<th:block th:include="include :: bootstrap-table-editable-js" /> |
||||
|
<script th:inline="javascript"> |
||||
|
|
||||
|
var sysSalesOrder = [[${sysSalesOrder}]]; |
||||
|
|
||||
|
var prefix = ctx + "sales/afterSalesNotice"; |
||||
|
$("#form-startAftersales-edit").validate({ |
||||
|
focusCleanup: true |
||||
|
}); |
||||
|
|
||||
|
// 新增提交 |
||||
|
function submitHandler() { |
||||
|
// 获取表单数据 |
||||
|
const salesOrderData = $("#form-startAftersales-edit").serializeArray().reduce((obj, item) => { |
||||
|
obj[item.name] = item.value; |
||||
|
return obj; |
||||
|
}, {}); |
||||
|
// 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据 |
||||
|
var table = $('#bootstrap-table').bootstrapTable('getData'); |
||||
|
|
||||
|
// 将表数据转换成与complaintNoticeData格式一致的数组 |
||||
|
var materialDataList = table.map(function(item) { |
||||
|
// 根据实际字段名调整 |
||||
|
return { |
||||
|
materialNo:item.materialNo, |
||||
|
materialPhotourl:item.materialPhotourl, |
||||
|
materialName: item.materialName, |
||||
|
materialType: item.materialType, |
||||
|
materialDescribe: item.materialDescribe, |
||||
|
materialBrand: item.materialBrand, |
||||
|
materialUnit: item.materialUnit, |
||||
|
materialProcessMethod: item.materialProcessMethod, |
||||
|
shippedGoodsSum: item.shippedGoodsSum, |
||||
|
snCode:item.snCode, |
||||
|
aftersalesProblem:item.aftersalesProblem, |
||||
|
emergencyDegree:item.emergencyDegree, |
||||
|
aftersalesReportUrl:item.aftersalesReportUrl, |
||||
|
// ...其他字段 |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
const combinedData = Object.assign({}, salesOrderData, { |
||||
|
selectAftersalesNoticeVOList: materialDataList, |
||||
|
}); |
||||
|
// 合并表单数据和表格数据 |
||||
|
console.log(combinedData) |
||||
|
// 使用 JSON.stringify() 序列化数据 |
||||
|
const jsonData = JSON.stringify(combinedData); |
||||
|
// 发送 AJAX 请求到后端接口 |
||||
|
$.operate.saveJson(prefix + "/startAftersales", jsonData); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*选择物料按钮*/ |
||||
|
function insertRow() { |
||||
|
var selectedSalesOrderCode = $("#salesOrderCode").val(); |
||||
|
var encodedSalesOrderCode = encodeURIComponent(selectedSalesOrderCode); |
||||
|
var url = ctx + 'system/salesOrder/startAftersalesMaterialSelect?salesOrderCode=' + encodedSalesOrderCode; |
||||
|
var options = { |
||||
|
title: '选择物料', |
||||
|
url: url, |
||||
|
callBack: doSubmit |
||||
|
}; |
||||
|
$.modal.openOptions(options); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
function doSubmit(index, layero,uniqueId){ |
||||
|
console.log(uniqueId); |
||||
|
var iframeWin = window[layero.find('iframe')[0]['name']]; |
||||
|
var rowData = iframeWin.$('#bootstrap-startAftersalesMaterialSelect-table').bootstrapTable('getSelections')[0]; |
||||
|
|
||||
|
//判断是否重复 |
||||
|
var rows = $("#bootstrap-table").bootstrapTable('getData').length; |
||||
|
for(var i=0;i<rows;i++){ |
||||
|
var data = $("#bootstrap-table").bootstrapTable('getData')[i]; |
||||
|
if(data.materialNo==rowData.materialNo){ |
||||
|
$.modal.alertError("不能选择已添加过的相同料号"); |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
console.log("rowData: "+rowData); |
||||
|
$("#bootstrap-table").bootstrapTable('insertRow', { |
||||
|
index:1, |
||||
|
row: { |
||||
|
materialNo:rowData.materialNo, |
||||
|
materialPhotourl:rowData.materialPhotourl, |
||||
|
materialName: rowData.materialName, |
||||
|
materialType: rowData.materialType, |
||||
|
materialDescribe: rowData.materialDescribe, |
||||
|
materialBrand: rowData.materialBrand, |
||||
|
materialUnit: rowData.materialUnit, |
||||
|
materialProcessMethod: rowData.materialProcessMethod, |
||||
|
shippedGoodsSum: rowData.shippedGoodsSum, |
||||
|
snCode:"", |
||||
|
aftersalesProblem:"", |
||||
|
emergencyDegree:"", |
||||
|
aftersalesReportUrl:"", |
||||
|
} |
||||
|
}) |
||||
|
layer.close(index); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
//物料信息展示列表 |
||||
|
$(function() { |
||||
|
var options = { |
||||
|
modalName: "选择物料", |
||||
|
queryParams: queryParams, |
||||
|
showSearch: false, |
||||
|
showRefresh: false, |
||||
|
showToggle: false, |
||||
|
showColumns: false, |
||||
|
pagination: false, // 设置不分页 |
||||
|
columns: [{ |
||||
|
checkbox: true |
||||
|
}, |
||||
|
{ |
||||
|
title: '料号', |
||||
|
field: 'materialNo', |
||||
|
}, |
||||
|
{ |
||||
|
title: '图片', |
||||
|
field: 'materialPhotourl', |
||||
|
}, |
||||
|
{ |
||||
|
title: '物料名称', |
||||
|
field: 'materialName', |
||||
|
}, |
||||
|
{ |
||||
|
title: '物料类型', |
||||
|
field: 'materialType', |
||||
|
}, |
||||
|
{ |
||||
|
title: '单位', |
||||
|
field: 'materialUnit', |
||||
|
}, |
||||
|
{ |
||||
|
title: '品牌', |
||||
|
field: 'materialBrand', |
||||
|
}, |
||||
|
{ |
||||
|
title: '描述', |
||||
|
field: 'materialDescribe', |
||||
|
}, |
||||
|
{ |
||||
|
title: '已出库数量', |
||||
|
field: 'shippedGoodsSum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '设备SN', |
||||
|
field: 'snCode', |
||||
|
editable: { |
||||
|
type: 'text', // 表示该列可以被编辑为文本 |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
title: '售后问题', |
||||
|
field: 'aftersalesProblem', |
||||
|
editable: { |
||||
|
type: 'text', |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
title: '紧急程度', |
||||
|
field: 'emergencyDegree', |
||||
|
editable: { |
||||
|
type: 'select', |
||||
|
title: '紧急程度', |
||||
|
source:[{value:"0",text:"一般"},{value:"1",text:"紧急"}] |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
{ |
||||
|
title: '操作', |
||||
|
align: 'center', |
||||
|
formatter: function(value, row, index) { |
||||
|
var actions = []; |
||||
|
actions.push('<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="removeRow(\'' + row.materialNo + '\')"><i class="fa fa-remove"></i>删除</a> '); |
||||
|
return actions.join(''); |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
}; |
||||
|
$.table.init(options); |
||||
|
}) |
||||
|
|
||||
|
function queryParams(params) { |
||||
|
var curParams = { |
||||
|
// 传递参数查询参数 |
||||
|
salesOrderCode: sysSalesOrder.salesOrderCode |
||||
|
}; |
||||
|
return curParams; |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,86 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org"> |
||||
|
<head> |
||||
|
<th:block th:include="include :: header('发起售后选择物料信息列表')" /> |
||||
|
</head> |
||||
|
<body class="gray-bg"> |
||||
|
<div class="container-div"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 select-table table-striped"> |
||||
|
<table id="bootstrap-startAftersalesMaterialSelect-table"></table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<th:block th:include="include :: footer" /> |
||||
|
<script th:inline="javascript"> |
||||
|
var prefix = ctx + "sales/afterSalesNotice"; |
||||
|
// 从后端拿到传入的makeNo |
||||
|
var salesOrderCode = /*[[${salesOrderCode}]]*/ ''; |
||||
|
$(function() { |
||||
|
var options = { |
||||
|
id: 'bootstrap-startAftersalesMaterialSelect-table', |
||||
|
clickToSelect: true, // 点击选中行 |
||||
|
singleSelect: true, // 单选 |
||||
|
showSearch: false, |
||||
|
showRefresh: false, |
||||
|
showToggle: false, |
||||
|
showColumns: false, |
||||
|
pagination: false, // 设置不分页 |
||||
|
url: prefix + "/getMaterialInfoBySalesOrderCode", |
||||
|
queryParams:queryParams, |
||||
|
modalName: "物料信息", |
||||
|
columns: [{ |
||||
|
checkbox: true |
||||
|
}, |
||||
|
{ |
||||
|
title: '料号', |
||||
|
field: 'materialNo', |
||||
|
}, |
||||
|
{ |
||||
|
title: '图片', |
||||
|
field: 'materialPhotourl', |
||||
|
}, |
||||
|
{ |
||||
|
title: '物料名称', |
||||
|
field: 'materialName', |
||||
|
}, |
||||
|
{ |
||||
|
title: '类型', |
||||
|
field: 'materialType', |
||||
|
}, |
||||
|
{ |
||||
|
title: '描述', |
||||
|
field: 'materialDescribe', |
||||
|
}, |
||||
|
{ |
||||
|
title: '品牌', |
||||
|
field: 'materialBrand', |
||||
|
}, |
||||
|
{ |
||||
|
title: '单位', |
||||
|
field: 'materialUnit', |
||||
|
}, |
||||
|
{ |
||||
|
title: '半成品类型', |
||||
|
field: 'materialProcessMethod', |
||||
|
}, |
||||
|
{ |
||||
|
title: '已出库数量', |
||||
|
field: 'shippedGoodsSum' |
||||
|
} |
||||
|
] |
||||
|
}; |
||||
|
$.table.init(options); |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
function queryParams(params) { |
||||
|
var curParams = { |
||||
|
// 现在使用从Thymeleaf传过来的makeNo |
||||
|
salesOrderCode: salesOrderCode |
||||
|
}; |
||||
|
return curParams; |
||||
|
} |
||||
|
</script> |
||||
|
</body> |
||||
|
</html> |
Loading…
Reference in new issue