Browse Source

Merge remote-tracking branch 'origin/dev' into dev

dev
zhangsiqi 7 months ago
parent
commit
61ad141e13
  1. 8
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOrderController.java
  2. 4
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAfterSalesShippingDeviceService.java
  3. 7
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOrderService.java
  4. 31
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AfterSalesShippingDeviceServiceImpl.java
  5. 80
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOrderServiceImpl.java
  6. 29
      ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAftersalesNoticeController.java
  7. 16
      ruoyi-admin/src/main/java/com/ruoyi/sales/domain/SalesAftersalesNotice.java
  8. 5
      ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeDetailMapper.java
  9. 6
      ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeMapper.java
  10. 5
      ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeDetailService.java
  11. 3
      ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeService.java
  12. 16
      ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeDetailServiceImpl.java
  13. 63
      ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeServiceImpl.java
  14. 1
      ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesOrderMapper.xml
  15. 7
      ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeDetailMapper.xml
  16. 45
      ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeMapper.xml
  17. 21
      ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/aftersalesOrder.html
  18. 73
      ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/detail.html
  19. 45
      ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/sendOrders.html
  20. 42
      ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/uploadReport.html
  21. 4
      ruoyi-admin/src/main/resources/templates/erp/material/add.html
  22. 58
      ruoyi-admin/src/main/resources/templates/erp/material/material.html
  23. 157
      ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/taskYwjlVerify.html
  24. 150
      ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/taskYwzgVerify.html
  25. 12
      ruoyi-admin/src/main/resources/templates/system/salesOrder/startAftersales.html

8
ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOrderController.java

@ -6,6 +6,7 @@ import com.ruoyi.aftersales.domain.vo.SelectDeviceVO;
import com.ruoyi.aftersales.service.IAfterSalesShippingDeviceService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail;
import com.ruoyi.system.service.ISysUserService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
@ -195,20 +196,19 @@ public class AftersalesOrderController extends BaseController
@ResponseBody
public AjaxResult uploadReportSave(AftersalesOrder aftersalesOrder)
{
return toAjax(aftersalesOrderService.updateAftersalesOrder(aftersalesOrder));
return toAjax(aftersalesOrderService.updateUploadReport(aftersalesOrder));
}
/**
* 查询选择设备列表
* 查询售后通知单详情选择设备列表
*/
@PostMapping("/optionDevices")
@ResponseBody
public TableDataInfo optionDevices(AftersalesOrder aftersalesOrder)
{
startPage();
List<SelectDeviceVO> list = afterSalesShippingDeviceService.selectOptionDevices(aftersalesOrder.getMakeNo());
List<SalesAftersalesNoticeDetail> list = afterSalesShippingDeviceService.selectOptionDevices(aftersalesOrder.getAftersalesOrderCode());
return getDataTable(list);
}

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

@ -7,6 +7,8 @@ import com.ruoyi.aftersales.domain.dto.AfterSalesMakeOrderDto;
import com.ruoyi.aftersales.domain.dto.AfterSalesShippingDeviceEditDto;
import com.ruoyi.aftersales.domain.dto.WarehouseAndAfterSalesDto;
import com.ruoyi.aftersales.domain.vo.SelectDeviceVO;
import com.ruoyi.sales.domain.SalesAftersalesNotice;
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail;
import com.ruoyi.system.dto.SysEquipDetailDto;
/**
@ -93,7 +95,7 @@ public interface IAfterSalesShippingDeviceService
* @param makeNo 生产单号
* @return
*/
List<SelectDeviceVO> selectOptionDevices(String makeNo);
List<SalesAftersalesNoticeDetail> selectOptionDevices(String aftersalesOrderCode);
/*

7
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOrderService.java

@ -33,7 +33,7 @@ public interface IAftersalesOrderService
/**
* 查询售后单列表
*
* @param aftersalesOrderVO 售后单
* @param aftersalesOrder 售后单
* @return 售后单集合
*/
public List<AftersalesOrder> selectAftersalesOrderList(AftersalesOrder aftersalesOrder);
@ -88,4 +88,9 @@ public interface IAftersalesOrderService
* 销售售后通知单 审核后生成售后单
* */
void generateAftersalesOrderBySalesAftersalesNotice(SalesAftersalesNoticeVO tempSalesAftersalesNoticeVO);
/**
* 修改保存售后报告
*/
int updateUploadReport(AftersalesOrder aftersalesOrder);
}

31
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AfterSalesShippingDeviceServiceImpl.java

@ -13,6 +13,9 @@ import com.ruoyi.aftersales.mapper.AftersalesComplaintNoticeMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.sales.domain.SalesAftersalesNotice;
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail;
import com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper;
import com.ruoyi.system.dto.SysEquipDetailDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -38,6 +41,9 @@ public class AfterSalesShippingDeviceServiceImpl implements IAfterSalesShippingD
@Autowired
private AftersalesComplaintNoticeMapper aftersalesComplaintNoticeMapper;
@Autowired
private SalesAftersalesNoticeDetailMapper aftersalesNoticeDetailMapper;
/**
* 查询出货设备
*
@ -197,28 +203,9 @@ public class AfterSalesShippingDeviceServiceImpl implements IAfterSalesShippingD
* 查询选择设备列表
* */
@Override
public List<SelectDeviceVO> selectOptionDevices(String makeNo) {
List<SelectDeviceVO> selectDeviceVos = new ArrayList<>();
SelectDeviceVO selectDeviceVo = new SelectDeviceVO();
AfterSalesShippingDevice afterSalesShippingDevice = afterSalesShippingDeviceMapper.selectShippingDeviceByMakeNo(makeNo);
if (StringUtils.isNotNull(afterSalesShippingDevice)){
selectDeviceVo.setMaterialNo(afterSalesShippingDevice.getMaterialNo());
selectDeviceVo.setMaterialPhotourl(afterSalesShippingDevice.getMaterialPhotourl());
selectDeviceVo.setMaterialName(afterSalesShippingDevice.getMaterialName());
selectDeviceVo.setMaterialType(afterSalesShippingDevice.getMaterialType());
selectDeviceVo.setMaterialUnit(afterSalesShippingDevice.getMaterialUnit());
selectDeviceVo.setMaterialBrand(afterSalesShippingDevice.getMaterialBrand());
selectDeviceVo.setMaterialDescribe(afterSalesShippingDevice.getMaterialDescribe());
selectDeviceVo.setSnCode(afterSalesShippingDevice.getSnCode());
}
AftersalesComplaintNotice aftersalesComplaintNotice = aftersalesComplaintNoticeMapper.selectComplaintNoticeByMakeNo(makeNo);
if (StringUtils.isNotNull(aftersalesComplaintNotice)){
selectDeviceVo.setComplaintProblem(aftersalesComplaintNotice.getRemark());
}
selectDeviceVos.add(selectDeviceVo);
return selectDeviceVos;
public List<SalesAftersalesNoticeDetail> selectOptionDevices(String aftersalesOrderCode) {
List<SalesAftersalesNoticeDetail> salesAftersalesNoticeDetails = aftersalesNoticeDetailMapper.selectSalesAftersalesNoticeDetailListByCode(aftersalesOrderCode);
return salesAftersalesNoticeDetails;
}
/*

80
ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOrderServiceImpl.java

@ -3,12 +3,16 @@ package com.ruoyi.aftersales.service.impl;
import java.util.*;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper;
import com.ruoyi.sales.domain.SalesAftersalesNotice;
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail;
import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO;
import com.ruoyi.sales.mapper.SalesAftersalesNoticeMapper;
import com.ruoyi.system.domain.SysAttach;
import com.ruoyi.system.domain.SysMakeOrder;
import com.ruoyi.system.mapper.SysAttachMapper;
@ -49,6 +53,9 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService
@Autowired
private SysMakeOrderMapper sysMakeOrderMapper;
@Autowired
private SalesAftersalesNoticeMapper salesAftersalesNoticeMapper;
/**
* 查询售后单
*
@ -111,7 +118,7 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService
* @param aftersalesOrder 售后单
* @return 结果
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
@Override
public int updateAftersalesOrder(AftersalesOrder aftersalesOrder)
{
@ -150,6 +157,17 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService
List<String> fileIdList = Arrays.asList(fileIdStr.split(","));
attachFileService.updateAttachIdByIdList(attachId,fileIdList);
}
//更新销售售后通知单的售后状态
SalesAftersalesNotice salesAftersalesNotice = new SalesAftersalesNotice();
salesAftersalesNotice.setAftersalesStatus("1");
salesAftersalesNotice.setAftersalesNoticeCode(aftersalesOrder.getAftersalesOrderCode());
salesAftersalesNotice.setStartTime(aftersalesOrder.getStartDate());
int updateNoticeResult = salesAftersalesNoticeMapper.updateSalesAftersalesNoticeByCode(salesAftersalesNotice);
if (updateNoticeResult <= 0){
throw new BusinessException("更新售后通知单数据失败");
}
//设置售后状态为售后中
aftersalesOrder.setAftersalesStatus("1");
return aftersalesOrderMapper.updateAftersalesOrder(aftersalesOrder);
}
@ -235,4 +253,64 @@ public class AftersalesOrderServiceImpl implements IAftersalesOrderService
aftersalesOrderMapper.insertAftersalesOrder(aftersalesOrder);
}
/**
* 修改保存售后报告
*
* @param aftersalesOrder 售后单
* @return 结果
*/
@Transactional(rollbackFor = Exception.class)
@Override
public int updateUploadReport(AftersalesOrder aftersalesOrder) {
String loginName = ShiroUtils.getLoginName();
aftersalesOrder.setUpdateBy(loginName);
aftersalesOrder.setUpdateTime(DateUtils.getNowDate());
Long aftersalesOrderId = aftersalesOrder.getAftersalesOrderId();
String fileIdStr = aftersalesOrder.getFileIdStr();
Long attachId = null;
if (StringUtils.isNotEmpty(fileIdStr)){
SysAttach tempSysAttach = new SysAttach();
tempSysAttach.setSourceType("aftersalesOrder");
tempSysAttach.setSourceSubType("photo");
tempSysAttach.setRelId(aftersalesOrderId);
List<SysAttach> sysAttaches = attachService.selectSysAttachList(tempSysAttach);
if (StringUtils.isEmpty(sysAttaches)){
// 保存新的文件附件关联
SysAttach newSysAttach = new SysAttach();
newSysAttach.setCreateBy(loginName);
newSysAttach.setCreateTime(new Date());
newSysAttach.setSourceType("aftersalesOrder");
newSysAttach.setSourceSubType("photo");
newSysAttach.setRelId(aftersalesOrderId);
attachService.insertSysAttach(newSysAttach);
// 假设insert后可以通过某种方式(如返回值)获取到新生成的ID,这里需要根据实际情况调整
attachId = newSysAttach.getId(); // 确保这里能正确获取到ID
}else {
// 更新已存在的附件信息
SysAttach sysAttachToUpdate = sysAttaches.get(0); // 假设只有一条记录,或按需处理多条
sysAttachToUpdate.setUpdateBy(loginName);
sysAttachToUpdate.setUpdateTime(new Date());
attachService.updateSysAttach(sysAttachToUpdate); // 假定有一个通用的更新方法
attachId = sysAttachToUpdate.getId();
}
//更新附件与文件关联
List<String> fileIdList = Arrays.asList(fileIdStr.split(","));
attachFileService.updateAttachIdByIdList(attachId,fileIdList);
}
//更新销售售后通知单的售后状态
SalesAftersalesNotice salesAftersalesNotice = new SalesAftersalesNotice();
salesAftersalesNotice.setAftersalesStatus("2");
salesAftersalesNotice.setAftersalesNoticeCode(aftersalesOrder.getAftersalesOrderCode());
salesAftersalesNotice.setStartTime(aftersalesOrder.getStartDate());
int updateNoticeResult = salesAftersalesNoticeMapper.updateSalesAftersalesNoticeByCode(salesAftersalesNotice);
if (updateNoticeResult <= 0){
throw new BusinessException("更新售后通知单数据失败");
}
//设置售后状态为售后中
aftersalesOrder.setAftersalesStatus("2");
return aftersalesOrderMapper.updateAftersalesOrder(aftersalesOrder);
}
}

29
ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAftersalesNoticeController.java

@ -6,7 +6,9 @@ import java.util.List;
import com.ruoyi.aftersales.service.IAftersalesOrderService;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.quality.domain.VO.CheckoutMaterialVO;
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail;
import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO;
import com.ruoyi.sales.service.ISalesAftersalesNoticeDetailService;
import com.ruoyi.system.domain.SysSalesOrder;
import com.ruoyi.system.domain.Vo.SelectAftersalesNoticeVO;
import com.ruoyi.system.service.ISysSalesOrderService;
@ -31,6 +33,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.bind.annotation.W3CDomHandler;
/**
* 售后通知单Controller
@ -62,6 +65,8 @@ public class SalesAftersalesNoticeController extends BaseController
@Autowired
private ISysSalesOrderService sysSalesOrderService;
@Autowired
private ISalesAftersalesNoticeDetailService noticeDetailService;
@RequiresPermissions("sales:afterSalesNotice:view")
@GetMapping()
@ -115,9 +120,9 @@ public class SalesAftersalesNoticeController extends BaseController
@ResponseBody
public AjaxResult addSave(SalesAftersalesNotice salesAftersalesNotice)
{
// 审核状态-待审核
salesAftersalesNotice.setAuditStatus("0");
salesAftersalesNoticeService.submitApply(salesAftersalesNotice);
// // 审核状态-待审核
// salesAftersalesNotice.setAuditStatus("0");
// salesAftersalesNoticeService.submitApply(salesAftersalesNotice);
return AjaxResult.success();
}
@ -131,7 +136,7 @@ public class SalesAftersalesNoticeController extends BaseController
@ResponseBody
public AjaxResult startAftersalesSave(@RequestBody SysSalesOrder sysSalesOrder)
{
salesAftersalesNoticeService.submitApply(sysSalesOrder);
return AjaxResult.success();
}
@ -239,6 +244,18 @@ public class SalesAftersalesNoticeController extends BaseController
/**
* 根据售后通知单号查询售后通知单详情数据
* */
@ResponseBody
@PostMapping("/getAfterSalesNoticeDetailList")
public TableDataInfo getAfterSalesNoticeDetailList(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail){
startPage();
List<SalesAftersalesNoticeDetail> list = noticeDetailService.selectAfterSalesNoticeDetailList(salesAftersalesNoticeDetail);
return getDataTable(list);
}
/**
* 修改售后通知单
*/
@ -298,4 +315,8 @@ public class SalesAftersalesNoticeController extends BaseController
}
}

16
ruoyi-admin/src/main/java/com/ruoyi/sales/domain/SalesAftersalesNotice.java

@ -28,6 +28,11 @@ public class SalesAftersalesNotice extends BaseEntity
@Excel(name = "关联销售订单编号")
private String salesOrderCode;
/** 关联生产订单号 */
@Excel(name = "关联生产订单号")
private String makeNo;
/** 用户ID */
@Excel(name = "用户ID")
private Long userId;
@ -65,6 +70,7 @@ public class SalesAftersalesNotice extends BaseEntity
private String enterpriseSum;
/** 客户要求出发日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "客户要求出发日期")
private Date startTime;
@ -140,6 +146,15 @@ public class SalesAftersalesNotice extends BaseEntity
{
return salesOrderCode;
}
public String getMakeNo() {
return makeNo;
}
public void setMakeNo(String makeNo) {
this.makeNo = makeNo;
}
public void setUserId(Long userId)
{
this.userId = userId;
@ -336,6 +351,7 @@ public class SalesAftersalesNotice extends BaseEntity
.append("aftersalesNoticeId", getAftersalesNoticeId())
.append("aftersalesNoticeCode", getAftersalesNoticeCode())
.append("salesOrderCode", getSalesOrderCode())
.append("makeNo", getMakeNo())
.append("userId", getUserId())
.append("auditStatus", getAuditStatus())
.append("aftersalesStatus", getAftersalesStatus())

5
ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeDetailMapper.java

@ -74,4 +74,9 @@ public interface SalesAftersalesNoticeDetailMapper
* @return 结果
*/
public int restoreSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId);
/**
* 根据售后通知单号查询售后通知单详情数据
* */
List<SalesAftersalesNoticeDetail> selectSalesAftersalesNoticeDetailListByCode(String aftersalesNoticeCode);
}

6
ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAftersalesNoticeMapper.java

@ -80,4 +80,10 @@ public interface SalesAftersalesNoticeMapper
* 根据售后单号查询销售售后通知单
* */
SalesAftersalesNoticeVO selectSalesAftersalesNoticeByCode(String aftersalesNoticeCode);
/**
* 根据售后单号更新销售售后通知单数据
* */
int updateSalesAftersalesNoticeByCode(SalesAftersalesNotice salesAftersalesNotice);
}

5
ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeDetailService.java

@ -72,4 +72,9 @@ public interface ISalesAftersalesNoticeDetailService
* @return
*/
int restoreSalesAftersalesNoticeDetailById(Long aftersalesNoticeDetailId);
/**
* 根据售后通知单号查询售后通知单详情数据
* */
List<SalesAftersalesNoticeDetail> selectAfterSalesNoticeDetailList(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail);
}

3
ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAftersalesNoticeService.java

@ -5,6 +5,7 @@ import java.util.List;
import com.ruoyi.aftersales.domain.AftersalesOrder;
import com.ruoyi.sales.domain.SalesAftersalesNotice;
import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO;
import com.ruoyi.system.domain.SysSalesOrder;
import com.ruoyi.system.domain.Vo.SelectAftersalesNoticeVO;
import org.activiti.engine.runtime.ProcessInstance;
@ -83,7 +84,7 @@ public interface ISalesAftersalesNoticeService
/**
* 审批流程启动
* */
ProcessInstance submitApply(SalesAftersalesNotice salesAftersalesNotice);
ProcessInstance submitApply(SysSalesOrder sysSalesOrder);
/**
* 根据售后单号查询销售售后通知单

16
ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeDetailServiceImpl.java

@ -3,6 +3,8 @@ package com.ruoyi.sales.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper;
@ -16,6 +18,7 @@ import com.ruoyi.common.core.text.Convert;
* @author 刘晓旭
* @date 2024-07-22
*/
@Slf4j
@Service
public class SalesAftersalesNoticeDetailServiceImpl implements ISalesAftersalesNoticeDetailService
{
@ -123,4 +126,17 @@ public class SalesAftersalesNoticeDetailServiceImpl implements ISalesAftersalesN
{
return salesAftersalesNoticeDetailMapper.restoreSalesAftersalesNoticeDetailById(aftersalesNoticeDetailId);
}
/**
* 根据售后通知单号查询售后通知单详情数据
* */
@Override
public List<SalesAftersalesNoticeDetail> selectAfterSalesNoticeDetailList(SalesAftersalesNoticeDetail salesAftersalesNoticeDetail) {
String aftersalesNoticeCode = salesAftersalesNoticeDetail.getAftersalesNoticeCode();
if (StringUtils.isEmpty(aftersalesNoticeCode)){
log.warn("与售后通知单详情关联的售后通知单号为空:{}",aftersalesNoticeCode);
}
return salesAftersalesNoticeDetailMapper.selectSalesAftersalesNoticeDetailListByCode(aftersalesNoticeCode);
}
}

63
ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAftersalesNoticeServiceImpl.java

@ -12,9 +12,14 @@ import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper;
import com.ruoyi.sales.domain.SalesAftersalesNoticeDetail;
import com.ruoyi.sales.domain.VO.SalesAftersalesNoticeVO;
import com.ruoyi.sales.mapper.SalesAftersalesNoticeDetailMapper;
import com.ruoyi.system.domain.SysMakeOrder;
import com.ruoyi.system.domain.SysSalesOrder;
import com.ruoyi.system.domain.SysSalesOrderChild;
import com.ruoyi.system.domain.Vo.SelectAftersalesNoticeVO;
import com.ruoyi.system.mapper.SysMakeOrderMapper;
import com.ruoyi.system.mapper.SysSalesOrderChildMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysRoleService;
@ -67,6 +72,12 @@ public class SalesAftersalesNoticeServiceImpl implements ISalesAftersalesNoticeS
@Autowired
private SysSalesOrderChildMapper sysSalesOrderChildMapper;
@Autowired
private SalesAftersalesNoticeDetailMapper aftersalesNoticeDetailMapper;
@Autowired
private SysMakeOrderMapper sysMakeOrderMapper;
/**
* 查询售后通知单
*
@ -222,15 +233,38 @@ public class SalesAftersalesNoticeServiceImpl implements ISalesAftersalesNoticeS
@Transactional(rollbackFor = Exception.class)
@Override
public ProcessInstance submitApply(SalesAftersalesNotice salesAftersalesNotice) {
public ProcessInstance submitApply(SysSalesOrder sysSalesOrder) {
SysUser user = ShiroUtils.getSysUser();
String loginName = ShiroUtils.getLoginName();
SysMakeOrder sysMakeOrder = sysMakeOrderMapper.selectMakeOrderBySaleNo(sysSalesOrder.getSalesOrderCode());
SalesAftersalesNotice salesAftersalesNotice = new SalesAftersalesNotice();
// 审核状态-待审核
salesAftersalesNotice.setAuditStatus("0");
//待派单
salesAftersalesNotice.setAftersalesStatus("0");
String aftersalesNoticeCode = redisCache.generateBillNo("SH");
salesAftersalesNotice.setApplyUser(user.getLoginName());
salesAftersalesNotice.setApplyTime(DateUtils.getNowDate());
salesAftersalesNotice.setAftersalesNoticeCode(redisCache.generateBillNo("SH"));
salesAftersalesNotice.setAftersalesNoticeCode(aftersalesNoticeCode);
salesAftersalesNotice.setMakeNo(sysMakeOrder.getMakeNo());
salesAftersalesNotice.setSalesOrderCode(sysSalesOrder.getSalesOrderCode());
salesAftersalesNotice.setEnterpriseCode(sysSalesOrder.getEnterpriseCode());
salesAftersalesNotice.setEnterpriseName(sysSalesOrder.getEnterpriseName());
salesAftersalesNotice.setCompanyAddress(sysSalesOrder.getDeliveryAddress());
salesAftersalesNotice.setCustomerContact(sysSalesOrder.getCustomerContact());
salesAftersalesNotice.setContactNumber(sysSalesOrder.getContactNumber());
salesAftersalesNotice.setRemark(sysSalesOrder.getRemark());
salesAftersalesNotice.setCreateBy(loginName);
salesAftersalesNotice.setCreateTime(new Date());
// 保存
insertSalesAftersalesNotice(salesAftersalesNotice);
List<SelectAftersalesNoticeVO> selectAftersalesNoticeVOList = sysSalesOrder.getSelectAftersalesNoticeVOList();
//插入售后通知单子表数据
insertAftersalesNoticeDetailByList(loginName, aftersalesNoticeCode, selectAftersalesNoticeVOList);
// 启动流程
String applyTitle = user.getUserName()+"发起了售后单提交审批-"+DateUtils.dateTimeNow();
String instanceType = "submit";
@ -248,6 +282,27 @@ public class SalesAftersalesNoticeServiceImpl implements ISalesAftersalesNoticeS
return processInstance;
}
private void insertAftersalesNoticeDetailByList(String loginName, String aftersalesNoticeCode, List<SelectAftersalesNoticeVO> selectAftersalesNoticeVOList) {
for (SelectAftersalesNoticeVO selectAftersalesNoticeVO : selectAftersalesNoticeVOList) {
SalesAftersalesNoticeDetail salesAftersalesNoticeDetail = new SalesAftersalesNoticeDetail();
salesAftersalesNoticeDetail.setAftersalesNoticeCode(aftersalesNoticeCode);
salesAftersalesNoticeDetail.setMaterialNo(selectAftersalesNoticeVO.getMaterialNo());
salesAftersalesNoticeDetail.setMaterialBrand(selectAftersalesNoticeVO.getMaterialBrand());
salesAftersalesNoticeDetail.setMaterialName(selectAftersalesNoticeVO.getMaterialName());
salesAftersalesNoticeDetail.setMaterialType(selectAftersalesNoticeVO.getMaterialType());
salesAftersalesNoticeDetail.setMaterialUnit(selectAftersalesNoticeVO.getMaterialUnit());
salesAftersalesNoticeDetail.setMaterialProcessMethod(selectAftersalesNoticeVO.getMaterialProcessMethod());
salesAftersalesNoticeDetail.setMaterialDescribe(selectAftersalesNoticeVO.getMaterialDescribe());
salesAftersalesNoticeDetail.setShippedGoodsSum(selectAftersalesNoticeVO.getShippedGoodsSum());
salesAftersalesNoticeDetail.setSnCode(selectAftersalesNoticeVO.getSnCode());
salesAftersalesNoticeDetail.setAftersalesProblem(selectAftersalesNoticeVO.getAftersalesProblem());
salesAftersalesNoticeDetail.setEmergencyDegree(selectAftersalesNoticeVO.getEmergencyDegree());
salesAftersalesNoticeDetail.setCreateBy(loginName);
salesAftersalesNoticeDetail.setCreateTime(new Date());
aftersalesNoticeDetailMapper.insertSalesAftersalesNoticeDetail(salesAftersalesNoticeDetail);
}
}
/**
* 根据售后单号查询销售售后通知单
* */

1
ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesOrderMapper.xml

@ -56,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="aftersalesName != null and aftersalesName != ''"> and aftersales_name like concat('%', #{aftersalesName}, '%')</if>
<if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
</where>
order by create_time desc
</select>
<select id="selectAftersalesOrderById" parameterType="Long" resultMap="AftersalesOrderResult">

7
ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeDetailMapper.xml

@ -48,6 +48,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where aftersales_notice_detail_id = #{aftersalesNoticeDetailId}
</select>
<select id="selectSalesAftersalesNoticeDetailListByCode" parameterType="String" resultMap="SalesAftersalesNoticeDetailResult">
<include refid="selectSalesAftersalesNoticeDetailVo"/>
where aftersales_notice_code = #{aftersalesNoticeCode}
</select>
<insert id="insertSalesAftersalesNoticeDetail" parameterType="SalesAftersalesNoticeDetail" useGeneratedKeys="true" keyProperty="aftersalesNoticeDetailId">
insert into sales_aftersales_notice_detail
<trim prefix="(" suffix=")" suffixOverrides=",">

45
ruoyi-admin/src/main/resources/mapper/sales/SalesAftersalesNoticeMapper.xml

@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="aftersalesNoticeId" column="aftersales_notice_id" />
<result property="aftersalesNoticeCode" column="aftersales_notice_code" />
<result property="salesOrderCode" column="sales_order_code" />
<result property="makeNo" column="make_no" />
<result property="userId" column="user_id" />
<result property="auditStatus" column="audit_status" />
<result property="aftersalesStatus" column="aftersales_status" />
@ -38,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectSalesAftersalesNoticeVo">
select aftersales_notice_id, aftersales_notice_code, sales_order_code, user_id, audit_status, aftersales_status, business_members, aftersales_members, enterprise_code, enterprise_name, material_sum, enterprise_sum, start_time, customer_contact, contact_number, company_address, create_by, create_time, update_by, update_time, instance_id, instance_type, submit_instance_id, apply_title, apply_time, apply_user, cancel_instance_id, restore_instance_id, remark from sales_aftersales_notice
select aftersales_notice_id, aftersales_notice_code, sales_order_code, make_no, user_id, audit_status, aftersales_status, business_members, aftersales_members, enterprise_code, enterprise_name, material_sum, enterprise_sum, start_time, customer_contact, contact_number, company_address, create_by, create_time, update_by, update_time, instance_id, instance_type, submit_instance_id, apply_title, apply_time, apply_user, cancel_instance_id, restore_instance_id, remark from sales_aftersales_notice
</sql>
<select id="selectSalesAftersalesNoticeList" parameterType="SalesAftersalesNoticeVO" resultMap="SalesAftersalesNoticeResult">
@ -55,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="enterpriseName != null and enterpriseName != ''"> and enterprise_name like concat('%', #{enterpriseName}, '%')</if>
<if test="params.beginUpdateTime != null and params.beginUpdateTime != '' and params.endUpdateTime != null and params.endUpdateTime != ''"> and update_time between #{params.beginUpdateTime} and #{params.endUpdateTime}</if>
</where>
order by create_time desc
</select>
<select id="selectSalesAftersalesNoticeById" parameterType="Long" resultMap="SalesAftersalesNoticeResult">
@ -73,6 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="aftersalesNoticeCode != null">aftersales_notice_code,</if>
<if test="salesOrderCode != null">sales_order_code,</if>
<if test="makeNo != null">make_no,</if>
<if test="userId != null">user_id,</if>
<if test="auditStatus != null">audit_status,</if>
<if test="aftersalesStatus != null">aftersales_status,</if>
@ -103,6 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="aftersalesNoticeCode != null">#{aftersalesNoticeCode},</if>
<if test="salesOrderCode != null">#{salesOrderCode},</if>
<if test="makeNo != null">#{makeNo},</if>
<if test="userId != null">#{userId},</if>
<if test="auditStatus != null">#{auditStatus},</if>
<if test="aftersalesStatus != null">#{aftersalesStatus},</if>
@ -137,6 +141,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="SET" suffixOverrides=",">
<if test="aftersalesNoticeCode != null">aftersales_notice_code = #{aftersalesNoticeCode},</if>
<if test="salesOrderCode != null">sales_order_code = #{salesOrderCode},</if>
<if test="makeNo != null">make_no = #{makeNo},</if>
<if test="userId != null">user_id = #{userId},</if>
<if test="auditStatus != null">audit_status = #{auditStatus},</if>
<if test="aftersalesStatus != null">aftersales_status = #{aftersalesStatus},</if>
@ -167,6 +172,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where aftersales_notice_id = #{aftersalesNoticeId}
</update>
<update id="updateSalesAftersalesNoticeByCode" parameterType="SalesAftersalesNoticeVO">
update sales_aftersales_notice
<trim prefix="SET" suffixOverrides=",">
<if test="aftersalesNoticeCode != null">aftersales_notice_code = #{aftersalesNoticeCode},</if>
<if test="salesOrderCode != null">sales_order_code = #{salesOrderCode},</if>
<if test="makeNo != null">make_no = #{makeNo},</if>
<if test="userId != null">user_id = #{userId},</if>
<if test="auditStatus != null">audit_status = #{auditStatus},</if>
<if test="aftersalesStatus != null">aftersales_status = #{aftersalesStatus},</if>
<if test="businessMembers != null">business_members = #{businessMembers},</if>
<if test="aftersalesMembers != null">aftersales_members = #{aftersalesMembers},</if>
<if test="enterpriseCode != null">enterprise_code = #{enterpriseCode},</if>
<if test="enterpriseName != null">enterprise_name = #{enterpriseName},</if>
<if test="materialSum != null">material_sum = #{materialSum},</if>
<if test="enterpriseSum != null">enterprise_sum = #{enterpriseSum},</if>
<if test="startTime != null">start_time = #{startTime},</if>
<if test="customerContact != null">customer_contact = #{customerContact},</if>
<if test="contactNumber != null">contact_number = #{contactNumber},</if>
<if test="companyAddress != null">company_address = #{companyAddress},</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="instanceId != null">instance_id = #{instanceId},</if>
<if test="instanceType != null">instance_type = #{instanceType},</if>
<if test="submitInstanceId != null">submit_instance_id = #{submitInstanceId},</if>
<if test="applyTitle != null">apply_title = #{applyTitle},</if>
<if test="applyTime != null">apply_time = #{applyTime},</if>
<if test="applyUser != null">apply_user = #{applyUser},</if>
<if test="cancelInstanceId != null">cancel_instance_id = #{cancelInstanceId},</if>
<if test="restoreInstanceId != null">restore_instance_id = #{restoreInstanceId},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where aftersales_notice_code = #{aftersalesNoticeCode}
</update>
<delete id="deleteSalesAftersalesNoticeById" parameterType="Long">
delete from sales_aftersales_notice where aftersales_notice_id = #{aftersalesNoticeId}
</delete>

21
ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/aftersalesOrder.html

@ -141,7 +141,12 @@
{
title: '客户要求出发日期',
field: 'startDate',
//——修改——获取日期列的值进行转换
// formatter: function (value, row, index) {
// return changeDateFormat(value)
// }
},
{
title: '公司地址',
field: 'companyAddress',
@ -180,8 +185,13 @@
// 编辑
// actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i> 编辑</a> ');
if (row.aftersalesStatus == 0){
actions.push('<a class="btn btn-success btn-xs ' + sendOrdersFlag + '" href="javascript:void(0)" onclick="sendOrders(\'' + row.aftersalesOrderId + '\')"><i class="fa fa-edit"></i>派单</a> ');
}
if (row.aftersalesStatus == 1) {
actions.push('<a class="btn btn-success btn-xs ' + uploadReportFlag + '" href="javascript:void(0)" onclick="uploadReport(\'' + row.aftersalesOrderId + '\')"><i class="fa fa-edit"></i>上传报告</a> ');
}
// 详情
actions.push('<a class="btn btn-success btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="detail(\'' + row.aftersalesOrderId + '\')"><i class="fa fa-edit"></i>详情</a> ');
return actions.join('');
@ -224,6 +234,17 @@
$.modal.open("上传报告",url);
}
//修改——转换日期格式(时间戳转换为datetime格式)
// function changeDateFormat(cellval) {
// if (cellval != null) {
// var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));
// var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
// var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
// return date.getFullYear() + "-" + month + "-" + currentDate;
// }
// }
</script>
</body>
</html>

73
ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/detail.html

@ -12,15 +12,15 @@
<form class="form-horizontal m" id="form-aftersalesOrder-edit" th:object="${detail}">
<input name="aftersalesOrderId" th:field="*{aftersalesOrderId}" type="hidden">
<div class="form-group">
<label class="col-sm-4 control-label">售单号:</label>
<label class="col-sm-4 control-label">单号:</label>
<div class="col-sm-8">
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text" readonly>
<input name="aftersalesOrderCode" th:field="*{aftersalesOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">生产单号:</label>
<label class="col-sm-4 control-label">销售单号:</label>
<div class="col-sm-8">
<input name="makeNo" th:field="*{makeNo}" class="form-control" type="text" readonly>
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
@ -54,10 +54,10 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">客户要求出发日期:</label>
<label class="col-sm-3 control-label">客户要求出发日期:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="startDate" class="form-control" th:value="*{startDate}" placeholder="yyyy-mm-dd" type="text" readonly>
<input name="startDate" th:value="${#dates.format(detail.startDate, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text" disabled>
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
@ -128,6 +128,7 @@
<script th:src="@{/ajax/libs/element-ui/element-ui.js}"></script>
<script th:inline="javascript">
var emergencyDegreeDatas = [[${@dict.getType('aftersales_emergency_degree')}]];
var prefix = ctx + "aftersales/aftersalesOrder";
var detail = [[${detail}]];
@ -256,11 +257,6 @@
queryParams:queryParams,
columns: [{
checkbox: true
},
{
title: '出货设备编号',
field: 'shippingDeviceCode',
visible: false
},
{
title: '料号',
@ -291,20 +287,23 @@
field: 'materialDescribe',
},
{
title: '流水号',
field: 'deviceRunningNumber',
title: '售后数量',
field: 'shippedGoodsSum',
},
{
title: '生产图片',
field: 'makePhotourl',
title: '设备SN',
field: 'snCode',
},
{
title: 'SN号',
field: 'snCode',
title: '售后问题',
field: 'aftersalesProblem',
},
{
title: '售后图片',
field: 'aftersalesPhotourl',
title: '紧急程度',
field: 'emergencyDegree',
formatter: function(value, row, index) {
return $.table.selectDictLabel(emergencyDegreeDatas, value);
}
},
]
};
@ -324,11 +323,11 @@
}
}
// $("input[name='startDate']").datetimepicker({
// format: "yyyy-mm-dd",
// minView: "month",
// autoclose: true
// });
$("input[name='startDate']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$(function() {
var options = {
url: prefix + "/optionDevices",
@ -341,11 +340,6 @@
queryParams:queryParams,
columns: [{
checkbox: true
},
{
title: '出货设备编号',
field: 'shippingDeviceCode',
visible: false
},
{
title: '料号',
@ -376,20 +370,23 @@
field: 'materialDescribe',
},
{
title: '流水号',
field: 'deviceRunningNumber',
title: '已出库数量',
field: 'shippedGoodsSum',
},
{
title: '生产图片',
field: 'makePhotourl',
title: '设备SN',
field: 'snCode',
},
{
title: 'SN号',
field: 'snCode',
title: '售后问题',
field: 'aftersalesProblem',
},
{
title: '售后图片',
field: 'aftersalesPhotourl',
title: '紧急程度',
field: 'emergencyDegree',
formatter: function(value, row, index) {
return $.table.selectDictLabel(emergencyDegreeDatas, value);
}
},
]
};
@ -398,7 +395,7 @@
function queryParams(params) {
var curParams = {
// 传递参数查询参数
makeNo: detail.makeNo
aftersalesOrderCode: detail.aftersalesOrderCode
};
return curParams;
}

45
ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/sendOrders.html

@ -10,15 +10,15 @@
<form class="form-horizontal m" id="form-aftersalesOrder-edit" th:object="${sendOrders}">
<input name="aftersalesOrderId" th:field="*{aftersalesOrderId}" type="hidden">
<div class="form-group">
<label class="col-sm-4 control-label">售单号:</label>
<label class="col-sm-4 control-label">单号:</label>
<div class="col-sm-8">
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text">
<input name="aftersalesOrderCode" th:field="*{aftersalesOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">生产单号:</label>
<label class="col-sm-4 control-label">销售单号:</label>
<div class="col-sm-8">
<input name="makeNo" th:field="*{makeNo}" class="form-control" type="text">
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
@ -52,14 +52,15 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">客户要求出发日期:</label>
<label class="col-sm-3 control-label">客户要求出发日期:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="startDate" class="form-control" th:value="*{startDate}" placeholder="yyyy-mm-dd" type="text">
<input name="startDate" th:value="${#dates.format(sendOrders.startDate, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">备注:</label>
<div class="col-sm-8">
@ -92,6 +93,9 @@
<th:block th:include="include :: summernote-js" />
<script th:inline="javascript">
var prefix = ctx + "aftersales/aftersalesOrder";
var emergencyDegreeDatas = [[${@dict.getType('aftersales_emergency_degree')}]];
var sendOrders = [[${sendOrders}]];
$("#form-aftersalesOrder-edit").validate({
focusCleanup: true
@ -99,7 +103,7 @@
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-aftersalesOrder-edit').serialize());
$.operate.save(prefix + "/sendOrders", $('#form-aftersalesOrder-edit').serialize());
}
}
@ -109,6 +113,7 @@
autoclose: true
});
$(function() {
$('.summernote').each(function(i) {
$('#' + this.id).summernote({
@ -159,11 +164,6 @@
queryParams:queryParams,
columns: [{
checkbox: true
},
{
title: '出货设备编号',
field: 'shippingDeviceCode',
visible: false
},
{
title: '料号',
@ -194,20 +194,23 @@
field: 'materialDescribe',
},
{
title: '流水号',
field: 'deviceRunningNumber',
title: '售后数量',
field: 'shippedGoodsSum',
},
{
title: '生产图片',
field: 'makePhotourl',
title: '设备SN',
field: 'snCode',
},
{
title: 'SN号',
field: 'snCode',
title: '售后问题',
field: 'aftersalesProblem',
},
{
title: '售后图片',
field: 'aftersalesPhotourl',
title: '紧急程度',
field: 'emergencyDegree',
formatter: function(value, row, index) {
return $.table.selectDictLabel(emergencyDegreeDatas, value);
}
},
]
};
@ -216,7 +219,7 @@
function queryParams(params) {
var curParams = {
// 传递参数查询参数
makeNo: sendOrders.makeNo
aftersalesOrderCode: sendOrders.aftersalesOrderCode
};
return curParams;
}

42
ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOrder/uploadReport.html

@ -12,15 +12,15 @@
<form class="form-horizontal m" id="form-aftersalesOrder-edit" th:object="${uploadReport}">
<input name="aftersalesOrderId" th:field="*{aftersalesOrderId}" type="hidden">
<div class="form-group">
<label class="col-sm-4 control-label">售单号:</label>
<label class="col-sm-4 control-label">单号:</label>
<div class="col-sm-8">
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text">
<input name="aftersalesOrderCode" th:field="*{aftersalesOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">生产单号:</label>
<label class="col-sm-4 control-label">销售单号:</label>
<div class="col-sm-8">
<input name="makeNo" th:field="*{makeNo}" class="form-control" type="text">
<input name="salesOrderCode" th:field="*{salesOrderCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
@ -54,10 +54,10 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">客户要求出发日期:</label>
<label class="col-sm-3 control-label">客户要求出发日期:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="startDate" class="form-control" th:value="*{startDate}" placeholder="yyyy-mm-dd" type="text">
<input name="startDate" th:value="${#dates.format(uploadReport.startDate, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
@ -128,7 +128,7 @@
<script th:src="@{/ajax/libs/element-ui/element-ui.js}"></script>
<script th:inline="javascript">
var emergencyDegreeDatas = [[${@dict.getType('aftersales_emergency_degree')}]];
var prefix = ctx + "aftersales/aftersalesOrder";
var uploadReport = [[${uploadReport}]];
$("#form-aftersalesOrder-edit").validate({
@ -201,11 +201,6 @@
queryParams:queryParams,
columns: [{
checkbox: true
},
{
title: '出货设备编号',
field: 'shippingDeviceCode',
visible: false
},
{
title: '料号',
@ -236,20 +231,23 @@
field: 'materialDescribe',
},
{
title: '流水号',
field: 'deviceRunningNumber',
title: '售后数量',
field: 'shippedGoodsSum',
},
{
title: '生产图片',
field: 'makePhotourl',
title: '设备SN',
field: 'snCode',
},
{
title: 'SN号',
field: 'snCode',
title: '售后问题',
field: 'aftersalesProblem',
},
{
title: '售后图片',
field: 'aftersalesPhotourl',
title: '紧急程度',
field: 'emergencyDegree',
formatter: function(value, row, index) {
return $.table.selectDictLabel(emergencyDegreeDatas, value);
}
},
]
};
@ -265,7 +263,7 @@
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-aftersalesOrder-edit').serialize());
$.operate.save(prefix + "/uploadReport", $('#form-aftersalesOrder-edit').serialize());
}
}
@ -382,7 +380,7 @@
function queryParams(params) {
var curParams = {
// 传递参数查询参数
makeNo: uploadReport.makeNo
aftersalesOrderCode: uploadReport.aftersalesOrderCode
};
return curParams;
}

4
ruoyi-admin/src/main/resources/templates/erp/material/add.html

@ -55,9 +55,9 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">品牌:</label>
<label class="col-sm-3 control-label is-required">品牌:</label>
<div class="col-sm-8">
<input name="brand" class="form-control" type="text"/>
<input name="brand" class="form-control" type="text" required/>
</div>
</div>
<div class="form-group">

58
ruoyi-admin/src/main/resources/templates/erp/material/material.html

@ -133,56 +133,56 @@
columns: [
{checkbox: true},
{title: '主键ID',field: 'id',visible: false},
{title: '料号',field: 'materialNo',},
{title: '物料名称',field: 'materialName',},
{title: '描述',field: 'describe',},
{title: '品牌',field: 'brand',},
{title: '半成品类型',field: 'processMethod',
formatter: function(value, row, index) {return $.table.selectDictLabel(processMethodDatas, value);}
},
{title: '单位',field: 'unit',
formatter: function(value, row, index) {return $.table.selectDictLabel(sysUnitClassDatas, value);}
},
{title: '图片',field: 'photoUrl',
formatter: function(value, row, index) {return $.table.imageView(value);}
},
{title: '<span style="color: red;">申请人</span>',field: 'applyUserName',
formatter: function(value, row, index) {return '<span style="color: red;">' + (value ? value : "-") + '</span>';}
},
{title: '申请时间',field: 'applyTime',},
{title: '上次更新时间',field: 'updateTime',},
{title: '当前状态',field: 'taskName',align: 'center',
formatter: function(value, row, index) {return '<span class="badge badge-primary">' + value + '</span>';}
},
{title: '流程实例ID',field: 'instanceId',visible: false},
{title: '流程提交实例ID',field: 'submitInstanceId',visible: false},
{title: '流程作废实例ID',field: 'cancelInstanceId',visible: false},
{title: '流程恢复实例ID',field: 'restoreInstanceId',visible: false},
{title: '流程实例类型',field: 'instanceTypeName',visible: false},
{title: '申请人ID',field: 'applyUser',visible: false},
{title: '<span style="color: red;">申请人</span>',field: 'applyUserName',
formatter: function(value, row, index) {return '<span style="color: red;">' + (value ? value : "-") + '</span>';}
},
{title: '申请时间',field: 'applyTime',},
{title: '当前任务ID',field: 'taskId',visible: false},
{title: '待办用户ID',field: 'todoUserId', visible: false},
{title: '当前任务名称',field: 'taskName',align: 'center',
formatter: function(value, row, index) {return '<span class="badge badge-primary">' + value + '</span>';}
},
{title: '审核状态',field: 'auditStatus',
{title: '审核状态',field: 'auditStatus',visible: false,
formatter: function(value, row, index) {return $.table.selectDictLabel(auditStatusDatas, value);}
},
{title: '使用状态',field: 'useStatus',
{title: '使用状态',field: 'useStatus',visible: false,
formatter: function(value, row, index) {return $.table.selectDictLabel(useStatusDatas, value);}
},
{title: '工程员',field: 'businessMembers',visible: false},
{title: '料号',field: 'materialNo',},
{title: '关联bom号',field: 'bomNo',},
{title: '图片',field: 'photoUrl',
formatter: function(value, row, index) {return $.table.imageView(value);}
},
{title: '物料名称',field: 'materialName',},
{title: '物料类型',field: 'materialType',
{title: '关联bom号',field: 'bomNo',visible: false},
{title: '物料类型',field: 'materialType',visible: false,
formatter: function(value, row, index) {return $.table.selectCategoryLabel(materialTypeDatas, value);}
},
{title: '单位',field: 'unit',
formatter: function(value, row, index) {return $.table.selectDictLabel(sysUnitClassDatas, value);}
},
{title: '品牌',field: 'brand',},
{title: '描述',field: 'describe',},
{title: '利润率',field: '',hidden: roes},
{title: '利润率',field: '',hidden: roes,visible: false},
{title: '是否有技术团队',field: 'havaProductTem',visible: false,
formatter:function (value, row, index){return $.table.selectDictLabel(haveProductTem,value);}
},
{title: '技术团队id',field: 'productItem',visible: false,},
{title: '技术团队名称',field: 'itemName',visible: false},
{title: '录入时间',field: 'createTime',},
{title: '更新人',field: 'updateBy',},
{title: '上次更新时间',field: 'updateTime',},
{title: '录入时间',field: 'createTime',visible: false},
{title: '更新人',field: 'updateBy',visible: false},
{title: '删除标志', field: 'delFlag',visible: false},
{title: '半成品类型',field: 'processMethod',
formatter: function(value, row, index) {return $.table.selectDictLabel(processMethodDatas, value);}
},
{title: '入库部门', field: 'warehouseDept',
{title: '入库部门', field: 'warehouseDept',visible: false,
formatter: function(value, row, index) {return $.table.selectDictLabel(warehouseDeptDatas, value);}
},
{title: '操作',align: 'center',

157
ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/taskYwjlVerify.html

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改售后通知单')" />
<th:block th:include="include :: header('售后通知单经理审批')" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<body class="white-bg">
@ -22,44 +22,9 @@
<input name="salesOrderCode" th:field="*{salesOrderCode}" 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="userId" th:field="*{userId}" 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="radio-box" th:each="dict : ${@dict.getType('auditStatus')}">
<input type="radio" th:id="${'auditStatus_' + dict.dictCode}" name="auditStatus" th:value="${dict.dictValue}" th:field="*{auditStatus}">
<label th:for="${'auditStatus_' + dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">售后状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sales_aftersales_status')}">
<input type="radio" th:id="${'aftersalesStatus_' + dict.dictCode}" name="aftersalesStatus" th:value="${dict.dictValue}" th:field="*{aftersalesStatus}">
<label th:for="${'aftersalesStatus_' + dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">业务人员:</label>
<div class="col-sm-8">
<input name="businessMembers" th:field="*{businessMembers}" 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="aftersalesMembers" th:field="*{aftersalesMembers}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">客户代码:</label>
<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">
</div>
@ -70,24 +35,6 @@
<input name="enterpriseName" th:field="*{enterpriseName}" 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" th:field="*{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">
<input name="enterpriseSum" th:field="*{enterpriseSum}" 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="startTime" th:field="*{startTime}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系人:</label>
<div class="col-sm-8">
@ -106,6 +53,12 @@
<input name="companyAddress" th:field="*{companyAddress}" 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="startTime" th:field="*{startTime}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">备注信息:</label>
<div class="col-sm-8">
@ -122,19 +75,31 @@
</select>
</div>
</div>
</form>
<div class="container">
<div class="row">
<div class="col-sm-12 select-table table-striped">
<h3 class="mb-4">选择设备</h3>
<table id="bootstrap-table"></table>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:src="@{/js/activiti.js}"></script>
<script th:inline="javascript">
var prefix = ctx + "sales/afterSalesNotice";
var emergencyDegreeDatas = [[${@dict.getType('aftersales_emergency_degree')}]];
$("#form-afterSalesNotice-ywjl").validate({
focusCleanup: true
});
var afterSalesNotice = [[${formData}]]
function submitHandler() {
if ($.validate.form()) {
if ($('textarea[name="comment"]').val()) {
@ -150,6 +115,82 @@
minView: "month",
autoclose: true
});
$(function() {
var options = {
url: prefix + "/getAfterSalesNoticeDetailList",
modalName: "出货设备",
showColumns: false,
pagination: false,
showToggle: false,
showRefresh:false,
showSearch:false,
queryParams:queryParams,
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',
},
{
title: '售后问题',
field: 'aftersalesProblem',
},
{
title: '紧急程度',
field: 'emergencyDegree',
formatter: function(value, row, index) {
return $.table.selectDictLabel(emergencyDegreeDatas, value);
}
},
]
};
$.table.init(options);
})
function queryParams(params) {
var curParams = {
// 传递参数查询参数
aftersalesNoticeCode: afterSalesNotice.aftersalesNoticeCode
};
return curParams;
}
</script>
</body>
</html>

150
ruoyi-admin/src/main/resources/templates/sales/afterSalesNotice/taskYwzgVerify.html

@ -22,44 +22,9 @@
<input name="salesOrderCode" th:field="*{salesOrderCode}" 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="userId" th:field="*{userId}" 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="radio-box" th:each="dict : ${@dict.getType('auditStatus')}">
<input type="radio" th:id="${'auditStatus_' + dict.dictCode}" name="auditStatus" th:value="${dict.dictValue}" th:field="*{auditStatus}">
<label th:for="${'auditStatus_' + dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">售后状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sales_aftersales_status')}">
<input type="radio" th:id="${'aftersalesStatus_' + dict.dictCode}" name="aftersalesStatus" th:value="${dict.dictValue}" th:field="*{aftersalesStatus}">
<label th:for="${'aftersalesStatus_' + dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">业务人员:</label>
<div class="col-sm-8">
<input name="businessMembers" th:field="*{businessMembers}" 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="aftersalesMembers" th:field="*{aftersalesMembers}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">客户代码:</label>
<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">
</div>
@ -70,24 +35,6 @@
<input name="enterpriseName" th:field="*{enterpriseName}" 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" th:field="*{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">
<input name="enterpriseSum" th:field="*{enterpriseSum}" 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="startTime" th:field="*{startTime}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系人:</label>
<div class="col-sm-8">
@ -106,6 +53,12 @@
<input name="companyAddress" th:field="*{companyAddress}" 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="startTime" th:field="*{startTime}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">备注信息:</label>
<div class="col-sm-8">
@ -122,15 +75,26 @@
</select>
</div>
</div>
</form>
<div class="container">
<div class="row">
<div class="col-sm-12 select-table table-striped">
<h3 class="mb-4">选择设备</h3>
<table id="bootstrap-table"></table>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:src="@{/js/activiti.js}"></script>
<script th:inline="javascript">
var prefix = ctx + "sales/afterSalesNotice";
var emergencyDegreeDatas = [[${@dict.getType('aftersales_emergency_degree')}]];
var afterSalesNotice = [[${formData}]]
$("#form-afterSalesNotice-ywzg").validate({
focusCleanup: true
});
@ -150,6 +114,78 @@
minView: "month",
autoclose: true
});
$(function() {
var options = {
url: prefix + "/getAfterSalesNoticeDetailList",
modalName: "出货设备",
showColumns: false,
pagination: false,
showToggle: false,
showRefresh:false,
showSearch:false,
queryParams:queryParams,
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',
},
{
title: '售后问题',
field: 'aftersalesProblem',
},
{
title: '紧急程度',
field: 'emergencyDegree',
formatter: function(value, row, index) {
return $.table.selectDictLabel(emergencyDegreeDatas, value);
}
},
]
};
$.table.init(options);
})
function queryParams(params) {
var curParams = {
// 传递参数查询参数
aftersalesNoticeCode: afterSalesNotice.aftersalesNoticeCode
};
return curParams;
}
</script>
</body>
</html>

12
ruoyi-admin/src/main/resources/templates/system/salesOrder/startAftersales.html

@ -35,21 +35,21 @@
</div>
</div>
<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">
<input name="customerDelivery" th:field="*{customerDelivery}" class="form-control" type="text" disabled>
<input name="customerDelivery" th:field="*{customerContact}" class="form-control" type="text" readonly>
</div>
</div>
<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">
<input name="deliveryPhone" th:field="*{deliveryPhone}" class="form-control" type="text" disabled>
<input name="deliveryPhone" th:field="*{contactNumber}" class="form-control" type="text" readonly>
</div>
</div>
<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">
<input name="deliveryAddress" th:field="*{deliveryAddress}" class="form-control" type="text" disabled>
<input name="deliveryAddress" th:field="*{deliveryAddress}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">

Loading…
Cancel
Save