mobile quot

This commit is contained in:
JIAL 2024-06-19 13:54:06 +08:00
commit d63db1c950
32 changed files with 1002 additions and 254 deletions

View File

@ -1,5 +1,9 @@
#for tests only !
<<<<<<< HEAD
#Wed Jun 19 09:11:03 CST 2024
=======
#Mon Jun 17 15:48:27 CST 2024
>>>>>>> 1efe171bc013909adaa8e3300a0b9ce6c2e24d85
jco.destination.pool_capacity=10
jco.client.lang=ZH
jco.client.ashost=172.19.0.125
@ -7,5 +11,9 @@ jco.client.saprouter=
jco.client.user=RFC
jco.client.sysnr=00
jco.destination.peak_limit=10
<<<<<<< HEAD
jco.client.passwd=g}=[!8cY+]^Y:h6_:E9``X=J#eA[=IM/|(0EB`M)]I1i?/qD
=======
jco.client.passwd=654321
>>>>>>> 1efe171bc013909adaa8e3300a0b9ce6c2e24d85
jco.client.client=800

View File

@ -206,11 +206,11 @@ public class CustomerController extends BaseController
customer.setCusCode(cusCode);
customer.setCreateBy(getUsername());
customerService.insertCustomer(customer);
sendNotice(customer);//发送消息至数据组
//sendNotice(customer);//发送消息至数据组
return success();
}else{
customerService.updateCustomer(customer);
sendNotice(customer);//发送消息至数据组
//sendNotice(customer);//发送消息至数据组
return success();
}
}

View File

@ -135,7 +135,7 @@ public class QuotHjController extends BaseController
quot.setQuotHjApprovalStatus("2");//报价单-核价单 状态设置为 已协助
quotService.updateQuot(quot);
sendNoticeToQuot(quotHj);// 发送给提醒
//sendNoticeToQuot(quotHj);// 发送给提醒
return success();
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.web.controller.quot;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -143,20 +144,50 @@ public class QuotController extends BaseController
public AjaxResult getReturnUpdateInfo(@PathVariable("quotId") String quotId)
{
Quot quot = quotService.selectQuotByQuotId(quotId);
if("2".equals(quot.getQuotApprovalStatus())){
if("2".equals(quot.getQuotApprovalStatus()) || "3".equals(quot.getQuotApprovalStatus())){
quot.setQuotApprovalStatus("1");// 提交状态设置为 协助中
quotService.updateQuot(quot);
}else if("0".equals(quot.getQuotApprovalStatus())){
return error("该报价单当前状态为【待提交】状态,无法修改");
}else if("1".equals(quot.getQuotApprovalStatus())){
return error("该报价单当前状态为【协助中】状态,无法修改");
}else if("3".equals(quot.getQuotApprovalStatus())){
return error("该报价单当前状态为【已驳回】状态,无法修改");
}
return success(quot);
}
/**
* 获取报价详细信息-整单通过
*/
@PreAuthorize("@ss.hasPermi('quot:quot:allPass')")
@GetMapping(value = "/allPass/{quotId}")
@Log(title = "报价单-手动更新状态为通过", businessType = BusinessType.UPDATE)
public AjaxResult getAllPassInfo(@PathVariable("quotId") String quotId)
{
Quot quot = new Quot();
quot.setQuotId(quotId);
quot.setQuotApprovalStatus("2");// 提交状态设置为 通过
quot.setQuotQuotationDate(DateUtils.getNowDate());//报价单-报价日期设置为 当前日期
quot.setQuotCheckUserName(getUsername());
quotService.updateQuotAllPassInfo(quot);
return success(quot);
}
/**
* 获取报价详细信息-整单驳回
*/
@PreAuthorize("@ss.hasPermi('quot:quot:allReject')")
@PostMapping(value = "/allReject")
@Log(title = "报价单-手动更新状态为驳回", businessType = BusinessType.UPDATE)
public AjaxResult getAllRejectInfo(@RequestBody Quot quot)
{
quot.setQuotApprovalStatus("3");// 提交状态设置为 驳回
quot.setQuotQuotationDate(DateUtils.getNowDate());//报价单-报价日期设置为 当前日期
quot.setQuotCheckUserName(getUsername());
quotService.updateQuot(quot);
return success(quot);
}
/**
* 导出产品明细模板
* @param response
@ -393,7 +424,7 @@ public class QuotController extends BaseController
}
//quot.setQuotSalesmanCode(getUsername());
quotService.insertQuot(quot);
sendNoticeToBjz(quot);
//sendNoticeToBjz(quot);
return success();
}else{
if(hjRoleFlag){
@ -402,7 +433,7 @@ public class QuotController extends BaseController
quot.setUpdateBy(getUsername());
}
quotService.updateQuot(quot);
sendNoticeToBjz(quot);
//sendNoticeToBjz(quot);
return success();
}
}
@ -478,7 +509,7 @@ public class QuotController extends BaseController
quot.setQuotJsxzApprovalStatus("1");//报价单-技术确认单 状态设置为 协助中
quotService.updateQuot(quot);
sendNoticeToJsxz(quotJsqr);
//sendNoticeToJsxz(quotJsqr);
}
return success();
}
@ -522,7 +553,7 @@ public class QuotController extends BaseController
quot.setUpdateBy(getUsername());
quotService.updateQuot(quot);
sendNoticeToHjxz(quotHj);
//sendNoticeToHjxz(quotHj);
return success();
}
@ -738,6 +769,24 @@ public class QuotController extends BaseController
return error("OA审批流程还未完成");
}
//下点超5.2 提醒
BigDecimal tpxd = BigDecimal.ZERO;
List<QuotMaterial> materials = quot.getQuotMaterialList();
if(materials!=null&&materials.size()>0){
for(QuotMaterial quotMaterial:materials){
BigDecimal matQuotTp = quotMaterial.getMatQuotTp();
if(BigDecimal.ZERO.compareTo(matQuotTp)<0){
tpxd = matQuotTp;
break;
}
}
}
String matQuotTp = configService.selectConfigByKey("quot.allow.matQuotTp");
if(tpxd.compareTo(new BigDecimal(matQuotTp))>0 && "0".equals(quot_oa_approval_status)){
return error("特批下点数超"+matQuotTp+"个点,请走OA审批流程");
}
quot.setQuotQuotationDate(DateUtils.getNowDate());//报价单-报价日期设置为 当前日期
quot.setQuotApprovalStatus("2");
quot.setQuotCheckUserName(getUsername());
@ -782,4 +831,15 @@ public class QuotController extends BaseController
quotService.updateQuot(quot);
return success();
}
/**
* 统计有效报价单模块-获取报价单数据
*/
@PreAuthorize("@ss.hasPermi('quot:quot:listStatisticsQuotQuot')")
@GetMapping("/listStatisticsQuotQuot")
public TableDataInfo listStatisticsQuotQuot(Quot quot)
{
List<Quot> list = quotService.selectStatisticsQuotList(quot);
return getDataTable(list);
}
}

View File

@ -12,11 +12,15 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.customer.domain.Customer;
import com.ruoyi.quot.domain.Quot;
import com.ruoyi.quot.domain.QuotFile;
import com.ruoyi.quot.domain.QuotMaterial;
import com.ruoyi.quot.service.IQuotFileService;
import com.ruoyi.quot.service.IQuotService;
import com.ruoyi.redBook.domain.*;
import com.ruoyi.redBook.service.IRedBookService;
import com.ruoyi.redBook.service.impl.AsyncRbTaskService;
@ -55,6 +59,13 @@ public class RedBookController extends BaseController
@Resource
private AsyncRbTaskService asyncRbTaskService;
@Resource
private IQuotService iQuotService;
@Autowired
private IQuotFileService quotFileService;
/**
* 获取目录
* @param product
@ -240,6 +251,61 @@ public class RedBookController extends BaseController
}
return success(quot);
}
/**
* 生成询价单
* @param quot
* @return
*/
@DataSource(DataSourceType.MASTER)
@Log(title = "生成询价单", businessType = BusinessType.INSERT)
@PostMapping("/madeXjQuot")
public void madeXjQuot(HttpServletResponse response, @RequestBody OAQuot quot)
{
Quot xjquot = new Quot();
xjquot.setQuotId(UUID.fastUUID().toString());
String quotCode = redBookService.getCode("BJD");
xjquot.setQuotCode(quotCode);
xjquot.setQuotApprovalStatus("0");
xjquot.setQuotSalesmanCode(getUsername());
xjquot.setQuotSalesmanBm(getLoginUser().getUser().getSapUserBm());
xjquot.setQuotSalesmanName(getLoginUser().getUser().getNickName());
xjquot.setQuotSalesmanDeptId(getLoginUser().getUser().getDept().getDeptId()+"");
xjquot.setQuotSalesmanDeptName(getLoginUser().getUser().getDept().getDeptName());
xjquot.setCreateBy(getUsername());
iQuotService.insertQuot(xjquot);
/** 上传清单附件 **/
/* String relation_id = xjquot.getQuotId();
if(!StringUtils.isEmpty(relation_id)){
if (!file.isEmpty())
{
QuotFile quotFile= new QuotFile();
quotFile.setFileId(UUID.fastUUID().toString());
String url = FileUploadUtils.uploadMinio(file,"quot-manage", "quot/"+relation_id);
int index = url.lastIndexOf("/")+1;
String fileName = url.substring(index);//获取文件名
int index2 = url.indexOf("/quot/");
String fileBucketName = url.substring(index2);//获取文件对应文件服务器中地址-供后面删除功能用
quotFile.setFileName(fileName);
quotFile.setFileBucketName(fileBucketName);
quotFile.setFileUrl(url);
quotFile.setFileSize(file.getSize());
quotFile.setFileTime(DateUtils.getTime());
quotFile.setFileType("quotXjFile");
quotFile.setRelationId(relation_id);
quotFileService.insertQuotFile(quotFile);
}
}else{
return error("系统异常,询价单号为空!");
}*/
/** 上传清单附件 **/
// return success(xjquot);
}
/**
* 报价单提交
* @param quot
@ -275,7 +341,7 @@ public class RedBookController extends BaseController
}
/**
* 导出产品明细模板
* 导出产品明细模板-型号规格电压数量
* @param response
*/
@PostMapping("/importTemplate")
@ -286,7 +352,7 @@ public class RedBookController extends BaseController
}
/**
* 导入产品明细
* 导入产品明细-型号规格电压数量
* @param file
* @param updateSupport
* @return
@ -332,7 +398,9 @@ public class RedBookController extends BaseController
}
System.out.println("开始时间:" + DateUtils.getTime());
List<List<OAQuotProductTemplate>> list = ListSplitUtil.averageList(tempList,10);
//List<List<OAQuotProductTemplate>> list = ListSplitUtil.averageList(tempList,10);
List<List<OAQuotProductTemplate>> list = ListSplitUtil.partList(tempList,20);
List<OAQuotProduct> OAQuotProducts = new ArrayList<>();
//定义一个存所有线程回调函数的list
@ -363,6 +431,85 @@ public class RedBookController extends BaseController
return success(OAQuotProducts);
}
/**
* 导出产品明细模板-品名型号
* @param response
*/
@PostMapping("/importTemplate2")
public void importTemplate2(HttpServletResponse response)
{
ExcelUtil<OAQuotProductTemplate2> util = new ExcelUtil<OAQuotProductTemplate2>(OAQuotProductTemplate2.class);
util.importTemplateExcel(response, "产品数据");
}
/**
* 导入产品明细-品名型号
* @param file
* @param updateSupport
* @return
* @throws Exception
*/
@PostMapping("/importData2")
public AjaxResult importData2(String rbUid, MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<OAQuotProductTemplate2> util = new ExcelUtil<OAQuotProductTemplate2>(OAQuotProductTemplate2.class);
List<OAQuotProductTemplate2> tempList = util.importExcel(file.getInputStream());
if(tempList.size()==0){
return error("导入文件无产品明细数据");
}else if(tempList.size()>200){
return error("最多导入200条");
}
int index = 1;
for(OAQuotProductTemplate2 temp:tempList){
temp.setIndex(index);
temp.setRbUid(rbUid);
String name_0 = temp.getName_0();
if(StringUtils.isNotBlank(name_0)){
name_0 = name_0.trim();
name_0 = name_0.replace(" "," ");
name_0 = name_0.toUpperCase();
temp.setName_0(name_0);
}
index++;
}
System.out.println("开始时间:" + DateUtils.getTime());
//List<List<OAQuotProductTemplate>> list = ListSplitUtil.averageList(tempList,10);
List<List<OAQuotProductTemplate2>> list = ListSplitUtil.partList(tempList,20);
List<OAQuotProduct> OAQuotProducts = new ArrayList<>();
//定义一个存所有线程回调函数的list
List<Future<List<OAQuotProduct>>> futureList=new ArrayList<>();
int num = 1;
for(List<OAQuotProductTemplate2> lt:list){
futureList.add(asyncRbTaskService.executeAsyncTask3("线程"+num+""+lt.size()+"条】",lt));
num++;
}
//判断进程是否全部结束**
while (true){
//回调信息空了就结束**
if (futureList.isEmpty()){
break;
}
for (int i = 0; i < futureList.size(); i++) {
if (futureList.get(i).isDone()){
OAQuotProducts.addAll(futureList.get(i).get());
//判断线程结束输出回调信息并将该回调清除
futureList.remove(i);
}else {
continue;
}
}
}
System.out.println("结束时间:" + DateUtils.getTime());
Collections.sort(OAQuotProducts);
return success(OAQuotProducts);
}
/**
* 获取调价日期
* @param oAQuot

View File

@ -395,7 +395,7 @@ public class QuotJsqrController extends BaseController
}
quot.setQuotJsxzApprovalStatus("2");//报价单-技术协助状态 设置为 已协助
sendNoticeToQuot(quotJsqr);// 发送给提醒
//sendNoticeToQuot(quotJsqr);// 发送给提醒
}
return success(quotService.updateQuot(quot));
}

View File

@ -359,8 +359,8 @@ public class excelUtil {
response.setContentType("application/vnd.ms-excel");
BigDecimal totalmoney = BigDecimal.ZERO;
File jnlogo_file = new File("logon/"+quot.getQuotCode()+".png");
File wc_file = new File("logon/"+quot.getQuotCode()+".png");
File jnlogo_file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png");
File wc_file = new File("logon/"+IdUtils.createNo("wc_",3)+".png");
try {
OutputStream os = response.getOutputStream();
WritableWorkbook wwb = Workbook.createWorkbook(os);

View File

@ -31,7 +31,7 @@ server:
uri-encoding: UTF-8
# 连接数满后的排队数默认为100
accept-count: 1000
connection-timeout: 120s
connection-timeout: 600s
threads:
# tomcat最大线程数默认为200
max: 800
@ -110,7 +110,7 @@ token:
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟
expireTime: 30
expireTime: 60
# MyBatis配置
mybatis:

View File

@ -217,8 +217,8 @@ public class HttpUtils
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("contentType", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("contentType", "application/json; charset=utf-8");
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
// 设置Cookie头部
if(StringUtils.isNotEmpty(cookie)){
String cookies[] = cookie.split("; ");

View File

@ -28,7 +28,7 @@ public class WebSocketServer
/**
* 默认最多允许同时在线人数100
*/
public static int socketMaxOnlineCount = 100;
public static int socketMaxOnlineCount = 10000;
private static final Semaphore SOCKET_SEMAPHORE = new Semaphore(socketMaxOnlineCount);

View File

@ -96,8 +96,10 @@ public class Quot extends BaseEntity
/** 是否打印 */
private String quotPrint;
/** 打印人 */
/** 打印人账号 */
private String quotPrintUserName;
/** 打印人 */
private String quotPrintUserNickName;
/** 总价 */
private String quotTotalPrice;
@ -309,6 +311,9 @@ public class Quot extends BaseEntity
public String getQuotPrintUserName() { return quotPrintUserName; }
public void setQuotPrintUserName(String quotPrintUserName) { this.quotPrintUserName = quotPrintUserName; }
public String getQuotPrintUserNickName() { return quotPrintUserNickName; }
public void setQuotPrintUserNickName(String quotPrintUserNickName) { this.quotPrintUserNickName = quotPrintUserNickName; }
public void setQuotQuantity(String quotQuantity)
{
this.quotQuantity = quotQuantity;

View File

@ -147,4 +147,12 @@ public interface QuotMapper
* @return
*/
String getCode(String type);
/**
* 统计有效报价单模块-获取报价单数据
* @param quot
* @return
*/
List<Quot> selectStatisticsQuotList(Quot quot);
}

View File

@ -124,4 +124,18 @@ public interface IQuotService
* @return
*/
String getCode(String type);
/**
* 报价单-手动更新状态为通过
* @param quot
*/
void updateQuotAllPassInfo(Quot quot);
/**
* 统计有效报价单模块-获取报价单数据
* @param quot
* @return
*/
List<Quot> selectStatisticsQuotList(Quot quot);
}

View File

@ -269,4 +269,24 @@ public class QuotServiceImpl implements IQuotService
public String getCode(String type) {
return quotMapper.getCode(type);
}
/**
* 报价单-手动更新状态为通过
* @param quot
*/
@Override
public void updateQuotAllPassInfo(Quot quot) {
quotMapper.updateQuot(quot);
}
/**
* 统计有效报价单模块-获取报价单数据
* @param quot
* @return
*/
@Override
public List<Quot> selectStatisticsQuotList(Quot quot) {
return quotMapper.selectStatisticsQuotList(quot);
}
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.redBook.domain;
import com.ruoyi.common.annotation.Excel;
import java.math.BigDecimal;
public class OAQuotProductTemplate2 {
private Integer index;
private String rbUid;
@Excel(name = "品名型号")
private String name_0;//品名型号
@Excel(name = "数量")
private BigDecimal count;//数量
public Integer getIndex() { return index; }
public void setIndex(Integer index) { this.index = index; }
public String getRbUid() { return rbUid; }
public void setRbUid(String rbUid) { this.rbUid = rbUid; }
public String getName_0() {
return name_0;
}
public void setName_0(String name_0) {
this.name_0 = name_0;
}
public BigDecimal getCount() {
return count;
}
public void setCount(BigDecimal count) {
this.count = count;
}
}

View File

@ -117,14 +117,22 @@ public interface OARedBookMapper
String getFixDatePrice(@Param("name_0") String name_0,@Param("spec") String spec,@Param("voltage") String voltage, @Param("uid_0") String uid_0);
/**
* 导入明细批量获取红本价格
* @param name_0
* 导入明细批量获取红本价格-型号规格电压数量
* @param name_1
* @param spec
* @param rbUid
* @return
*/
OAQuotProduct getFixDatePrice2(@Param("name_1") String name_1, @Param("spec") String spec, @Param("voltage") String voltage, @Param("uid_0") String rbUid);
/**
* 导入明细批量获取红本价格-品名型号
* @param name_0
* @param rbUid
* @return
*/
OAQuotProduct getFixDatePrice3(@Param("name_0") String name_0, @Param("uid_0") String rbUid);
/**
* 查询已生成的报价单列表
* @param oaQuot

View File

@ -141,12 +141,20 @@ public interface IRedBookService
List<OAQuotProduct> setRedBookPrice(List<OAQuotProduct> list);
/**
* 导入明细批量获取红本价格
* 导入明细批量获取红本价格-型号规格电压数量
* @param list
* @return
*/
List<OAQuotProduct> setRedBookPrice2(List<OAQuotProductTemplate> list);
/**
* 导入明细批量获取红本价格-品名型号
* @param list
* @return
*/
List<OAQuotProduct> setRedBookPrice3(List<OAQuotProductTemplate2> list);
/**
* 获取单据编号
* @param type

View File

@ -3,6 +3,7 @@ package com.ruoyi.redBook.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.redBook.domain.OAQuotProduct;
import com.ruoyi.redBook.domain.OAQuotProductTemplate;
import com.ruoyi.redBook.domain.OAQuotProductTemplate2;
import com.ruoyi.redBook.service.IRedBookService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
@ -32,7 +33,7 @@ public class AsyncRbTaskService {
}
/**
* 导入明细批量获取红本价格
* 导入明细批量获取红本价格-型号规格电压数量
* @param threadname
* @param list
* @return
@ -44,5 +45,19 @@ public class AsyncRbTaskService {
System.out.println(threadname+"结束时间:" + DateUtils.getTime());
return new AsyncResult<>( OAQuotProducts);
}
/**
* 导入明细批量获取红本价格-品名型号
* @param threadname
* @param list
* @return
*/
@Async
public Future<List<OAQuotProduct>> executeAsyncTask3(String threadname, List<OAQuotProductTemplate2> list) {
System.out.println(threadname+"开始时间:" + DateUtils.getTime());
List<OAQuotProduct> OAQuotProducts = iRedBookService.setRedBookPrice3(list);
System.out.println(threadname+"结束时间:" + DateUtils.getTime());
return new AsyncResult<>( OAQuotProducts);
}
}

View File

@ -208,12 +208,17 @@ public class RedBookServiceImpl implements IRedBookService
for(OAQuotProduct oAQuotProduct : list){
String price = oaRedBookMapper.getFixDatePrice(oAQuotProduct.getName_0(),oAQuotProduct.getSpec(),oAQuotProduct.getVoltage(),oAQuotProduct.getUid_0());
oAQuotProduct.setPrice(price);
if(StringUtils.isEmpty(price)){
oAQuotProduct.setName_1("");
oAQuotProduct.setVoltage("");
oAQuotProduct.setStu("");
}
}
return list;
}
/**
* 导入明细批量获取红本价格
* 导入明细批量获取红本价格-型号规格电压数量
* @param list
* @return
*/
@ -224,19 +229,44 @@ public class RedBookServiceImpl implements IRedBookService
OAQuotProduct oAQuotProduct = new OAQuotProduct();
for(OAQuotProductTemplate oAQuotProductTemplate : list){
OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice2(oAQuotProductTemplate.getName_1(),oAQuotProductTemplate.getSpec(),oAQuotProductTemplate.getVoltage(),oAQuotProductTemplate.getRbUid());
if(rbProduct!=null){
oAQuotProduct = new OAQuotProduct();
oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex());
oAQuotProduct.setUid_0(rbProduct.getUid_0());
oAQuotProduct.setName_0(rbProduct.getName_0());
oAQuotProduct.setName_1(oAQuotProductTemplate.getName_1());
oAQuotProduct.setSpec(oAQuotProductTemplate.getSpec());
oAQuotProduct.setVoltage(rbProduct.getVoltage());
oAQuotProduct.setStu(rbProduct.getStu());
oAQuotProduct.setPrice(rbProduct.getPrice());
oAQuotProduct.setCount(oAQuotProductTemplate.getCount());
OAQuotProducts.add(oAQuotProduct);
}
oAQuotProduct = new OAQuotProduct();
oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex());
oAQuotProduct.setUid_0(oAQuotProductTemplate.getRbUid());
oAQuotProduct.setName_0(rbProduct!=null?rbProduct.getName_0():"");
oAQuotProduct.setName_1(oAQuotProductTemplate.getName_1());
oAQuotProduct.setSpec(oAQuotProductTemplate.getSpec());
oAQuotProduct.setVoltage(rbProduct!=null?rbProduct.getVoltage():"");
oAQuotProduct.setStu(rbProduct!=null?rbProduct.getStu():"");
oAQuotProduct.setPrice(rbProduct!=null?rbProduct.getPrice():"");
oAQuotProduct.setCount(oAQuotProductTemplate.getCount());
OAQuotProducts.add(oAQuotProduct);
}
return OAQuotProducts;
}
/**
* 导入明细批量获取红本价格-品名型号
* @param list
* @return
*/
@Override
@DataSource(DataSourceType.OAREDBOOK)
public List<OAQuotProduct> setRedBookPrice3(List<OAQuotProductTemplate2> list) {
List<OAQuotProduct> OAQuotProducts = new ArrayList<>();
OAQuotProduct oAQuotProduct = new OAQuotProduct();
for(OAQuotProductTemplate2 oAQuotProductTemplate : list){
OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice3(oAQuotProductTemplate.getName_0(),oAQuotProductTemplate.getRbUid());
oAQuotProduct = new OAQuotProduct();
oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex());
oAQuotProduct.setUid_0(oAQuotProductTemplate.getRbUid());
oAQuotProduct.setName_0(oAQuotProductTemplate.getName_0());
oAQuotProduct.setName_1(rbProduct!=null?rbProduct.getName_1():"");
oAQuotProduct.setSpec(rbProduct!=null?rbProduct.getSpec():"");
oAQuotProduct.setVoltage(rbProduct!=null?rbProduct.getVoltage():"品名不规范");
oAQuotProduct.setStu(rbProduct!=null?rbProduct.getStu():"");
oAQuotProduct.setPrice(rbProduct!=null?rbProduct.getPrice():"");
oAQuotProduct.setCount(oAQuotProductTemplate.getCount());
OAQuotProducts.add(oAQuotProduct);
}
return OAQuotProducts;
}

View File

@ -35,6 +35,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="quotMatpriceDiff" column="quot_matprice_diff" />
<result property="quotPrint" column="quot_print" />
<result property="quotPrintUserName" column="quot_print_user_name" />
<result property="quotPrintUserNickName" column="quot_print_user_nickName" />
<result property="createBy" column="create_by" />
<result property="createName" column="create_name" />
<result property="createTime" column="create_time" />
@ -111,7 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.quot_phone, a.quot_inquiry_date, a.quot_project, a.quot_quotation_date, a.quot_quotation_from,
a.quot_quotation_require, a.quot_feedback_explanation, a.quot_quantity, a.quot_total_price,
a.quot_check_user_name, u2.nick_name quot_check_user_nickname, a.quot_approval_status,a.quot_materials_count,
a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,u3.nick_name quot_print_user_name,
a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,a.quot_print_user_name,u3.nick_name quot_print_user_nickName,
a.create_by, a.create_time, a.update_by, a.update_time, u.nick_name create_name,
a.quot_jsxz_standard,a.quot_jsxz_approval_status,a.quot_jsxz_chapter,
@ -144,7 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 数据范围过滤 -->
${params.dataScope}
</where>
order by a.quot_code desc
order by a.quot_inquiry_date desc
</select>
<select id="selectQuotListCount" resultType="String">
@ -156,7 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.quot_salesman_dept_id, a.quot_salesman_dept_name, a.quot_address, a.quot_contacts, a.quot_phone, a.quot_inquiry_date,
a.quot_project, a.quot_quotation_date, a.quot_quotation_from, a.quot_quotation_require, a.quot_feedback_explanation,
a.quot_quantity, a.quot_total_price, a.quot_check_user_name, u2.nick_name quot_check_user_nickname, a.quot_approval_status,
a.quot_materials_count,a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,u3.nick_name quot_print_user_name,
a.quot_materials_count,a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,a.quot_print_user_name,u3.nick_name quot_print_user_nickName,
a.create_by, a.create_time, a.update_by, a.update_time,
a.quot_jsxz_standard,a.quot_jsxz_approval_status,a.quot_jsxz_chapter,
@ -217,44 +219,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quotSalesmanName != null and quotSalesmanName != ''">quot_salesman_name,</if>
<if test="quotCustomerBm != null and quotCustomerBm != ''">quot_customer_bm,</if>
<if test="quotCustomerName != null and quotCustomerName != ''">quot_customer_name,</if>
<if test="quotSalesmanDeptId != null">quot_salesman_dept_id,</if>
<if test="quotSalesmanDeptName != null">quot_salesman_dept_name,</if>
<if test="quotAddress != null">quot_address,</if>
<if test="quotContacts != null">quot_contacts,</if>
<if test="quotPhone != null">quot_phone,</if>
<if test="quotSalesmanDeptId != null and quotSalesmanDeptId != ''">quot_salesman_dept_id,</if>
<if test="quotSalesmanDeptName != null and quotSalesmanDeptName != ''">quot_salesman_dept_name,</if>
<if test="quotAddress != null and quotAddress != ''">quot_address,</if>
<if test="quotContacts != null and quotContacts != ''">quot_contacts,</if>
<if test="quotPhone != null and quotPhone != ''">quot_phone,</if>
<if test="quotInquiryDate != null">quot_inquiry_date,</if>
<if test="quotProject != null and quotProject != ''">quot_project,</if>
<if test="quotQuotationDate != null">quot_quotation_date,</if>
<if test="quotQuotationFrom != null">quot_quotation_from,</if>
<if test="quotQuotationFrom != null and quotQuotationFrom != ''">quot_quotation_from,</if>
<if test="quotQuotationRequire != null and quotQuotationRequire != ''">quot_quotation_require,</if>
<if test="quotFeedbackExplanation != null">quot_feedback_explanation,</if>
<if test="quotQuantity != null">quot_quantity,</if>
<if test="quotTotalPrice != null">quot_total_price,</if>
<if test="quotCheckUserName != null">quot_check_user_name,</if>
<if test="quotApprovalStatus != null">quot_approval_status,</if>
<if test="quotMaterialsCount != null">quot_materials_count,</if>
<if test="quotLvPrice != null">quot_lv_price,</if>
<if test="quotTongPrice != null">quot_tong_price,</if>
<if test="quotMatpriceDiff != null">quot_matprice_diff,</if>
<if test="quotPrint != null">quot_print,</if>
<if test="quotPrintUserName != null">quot_print_user_name,</if>
<if test="createBy != null">create_by,</if>
<if test="quotFeedbackExplanation != null and quotFeedbackExplanation != ''">quot_feedback_explanation,</if>
<if test="quotQuantity != null and quotQuantity != ''">quot_quantity,</if>
<if test="quotTotalPrice != null and quotTotalPrice != ''">quot_total_price,</if>
<if test="quotCheckUserName != null and quotCheckUserName != ''">quot_check_user_name,</if>
<if test="quotApprovalStatus != null and quotApprovalStatus != ''">quot_approval_status,</if>
<if test="quotMaterialsCount != null and quotMaterialsCount != ''">quot_materials_count,</if>
<if test="quotLvPrice != null and quotLvPrice != ''">quot_lv_price,</if>
<if test="quotTongPrice != null and quotTongPrice != ''">quot_tong_price,</if>
<if test="quotMatpriceDiff != null and quotMatpriceDiff != ''">quot_matprice_diff,</if>
<if test="quotPrint != null and quotPrint != ''">quot_print,</if>
<if test="quotPrintUserName != null and quotPrintUserName != ''">quot_print_user_name,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateBy != null and updateBy != ''">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="quotJsxzStandard != null">quot_jsxz_standard,</if>
<if test="quotJsxzApprovalStatus != null">quot_jsxz_approval_status,</if>
<if test="quotJsxzChapter != null">quot_jsxz_chapter,</if>
<if test="quotJsxzTechnicalRequirement != null">quot_jsxz_technical_requirement,</if>
<if test="quotJsxzGroupValues != null">quot_jsxz_group_values,</if>
<if test="quotJsxzConfirmId != null">quot_jsxz_confirm_id,</if>
<if test="quotJsxzStandard != null and quotJsxzStandard != ''">quot_jsxz_standard,</if>
<if test="quotJsxzApprovalStatus != null and quotJsxzApprovalStatus != ''">quot_jsxz_approval_status,</if>
<if test="quotJsxzChapter != null and quotJsxzChapter != ''">quot_jsxz_chapter,</if>
<if test="quotJsxzTechnicalRequirement != null and quotJsxzTechnicalRequirement != ''">quot_jsxz_technical_requirement,</if>
<if test="quotJsxzGroupValues != null and quotJsxzGroupValues != ''">quot_jsxz_group_values,</if>
<if test="quotJsxzConfirmId != null and quotJsxzConfirmId != ''">quot_jsxz_confirm_id,</if>
<if test="quotHjId != null">quot_hj_id,</if>
<if test="quotHjApprovalStatus != null">quot_hj_approval_status,</if>
<if test="quotHjId != null and quotHjId != ''">quot_hj_id,</if>
<if test="quotHjApprovalStatus != null and quotHjApprovalStatus != ''">quot_hj_approval_status,</if>
<if test="quotJswApprovalStatus != null">quot_jsw_approval_status,</if>
<if test="quotOAApprovalStatus != null">quot_oa_approval_status,</if>
<if test="quotJswApprovalStatus != null and quotJswApprovalStatus != ''">quot_jsw_approval_status,</if>
<if test="quotOAApprovalStatus != null and quotOAApprovalStatus != ''">quot_oa_approval_status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="quotId != null and quotId != ''">#{quotId},</if>
@ -265,44 +267,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quotSalesmanName != null and quotSalesmanName != ''">#{quotSalesmanName},</if>
<if test="quotCustomerBm != null and quotCustomerBm != ''">#{quotCustomerBm},</if>
<if test="quotCustomerName != null and quotCustomerName != ''">#{quotCustomerName},</if>
<if test="quotSalesmanDeptId != null">#{quotSalesmanDeptId},</if>
<if test="quotSalesmanDeptName != null">#{quotSalesmanDeptName},</if>
<if test="quotAddress != null">#{quotAddress},</if>
<if test="quotContacts != null">#{quotContacts},</if>
<if test="quotPhone != null">#{quotPhone},</if>
<if test="quotSalesmanDeptId != null and quotSalesmanDeptId != ''">#{quotSalesmanDeptId},</if>
<if test="quotSalesmanDeptName != null and quotSalesmanDeptName != ''">#{quotSalesmanDeptName},</if>
<if test="quotAddress != null and quotAddress != ''">#{quotAddress},</if>
<if test="quotContacts != null and quotContacts != ''">#{quotContacts},</if>
<if test="quotPhone != null and quotPhone != ''">#{quotPhone},</if>
<if test="quotInquiryDate != null">#{quotInquiryDate},</if>
<if test="quotProject != null and quotProject != ''">#{quotProject},</if>
<if test="quotQuotationDate != null">#{quotQuotationDate},</if>
<if test="quotQuotationFrom != null">#{quotQuotationFrom},</if>
<if test="quotQuotationFrom != null and quotQuotationFrom != ''">#{quotQuotationFrom},</if>
<if test="quotQuotationRequire != null and quotQuotationRequire != ''">#{quotQuotationRequire},</if>
<if test="quotFeedbackExplanation != null">#{quotFeedbackExplanation},</if>
<if test="quotQuantity != null">#{quotQuantity},</if>
<if test="quotTotalPrice != null">#{quotTotalPrice},</if>
<if test="quotCheckUserName != null">#{quotCheckUserName},</if>
<if test="quotApprovalStatus != null">#{quotApprovalStatus},</if>
<if test="quotMaterialsCount != null">#{quotMaterialsCount},</if>
<if test="quotLvPrice != null">#{quotLvPrice},</if>
<if test="quotTongPrice != null">#{quotTongPrice},</if>
<if test="quotMatpriceDiff != null">#{quotMatpriceDiff},</if>
<if test="quotPrint != null">#{quotPrint},</if>
<if test="quotPrintUserName != null">#{quotPrintUserName},</if>
<if test="createBy != null">#{createBy},</if>
<if test="quotFeedbackExplanation != null and quotFeedbackExplanation != ''">#{quotFeedbackExplanation},</if>
<if test="quotQuantity != null and quotQuantity != ''">#{quotQuantity},</if>
<if test="quotTotalPrice != null and quotTotalPrice != ''">#{quotTotalPrice},</if>
<if test="quotCheckUserName != null and quotCheckUserName != ''">#{quotCheckUserName},</if>
<if test="quotApprovalStatus != null and quotApprovalStatus != ''">#{quotApprovalStatus},</if>
<if test="quotMaterialsCount != null and quotMaterialsCount != ''">#{quotMaterialsCount},</if>
<if test="quotLvPrice != null and quotLvPrice != ''">#{quotLvPrice},</if>
<if test="quotTongPrice != null and quotTongPrice != ''">#{quotTongPrice},</if>
<if test="quotMatpriceDiff != null and quotMatpriceDiff != ''">#{quotMatpriceDiff},</if>
<if test="quotPrint != null and quotPrint != ''">#{quotPrint},</if>
<if test="quotPrintUserName != null and quotPrintUserName != ''">#{quotPrintUserName},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateBy != null and updateBy != ''">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="quotJsxzStandard != null">#{quotJsxzStandard},</if>
<if test="quotJsxzApprovalStatus != null">#{quotJsxzApprovalStatus},</if>
<if test="quotJsxzChapter != null">#{quotJsxzChapter},</if>
<if test="quotJsxzTechnicalRequirement != null">#{quotJsxzTechnicalRequirement},</if>
<if test="quotJsxzGroupValues != null">#{quotJsxzGroupValues},</if>
<if test="quotJsxzConfirmId != null">#{quotJsxzConfirmId},</if>
<if test="quotJsxzStandard != null and quotJsxzStandard != ''">#{quotJsxzStandard},</if>
<if test="quotJsxzApprovalStatus != null and quotJsxzApprovalStatus != ''">#{quotJsxzApprovalStatus},</if>
<if test="quotJsxzChapter != null and quotJsxzChapter != ''">#{quotJsxzChapter},</if>
<if test="quotJsxzTechnicalRequirement != null and quotJsxzTechnicalRequirement != ''">#{quotJsxzTechnicalRequirement},</if>
<if test="quotJsxzGroupValues != null and quotJsxzGroupValues != ''">#{quotJsxzGroupValues},</if>
<if test="quotJsxzConfirmId != null and quotJsxzConfirmId != ''">#{quotJsxzConfirmId},</if>
<if test="quotHjId != null">#{quotHjId},</if>
<if test="quotHjApprovalStatus != null">#{quotHjApprovalStatus},</if>
<if test="quotHjId != null and quotHjId != ''">#{quotHjId},</if>
<if test="quotHjApprovalStatus != null and quotHjApprovalStatus != ''">#{quotHjApprovalStatus},</if>
<if test="quotJswApprovalStatus != null">#{quotJswApprovalStatus},</if>
<if test="quotOAApprovalStatus != null">#{quotOAApprovalStatus},</if>
<if test="quotJswApprovalStatus != null and quotJswApprovalStatus != ''">#{quotJswApprovalStatus},</if>
<if test="quotOAApprovalStatus != null and quotOAApprovalStatus != ''">#{quotOAApprovalStatus},</if>
</trim>
</insert>
@ -320,16 +322,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quotCode != null and quotCode != ''">quot_code,</if>
<if test="quotSalesmanName != null and quotSalesmanName != ''">quot_salesman_name,</if>
<if test="quotCustomerName != null and quotCustomerName != ''">quot_customer_name,</if>
<if test="quotAddress != null">quot_address,</if>
<if test="quotPhone != null">quot_phone,</if>
<if test="quotAddress != null and quotAddress != ''">quot_address,</if>
<if test="quotPhone != null and quotPhone != ''">quot_phone,</if>
<if test="quotInquiryDate != null">quot_inquiry_date,</if>
<if test="quotProject != null and quotProject != ''">quot_project,</if>
<if test="quotQuotationRequire != null and quotQuotationRequire != ''">quot_quotation_require,</if>
<if test="quotLvPrice != null">quot_lv_price,</if>
<if test="quotTongPrice != null">quot_tong_price,</if>
<if test="quotMatpriceDiff != null">quot_matprice_diff,</if>
<if test="quotLvPrice != null and quotLvPrice != ''">quot_lv_price,</if>
<if test="quotTongPrice != null and quotTongPrice != ''">quot_tong_price,</if>
<if test="quotMatpriceDiff != null and quotMatpriceDiff != ''">quot_matprice_diff,</if>
<if test="createTime != null">create_time,</if>
<if test="isFinish != null">isFinish,</if>
<if test="isFinish != null and isFinish != ''">isFinish,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null and userId != ''">#{userId},</if>
@ -339,16 +341,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quotCode != null and quotCode != ''">#{quotCode},</if>
<if test="quotSalesmanName != null and quotSalesmanName != ''">#{quotSalesmanName},</if>
<if test="quotCustomerName != null and quotCustomerName != ''">#{quotCustomerName},</if>
<if test="quotAddress != null">#{quotAddress},</if>
<if test="quotPhone != null">#{quotPhone},</if>
<if test="quotAddress != null and quotAddress != ''">#{quotAddress},</if>
<if test="quotPhone != null and quotPhone != ''">#{quotPhone},</if>
<if test="quotInquiryDate != null">#{quotInquiryDate},</if>
<if test="quotProject != null and quotProject != ''">#{quotProject},</if>
<if test="quotQuotationRequire != null and quotQuotationRequire != ''">#{quotQuotationRequire},</if>
<if test="quotLvPrice != null">#{quotLvPrice},</if>
<if test="quotTongPrice != null">#{quotTongPrice},</if>
<if test="quotMatpriceDiff != null">#{quotMatpriceDiff},</if>
<if test="quotLvPrice != null and quotLvPrice != ''">#{quotLvPrice},</if>
<if test="quotTongPrice != null and quotTongPrice != ''">#{quotTongPrice},</if>
<if test="quotMatpriceDiff != null and quotMatpriceDiff != ''">#{quotMatpriceDiff},</if>
<if test="createTime != null">#{createTime},</if>
<if test="isFinish != null">#{isFinish},</if>
<if test="isFinish != null and isFinish != ''">#{isFinish},</if>
</trim>
</insert>
@ -362,44 +364,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quotSalesmanName != null and quotSalesmanName != ''">quot_salesman_name = #{quotSalesmanName},</if>
<if test="quotCustomerBm != null and quotCustomerBm != ''">quot_customer_bm = #{quotCustomerBm},</if>
<if test="quotCustomerName != null and quotCustomerName != ''">quot_customer_name = #{quotCustomerName},</if>
<if test="quotSalesmanDeptId != null">quot_salesman_dept_id = #{quotSalesmanDeptId},</if>
<if test="quotSalesmanDeptName != null">quot_salesman_dept_name = #{quotSalesmanDeptName},</if>
<if test="quotAddress != null">quot_address = #{quotAddress},</if>
<if test="quotContacts != null">quot_contacts = #{quotContacts},</if>
<if test="quotPhone != null">quot_phone = #{quotPhone},</if>
<if test="quotSalesmanDeptId != null and quotSalesmanDeptId != ''">quot_salesman_dept_id = #{quotSalesmanDeptId},</if>
<if test="quotSalesmanDeptName != null and quotSalesmanDeptName != ''">quot_salesman_dept_name = #{quotSalesmanDeptName},</if>
<if test="quotAddress != null and quotAddress != ''">quot_address = #{quotAddress},</if>
<if test="quotContacts != null and quotContacts != ''">quot_contacts = #{quotContacts},</if>
<if test="quotPhone != null and quotPhone != ''">quot_phone = #{quotPhone},</if>
<if test="quotInquiryDate != null">quot_inquiry_date = #{quotInquiryDate},</if>
<if test="quotProject != null and quotProject != ''">quot_project = #{quotProject},</if>
<if test="quotQuotationDate != null">quot_quotation_date = #{quotQuotationDate},</if>
<if test="quotQuotationFrom != null">quot_quotation_from = #{quotQuotationFrom},</if>
<if test="quotQuotationFrom != null and quotQuotationFrom != ''">quot_quotation_from = #{quotQuotationFrom},</if>
<if test="quotQuotationRequire != null and quotQuotationRequire != ''">quot_quotation_require = #{quotQuotationRequire},</if>
<if test="quotFeedbackExplanation != null">quot_feedback_explanation = #{quotFeedbackExplanation},</if>
<if test="quotQuantity != null">quot_quantity = #{quotQuantity},</if>
<if test="quotTotalPrice != null">quot_total_price = #{quotTotalPrice},</if>
<if test="quotCheckUserName != null">quot_check_user_name = #{quotCheckUserName},</if>
<if test="quotApprovalStatus != null">quot_approval_status = #{quotApprovalStatus},</if>
<if test="quotMaterialsCount != null">quot_materials_count = #{quotMaterialsCount},</if>
<if test="quotLvPrice != null">quot_lv_price = #{quotLvPrice},</if>
<if test="quotTongPrice != null">quot_tong_price = #{quotTongPrice},</if>
<if test="quotMatpriceDiff != null">quot_matprice_diff = #{quotMatpriceDiff},</if>
<if test="quotPrint != null">quot_print = #{quotPrint},</if>
<if test="quotPrintUserName != null">quot_print_user_name = #{quotPrintUserName},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="quotFeedbackExplanation != null and quotFeedbackExplanation != ''">quot_feedback_explanation = #{quotFeedbackExplanation},</if>
<if test="quotQuantity != null and quotQuantity != ''">quot_quantity = #{quotQuantity},</if>
<if test="quotTotalPrice != null and quotTotalPrice != ''">quot_total_price = #{quotTotalPrice},</if>
<if test="quotCheckUserName != null and quotCheckUserName != ''">quot_check_user_name = #{quotCheckUserName},</if>
<if test="quotApprovalStatus != null and quotApprovalStatus != ''">quot_approval_status = #{quotApprovalStatus},</if>
<if test="quotMaterialsCount != null and quotMaterialsCount != ''">quot_materials_count = #{quotMaterialsCount},</if>
<if test="quotLvPrice != null and quotLvPrice != ''">quot_lv_price = #{quotLvPrice},</if>
<if test="quotTongPrice != null and quotTongPrice != ''">quot_tong_price = #{quotTongPrice},</if>
<if test="quotMatpriceDiff != null and quotMatpriceDiff != ''">quot_matprice_diff = #{quotMatpriceDiff},</if>
<if test="quotPrint != null and quotPrint != ''">quot_print = #{quotPrint},</if>
<if test="quotPrintUserName != null and quotPrintUserName != ''">quot_print_user_name = #{quotPrintUserName},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="quotJsxzStandard != null">quot_jsxz_standard = #{quotJsxzStandard},</if>
<if test="quotJsxzApprovalStatus != null">quot_jsxz_approval_status = #{quotJsxzApprovalStatus},</if>
<if test="quotJsxzChapter != null">quot_jsxz_chapter = #{quotJsxzChapter},</if>
<if test="quotJsxzTechnicalRequirement != null">quot_jsxz_technical_requirement = #{quotJsxzTechnicalRequirement},</if>
<if test="quotJsxzGroupValues != null">quot_jsxz_group_values = #{quotJsxzGroupValues},</if>
<if test="quotJsxzConfirmId != null">quot_jsxz_confirm_id = #{quotJsxzConfirmId},</if>
<if test="quotJsxzStandard != null and quotJsxzStandard != ''">quot_jsxz_standard = #{quotJsxzStandard},</if>
<if test="quotJsxzApprovalStatus != null and quotJsxzApprovalStatus != ''">quot_jsxz_approval_status = #{quotJsxzApprovalStatus},</if>
<if test="quotJsxzChapter != null and quotJsxzChapter != ''">quot_jsxz_chapter = #{quotJsxzChapter},</if>
<if test="quotJsxzTechnicalRequirement != null and quotJsxzTechnicalRequirement != ''">quot_jsxz_technical_requirement = #{quotJsxzTechnicalRequirement},</if>
<if test="quotJsxzGroupValues != null and quotJsxzGroupValues != ''">quot_jsxz_group_values = #{quotJsxzGroupValues},</if>
<if test="quotJsxzConfirmId != null and quotJsxzConfirmId != ''">quot_jsxz_confirm_id = #{quotJsxzConfirmId},</if>
<if test="quotHjId != null">quot_hj_id = #{quotHjId},</if>
<if test="quotHjApprovalStatus != null">quot_hj_approval_status = #{quotHjApprovalStatus},</if>
<if test="quotHjId != null and quotHjId != ''">quot_hj_id = #{quotHjId},</if>
<if test="quotHjApprovalStatus != null and quotHjApprovalStatus != ''">quot_hj_approval_status = #{quotHjApprovalStatus},</if>
<if test="quotJswApprovalStatus != null">quot_jsw_approval_status = #{quotJswApprovalStatus},</if>
<if test="quotOAApprovalStatus != null">quot_oa_approval_status = #{quotOAApprovalStatus},</if>
<if test="quotJswApprovalStatus != null and quotJswApprovalStatus != ''">quot_jsw_approval_status = #{quotJswApprovalStatus},</if>
<if test="quotOAApprovalStatus != null and quotOAApprovalStatus != ''">quot_oa_approval_status = #{quotOAApprovalStatus},</if>
</trim>
where quot_id = #{quotId}
</update>
@ -499,4 +501,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getCode" resultType="String" statementType="CALLABLE">
{call GetSerialNo(#{type,mode=IN,jdbcType=VARCHAR})}
</select>
<select id="selectStatisticsQuotList" parameterType="Quot" resultMap="QuotResult">
<include refid="selectQuotVo"/>
<where>
<if test="quotCode != null and quotCode != ''"> and quot_code like concat('%', #{quotCode}, '%')</if>
<if test="quotCustomerName != null and quotCustomerName != ''"> and quot_customer_name like concat('%', #{quotCustomerName}, '%')</if>
<if test="quotProject != null and quotProject != ''"> and quot_project like concat('%', #{quotProject}, '%')</if>
<if test="quotSalesmanName != null and quotSalesmanName != ''"> and quot_salesman_name like concat('%', #{quotSalesmanName}, '%')</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
and datediff(d, a.quot_quotation_date, #{params.beginTime}) <![CDATA[<=]]> 0
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
and datediff(d, a.quot_quotation_date, #{params.endTime}) <![CDATA[>=]]> 0
</if>
and a.quot_approval_status = '2'
</where>
order by a.quot_quotation_date desc
</select>
</mapper>

View File

@ -183,6 +183,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and (B.sta_0=1 or sta_0=0)
</select>
<select id="getFixDatePrice3" resultType="OAQuotProduct">
select top 1 B.uid_0,A.namevoltage name_0,isnull(A.电压等级,N' - ') voltage,A.单位 stu,
A.型号 name_1,isnull(A.规格,'') spec
,convert(decimal,convert(float,A.红本价格)) price,convert(varchar(10),B.date_0,23) pricedate
from [rb_product_price] A
left join rb_productVersion B on A.version_uid_0=B.uid_0
where (B.sta_0=1 or sta_0=0) and A.namevoltage=#{name_0}
and B.uid_0 = #{uid_0}
</select>
<sql id="quotsJoins">
LEFT JOIN sys_user u on u.user_name=a.create_by
LEFT JOIN sys_dept d on u.dept_id = d.dept_id

View File

@ -39,6 +39,23 @@ export function getReturnUpdateQuot(quotId) {
})
}
// 查询报价详细-整单通过
export function getAllPass(quotId) {
return request({
url: '/quot/quot/allPass/' + quotId,
method: 'get'
})
}
// 查询报价详细-整单驳回
export function getAllReject(query) {
return request({
url: '/quot/quot/allReject',
method: 'post',
data: query
})
}
// 新增报价
export function addQuot(data) {
return request({
@ -161,3 +178,12 @@ export function rejectQuot(data) {
//统计有效报价单模块-获取报价单数据
export function listStatisticsQuotQuot(query) {
return request({
url: '/quot/quot/listStatisticsQuotQuot',
method: 'get',
params: query
})
}

View File

@ -108,6 +108,14 @@ export function saveQuot(data) {
data: data
})
}
//生成报价单
export function madeXjQuot(data) {
return request({
url: '/redBook/redBook/madeXjQuot',
method: 'post',
data: data
})
}
//提交报价单
export function commitQuot(data) {
return request({

View File

@ -36,7 +36,7 @@ $base-sub-menu-background:#000c17;
$base-sub-menu-hover:#001528;
*/
$base-sidebar-width: 200px;
$base-sidebar-width: 210px;
// the :export directive is the magic sauce for webpack
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass

View File

@ -107,7 +107,7 @@ export default {
dialogHeaderEl.onmousedown = null;
if (!hasSetBodyHight) {
let footerHeight = dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight;
dragDom.querySelector('.el-dialog__body').style.height = 'calc(100% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)';
dragDom.querySelector('.el-dialog__body').style.height = 'calc(100% - 110px)';
dragDom.querySelector('.el-dialog__body').style.maxHeight = dragDom.style.height
hasSetBodyHight = true;
}

View File

@ -19,7 +19,7 @@
</el-tooltip>-->
<!--消息组件-->
<NavbarNotice class="right-menu-item hover-effect"></NavbarNotice>
<!-- <NavbarNotice class="right-menu-item hover-effect"></NavbarNotice>-->
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<el-tooltip content="布局大小" effect="dark" placement="bottom">

View File

@ -147,7 +147,7 @@
},
mounted() {
// WebSocket
this.initWebSocket();
//this.initWebSocket();
},
created(){
this.getList();

View File

@ -18,7 +18,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 300000
timeout: 720000
})
// request拦截器

View File

@ -1,10 +1,10 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="价单号" prop="quotCode">
<el-form-item label="价单号" prop="quotCode">
<el-input
v-model="queryParams.quotCode"
placeholder="请输入价单号"
placeholder="请输入价单号"
clearable
@keyup.enter.native="handleQuery"
/>
@ -25,7 +25,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="业务员" prop="quotSalesmanName" v-if="checkRole(['QUOT'])">
<el-form-item label="业务员" prop="quotSalesmanName" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<el-input
v-model="queryParams.quotSalesmanName"
placeholder="请输入业务员"
@ -113,13 +113,35 @@
v-hasPermi="['quot:quot:returnUpdate']"
>错误修订</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleAllPass"
v-hasPermi="['quot:quot:allPass']"
>整单通过</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleAllReject"
v-hasPermi="['quot:quot:allReject']"
>整单驳回</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="quotList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="报价单ID" align="center" prop="quotId" v-if="false"/>
<el-table-column fixed label="报价单号" align="center" prop="quotCode" width="250px">
<el-table-column fixed label="价单号" align="center" prop="quotCode" width="250px">
<template slot-scope="scope">
<el-link :underline="false" type="primary" @click="handleUpdate(scope.row)">{{scope.row.quotCode}}</el-link>
</template>
@ -129,29 +151,6 @@
<dict-tag :options="dict.type.quot_approval_status" :value="scope.row.quotApprovalStatus"/>
</template>
</el-table-column>
<el-table-column label="业务员" align="center" prop="quotSalesmanName" width="150px"/>
<el-table-column label="客户名称" align="center" prop="quotCustomerName" width="250px"/>
<el-table-column label="项目名称" align="center" prop="quotProject" width="250px"/>
<el-table-column label="金思维提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="scope.row.quotJswApprovalStatus" v-if="scope.row.quotJswApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="OA提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_oa_approval_status" :value="scope.row.quotOAApprovalStatus" v-if="scope.row.quotOAApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="技术协助状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsxz_approval_status" :value="scope.row.quotJsxzApprovalStatus" v-if="scope.row.quotJsxzApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="核价协助状态" align="center" prop="quotHjApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_hj_approval_status" :value="scope.row.quotHjApprovalStatus" v-if="scope.row.quotHjApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="是否打印" align="center" prop="quotPrint" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')">
<template slot-scope="scope">
<el-switch
@ -163,8 +162,31 @@
></el-switch>
</template>
</el-table-column>
<el-table-column label="打印人" align="center" prop="quotPrintUserName" width="150px" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')"/>
<el-table-column label="金思维报价单号" align="center" prop="quotJswCode" width="280px" v-if="checkRole(['QUOT'])"/>
<el-table-column label="打印人" align="center" prop="quotPrintUserNickName" width="150px" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')"/>
<el-table-column label="OA提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_oa_approval_status" :value="scope.row.quotOAApprovalStatus" v-if="scope.row.quotOAApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="业务员" align="center" prop="quotSalesmanName" width="150px"/>
<el-table-column label="客户名称" align="center" prop="quotCustomerName" width="250px"/>
<el-table-column label="项目名称" align="center" prop="quotProject" width="250px"/>
<el-table-column label="金思维提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="scope.row.quotJswApprovalStatus" v-if="scope.row.quotJswApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="技术协助状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsxz_approval_status" :value="scope.row.quotJsxzApprovalStatus" v-if="scope.row.quotJsxzApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="核价协助状态" align="center" prop="quotHjApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_hj_approval_status" :value="scope.row.quotHjApprovalStatus" v-if="scope.row.quotHjApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="金思维报价单号" align="center" prop="quotJswCode" width="280px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])"/>
<el-table-column label="询价日期" align="center" prop="quotInquiryDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.quotInquiryDate) }}</span>
@ -175,7 +197,7 @@
<span>{{ parseTime(scope.row.quotQuotationDate) }}</span>
</template>
</el-table-column>
<el-table-column label="" align="center" prop="quotQuantity" width="100"/>
<el-table-column label="明细条数" align="center" prop="quotMaterialsCount" width="100"/>
<el-table-column label="反馈说明" align="center" prop="quotFeedbackExplanation" width="150px"/>
<el-table-column label="创建人" align="center" prop="createName" width="150px"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
@ -208,17 +230,17 @@
</el-form-item>
</el-col>
<div v-if="checkPermi(['quot:quot:xzInfo'])">
<el-col :span="4">
<el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
<el-form-item label="技术协助" prop="quotJsxzApprovalStatus">
<dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotJsxzApprovalStatus"/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
<el-form-item label="核价协助" prop="quotHjApprovalStatus">
<dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotHjApprovalStatus"/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
<el-form-item label="金思维协助" prop="quotJswApprovalStatus">
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="this.form.quotJswApprovalStatus"/>
</el-form-item>
@ -234,7 +256,7 @@
<el-divider content-position="left" class="customer_divider_text">报价信息</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="价单号" prop="quotCode">
<el-form-item label="价单号" prop="quotCode">
<el-input v-model="form.quotCode" placeholder="系统自动生成" :disabled="true"/>
</el-form-item>
</el-col>
@ -340,8 +362,8 @@
</el-form-item>
</el-col>
<el-col :span="6" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<el-form-item label="打印人" prop="quotPrintUserName">
<el-input v-model="form.quotPrintUserName" :disabled="true"/>
<el-form-item label="打印人" prop="quotPrintUserNickName">
<el-input v-model="form.quotPrintUserNickName" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
@ -367,14 +389,14 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8" v-if="checkRole(['QUOT','SALES_MAN'])">
<el-row :gutter="8" v-if="checkRole(['QUOT','PRICE_VERIFICATION','SALES_MAN'])">
<el-col :span="24" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null">
<el-form-item label="反馈说明" prop="quotFeedbackExplanation">
<el-input type="textarea" autosize v-model="form.quotFeedbackExplanation" placeholder="报价组填写" :disabled="this.form.quotApprovalStatus == 2"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8" v-if="checkRole(['QUOT'])">
<el-row :gutter="8" v-if="checkRole(['QUOT','PRICE_VERIFICATION','SALES_MAN'])">
<el-col :span="24" v-if="this.form.quotOAApprovalStatus == '2' || this.form.quotOAApprovalStatus == '3'">
<el-form-item label="OA审批说明" prop="quotOAApprovalStatusRemark">
<el-input type="textarea" autosize v-model="form.quotOAApprovalStatusRemark" :disabled="true"/>
@ -384,19 +406,26 @@
<el-divider content-position="left" class="customer_divider_text">清单附件(先保存再上传且必须是EXCEL文件)</el-divider>
<div v-hasPermi="['quot:quot:quotXjFile']">
<el-upload class="upload-demo"
ref="quotXjFileUpload"
name="quotFile"
:action="uploadUrl"
:headers="headers"
:data="{ relation_id: this.form.quotId,file_type: 'quotXjFile' }"
:before-upload="beforeAvatarUploadQuotXjFile"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
v-if="this.form.quotApprovalStatus == '0'">
<el-button size="small" type="primary" @click="uploadFile('quotXjFile')">上传文件</el-button>
</el-upload>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-upload class="upload-demo"
ref="quotXjFileUpload"
name="quotFile"
:action="uploadUrl"
:headers="headers"
:data="{ relation_id: this.form.quotId,file_type: 'quotXjFile' }"
:before-upload="beforeAvatarUploadQuotXjFile"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
v-if="this.form.quotApprovalStatus == '0'">
<el-button size="mini" type="primary" @click="uploadFile('quotXjFile')">上传文件</el-button>
</el-upload>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-download" size="mini" @click="importTemplate">清单附件模版下载</el-button>
</el-col>
</el-row>
</div>
<el-table class="down" v-loading="quotXjFileLoading" :data="quotXjFileList" border stripe style="width: 100%;margin-top: 10px;" height="200px">
<el-table-column prop="fileName" label="文件名称" ></el-table-column>
@ -432,7 +461,7 @@
:show-file-list="false"
:limit="1"
v-if="this.form.quotApprovalStatus == '0'">
<el-button size="small" type="primary" @click="uploadFile('quotJsgfFile')">上传文件</el-button>
<el-button size="mini" type="primary" @click="uploadFile('quotJsgfFile')">上传文件</el-button>
</el-upload>
</div>
<el-table class="down" v-loading="quotJsgfFileLoading" :data="quotJsgfFileList" border stripe style="width: 100%;margin-top: 10px;" height="200px">
@ -458,14 +487,17 @@
<el-divider content-position="left" class="customer_divider_text">产品信息</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!--<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddQuotMaterial" v-if="this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null">添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeleteQuotMaterial" v-if="this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null">删除</el-button>
</el-col>
<el-col :span="1.5">
</el-col>-->
<!-- <el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-if="(this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null) || checkRole(['QUOT','PRICE_VERIFICATION'])">导入</el-button>
</el-col>-->
<el-col :span="1.5" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
</el-col>
<el-col :span="1.5" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleExportMaterial">导出</el-button>
@ -509,22 +541,22 @@
<el-input v-model="scope.row.matMatprice" :disabled="true"/>
</template>
</el-table-column>
<el-table-column label="红本单价" prop="matPrice" v-if="checkRole(['QUOT','QUOT_MAT_PRICE_DIFF'])" width="130">
<el-table-column label="红本单价" prop="matPrice" v-if="checkRole(['QUOT','PRICE_VERIFICATION','QUOT_MAT_PRICE_DIFF'])" width="130">
<template slot-scope="scope">
<el-input v-model="scope.row.matPrice" :disabled="true"/>
</template>
</el-table-column>
<el-table-column label="特批下点" prop="matQuotTp" v-if="checkRole(['QUOT','QUOT_MAT_PRICE_DIFF'])" width="100">
<el-table-column label="特批下点" prop="matQuotTp" v-if="checkRole(['QUOT','PRICE_VERIFICATION','QUOT_MAT_PRICE_DIFF'])" width="100">
<template slot-scope="scope">
<el-input v-model="scope.row.matQuotTp" :disabled="true"/>
</template>
</el-table-column>
<el-table-column label="报价单价" prop="matQuotPrice" v-if="checkRole(['QUOT','QUOT_MAT_PRICE_DIFF'])" width="130">
<el-table-column label="报价单价" prop="matQuotPrice" v-if="checkRole(['QUOT','PRICE_VERIFICATION','SALES_MAN','QUOT_MAT_PRICE_DIFF'])" width="130">
<template slot-scope="scope">
<el-input v-model="scope.row.matQuotPrice" :disabled="true"/>
</template>
</el-table-column>
<el-table-column label="报价小计" prop="matQuotAllPrice" v-if="checkRole(['QUOT','QUOT_MAT_PRICE_DIFF'])" width="130">
<el-table-column label="报价小计" prop="matQuotAllPrice" v-if="checkRole(['QUOT','PRICE_VERIFICATION','SALES_MAN','QUOT_MAT_PRICE_DIFF'])" width="130">
<template slot-scope="scope">
<el-input v-model="scope.row.matQuotAllPrice" :disabled="true"/>
</template>
@ -549,7 +581,7 @@
:show-file-list="false"
:limit="1"
v-if="this.form.quotApprovalStatus == '1'">
<el-button size="small" type="primary" @click="uploadFile('quotFkFile')">上传文件</el-button>
<el-button size="mini" type="primary" @click="uploadFile('quotFkFile')">上传文件</el-button>
</el-upload>
</div>
<el-table class="down" v-loading="quotFkFileLoading" :data="quotFkFileList" border stripe style="width: 100%;margin-top: 10px;" height="200px">
@ -571,12 +603,11 @@
</el-table-column>
</el-table>
<!-- 技术协助块-->
<div v-if="checkPermi(['quot:quot:jsxzInfo'])">
<el-divider content-position="left" class="customer_divider_text">技术协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<!--<el-col :span="8">
<el-form-item label="标准" prop="quotJsxzStandard">
<el-select v-model="form.quotJsxzStandard" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option
@ -587,7 +618,7 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-col>-->
<el-col :span="8">
<el-form-item label="技术协助状态" prop="quotJsxzApprovalStatus">
<el-select v-model="form.quotJsxzApprovalStatus" :disabled="true">
@ -600,7 +631,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<!--<el-col :span="8">
<el-form-item label="是否盖技术章" prop="quotJsxzChapter">
<el-select v-model="form.quotJsxzChapter" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option
@ -611,7 +642,7 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-col>-->
</el-row>
<el-row :gutter="8">
<el-col :span="12">
@ -914,7 +945,7 @@
<span style="margin-left: 10px" v-hasPermi="['quot:quot:assistHj']"><el-button type="primary" plain @click="commitHjForm" v-if="this.form.quotApprovalStatus == '1'&&this.form.quotHjApprovalStatus == '0'">提交核价审核</el-button></span>
<!-- 业务员报价组生成报价单-->
<span style="float:left" v-hasPermi="['quot:quot:madeQuot']"><el-button type="warning" plain @click="madeQuot" v-if="this.form.quotApprovalStatus == '2'||checkRole(['QUOT'])">生成报价单</el-button></span>
<span style="float:left" v-hasPermi="['quot:quot:madeQuot']"><el-button type="warning" plain @click="madeQuot" v-if="this.form.quotApprovalStatus == '2'||!checkRole(['SALES_MAN'])">生成报价单</el-button></span>
<!-- 报价组提交金思维OA-->
<span style="margin-left: 10px;float:left" v-hasPermi="['quot:quot:assistJsw']"><el-button type="warning" plain @click="commitJswForm" v-if="this.form.quotApprovalStatus == '1'&&(this.form.quotJswApprovalStatus == '0'||this.form.quotJswApprovalStatus == '2')">提交金思维</el-button></span>
@ -999,7 +1030,7 @@
</style>
<script>
import { NumberAdd } from '@/utils/number';//
import { changQuotPrintStatus,listQuot, getQuot, getReturnUpdateQuot, delQuot, addQuot, updateQuot, quotFileList, quotFileDelete, commitQuot, commitJsQuot, commitHjQuot, commitJswQuot, commitOAQuot, feedbackQuot, madeQuot, rejectQuot } from "@/api/quot/quot";
import { changQuotPrintStatus,listQuot, getQuot, getReturnUpdateQuot,getAllPass,getAllReject, delQuot, addQuot, updateQuot, quotFileList, quotFileDelete, commitQuot, commitJsQuot, commitHjQuot, commitJswQuot, commitOAQuot, feedbackQuot, madeQuot, rejectQuot } from "@/api/quot/quot";
import { getToken } from "@/utils/auth";
import { checkPermi,checkRole } from '@/utils/permission';//
import { getDicts } from "@/api/system/dict/data";
@ -1201,6 +1232,7 @@ export default {
quotApprovalStatus: null,
quotPrintUserName: null,
quotPrintUserNickName: null,
quotMaterialsCount: null,
quotTongPrice: null,
quotLvPrice: null,
@ -1296,7 +1328,6 @@ export default {
handleReturnUpdate(row) {
this.reset();
const quotId = row.quotId || this.ids
let self = this;
this.$modal.confirm('是否确认修订所选报价单且更新状态为协助中?').then(function() {
}).then(() => {
getReturnUpdateQuot(quotId).then(response => {
@ -1305,6 +1336,39 @@ export default {
});
}).catch(() => {});
},
//
handleAllPass(row) {
this.reset();
const quotId = row.quotId || this.ids
this.$modal.confirm('是否确认修订所选报价单且更新状态为通过?').then(function() {
}).then(() => {
getAllPass(quotId).then(response => {
this.$modal.msgSuccess("更改成功");
this.getList();
});
}).catch(() => {});
},
//
handleAllReject(row) {
this.reset();
const quotId = row.quotId || this.ids;
this.$prompt('请输入驳回原因', '是否确认修订所选报价单且更新状态为驳回?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /^.+$/,
inputErrorMessage: '驳回原因必填'
}).then(({ value }) => {
this.form = {
"quotId":quotId[0],
"quotFeedbackExplanation":value
}
getAllReject(this.form).then(response => {
this.$modal.msgSuccess("更改成功");
this.getList();
});
}).catch(() => {});
},
/** 修改按钮操作-详细信息设置 */
setInfo(response){
@ -1570,36 +1634,38 @@ export default {
/** 对产品数据-数量、金额进行合算 */
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
const values = data.map(item => Number(item[column.property]));
if (column.property === 'matSl' || column.property === 'matQuotAllPrice') {
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return NumberAdd(prev,curr);
}else {
return prev;
}
}, 0);
} else {
sums[index] = ''
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
}
});
this.form.quotQuantity = sums[6];
this.form.quotTotalPrice = checkRole(['QUOT_MAT_PRICE_DIFF'])? sums[12] : sums[11];
this.form.quotMaterialsCount = data.length;
return sums;
const values = data.map(item => Number(item[column.property]));
if (column.property === 'matSl' || column.property === 'matQuotAllPrice') {
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return NumberAdd(prev,curr);
}else {
return prev;
}
}, 0);
} else {
sums[index] = ''
}
}
});
this.form.quotQuantity = sums[6];
this.form.quotTotalPrice = this.form.quotTotalPrice?this.form.quotTotalPrice:checkRole(['QUOT_MAT_PRICE_DIFF'])? sums[12] : sums[11];
this.form.quotMaterialsCount = this.form.quotMaterialsCount?this.form.quotMaterialsCount:data.length;
return sums;
},
/*********************************附件列表数据展示、上传*****************************************/
//-
getQuotXjFileList(){
@ -1613,11 +1679,13 @@ export default {
const param = {relationId:this.form.quotId,fileType:'quotFkFile'}
//
if(this.form.quotApprovalStatus!='1' && checkRole(['SALES_MAN'])){
quotFileList(param).then(response => {
this.quotFkFileList = response.rows;
});
}else if(checkRole(['QUOT'])){
if(checkRole(['SALES_MAN'])){
if(this.form.quotApprovalStatus!='1'){
quotFileList(param).then(response => {
this.quotFkFileList = response.rows;
});
}
}else{
quotFileList(param).then(response => {
this.quotFkFileList = response.rows;
});
@ -1692,7 +1760,8 @@ export default {
this.quotXjFileLoading = true;
let activeName = this.activeName;
if(activeName=='quotXjFile'){
if(file.name.split('.')[1].toLowerCase() != 'xls' && file.name.split('.')[1].toLowerCase() != 'xlsx'){
const fileExtension = file.name.split('.').pop();
if(fileExtension.toLowerCase() != 'xls' && fileExtension.toLowerCase() != 'xlsx'){
this.$modal.msgError("清单附件必须是Excel格式");
this.quotXjFileLoading = false;
return false;

View File

@ -8,6 +8,7 @@
<el-button style="float: right;" size="mini" type="primary" icon="el-icon-search" @click="handleSearchClick">搜索</el-button>
</el-col>
<el-col :span="14">
<!--<el-button style="float: right;margin-left: 5px;" size="mini" type="primary" icon="el-icon-document" @click="handleMadeXjQuotClick" :disabled="selectedResultData.length==0 || madeQuotDis">生成询价单</el-button>-->
<el-button style="float: right;margin-left: 5px;" size="mini" type="success" icon="el-icon-document" @click="handleMadeQuotClick" :disabled="selectedResultData.length==0 || madeQuotDis">生成报价单</el-button>
<el-button style="float: right;margin-left: 5px;" size="mini" type="warning" icon="el-icon-folder" @click="handleSaveClick" :disabled="selectedResultData.length==0">保存</el-button>
<el-button style="float: right;margin-left: 5px;" size="mini" icon="el-icon-refresh" @click="handleRefreshClick">清空信息</el-button>
@ -153,7 +154,7 @@
</template>
</el-table-column>
<el-table-column label="版本uid" align="center" prop="uid_0" v-if="false"/>
<el-table-column label="产品型号" align="center" prop="name_0" width="200" />
<el-table-column label="产品型号" align="center" prop="name_0" width="200"/>
<el-table-column label="型号" align="center" prop="name_1" v-if="false"/>
<el-table-column label="规格" align="center" prop="spec" v-if="false"/>
<el-table-column label="电压" align="center" prop="voltage"/>
@ -269,7 +270,7 @@
</style>
<script>
import {toDecimal, productList,versionList,productRemarkList,productXinghList,judgeparent,productZlList,productYsxhListCheck,productYsxhList,productJmListCheck,productJmList,searchData,handleSearchData,saveQuot, madeQuot,updateSelectedResultData} from "@/api/redBook/redBook";
import {toDecimal, productList,versionList,productRemarkList,productXinghList,judgeparent,productZlList,productYsxhListCheck,productYsxhList,productJmListCheck,productJmList,searchData,handleSearchData,saveQuot, madeQuot, madeXjQuot, updateSelectedResultData} from "@/api/redBook/redBook";
import { getToken } from "@/utils/auth";
export default {
name: "productSelect",
@ -348,7 +349,7 @@
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/redBook/redBook/importData"
url: process.env.VUE_APP_BASE_API + "/redBook/redBook/importData2"
},
//
@ -624,10 +625,13 @@
},
/** 已选结果数据里存在所选调价版本不一致的数据 */
cellStyle({ row }){
cellStyle({ row, columnIndex }){
if(row.uid_0 != this.form.rbDateUid){
return {'background-color':'#ff494959'}
}
if(!row.stu && (columnIndex == 2 || columnIndex == 3)){
return 'color:red'
}
},
//
@ -776,6 +780,34 @@
});
},
//
handleMadeXjQuotClick() {
this.form.selectedResultData = this.selectedResultData;
madeXjQuot(this.form).then(response => {
//this.$modal.msgSuccess(",:"+response.data.quotCode);
//
const content = response;
const blob = new Blob([content]);
const fileName = "RB_BJD_"+this.getTodayCourse()+".xls";
if ("download" in document.createElement("a")) {
// IE
const elink = document.createElement("a");
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // URL
document.body.removeChild(elink);
}else {
// IE10+
navigator.msSaveBlob(blob, fileName);
}
});
},
/** 产品数据导入按钮操作 */
handleImport() {
this.productUpload.title = "产品数据导入";
@ -783,7 +815,7 @@
},
/** 下载模板操作 */
importTemplate() {
this.download('redBook/redBook/importTemplate', {
this.download('redBook/redBook/importTemplate2', {
}, `product_template_${new Date().getTime()}.xlsx`)
},
//

View File

@ -0,0 +1,179 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="报价时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item label="报价单号" prop="quotCode">
<el-input
v-model="queryParams.quotCode"
placeholder="请输入报价单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="客户名称" prop="quotCustomerName">
<el-input
v-model="queryParams.quotCustomerName"
placeholder="请输入客户名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="项目名称" prop="quotProject">
<el-input
v-model="queryParams.quotProject"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="业务员" prop="quotSalesmanName">
<el-input
v-model="queryParams.quotSalesmanName"
placeholder="请输入业务员"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row>
<el-col :span="4">
<span>总条数:{{sumQuotMaterialsCount}}</span>
</el-col>
<el-col :span="4">
<span>总价:{{sumQuotTotalPrice}}</span>
</el-col>
</el-row>
<el-table v-loading="loading" :data="quotList" style="width: 100%;margin-top: 10px;" :height="tableHeight">
<el-table-column fixed label="报价单号" align="center" prop="quotCode" width="250px"/>
<el-table-column fixed label="业务员" align="center" prop="quotSalesmanName" width="150px"/>
<el-table-column fixed label="客户名称" align="center" prop="quotCustomerName" width="250px"/>
<el-table-column fixed label="项目名称" align="center" prop="quotProject" width="250px"/>
<el-table-column label="明细条数" align="center" prop="quotMaterialsCount" width="100"/>
<el-table-column label="总价" align="center" prop="quotTotalPrice" width="100"/>
<!--<el-table-column label="金思维报价单号" align="center" prop="quotJswCode" width="280px"/>-->
<el-table-column label="询价日期" align="center" prop="quotInquiryDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.quotInquiryDate) }}</span>
</template>
</el-table-column>
<el-table-column label="报价日期" align="center" prop="quotQuotationDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.quotQuotationDate) }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createName" width="150px"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="审核人" align="center" prop="quotCheckUserNickname" width="160" />
<el-table-column label="报价时间" align="center" prop="quotQuotationDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.quotQuotationDate) }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { listStatisticsQuotQuot } from "@/api/quot/quot"; //
import {toDecimal} from "@/api/redBook/redBook";
import { getNowDate } from '@/utils/date'
export default {
name: "statisticsQuot",
data() {
return {
//
loading: true,
//
showSearch: true,
//
total: 0,
//
dateRange: [getNowDate(),getNowDate()],
//
quotList: [],
//
tableHeight: window.innerHeight - 240, //
screenHeight: window.innerHeight, //
//
queryParams: {
quotCode: null,
quotCustomerName: null,
quotSalesmanName: null,
quotProject: null
}
};
},
created() {
this.getList();
},
methods: {
/** 查询报价列表 */
getList() {
this.loading = true;
listStatisticsQuotQuot(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.quotList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
}
},
computed: {
//
sumQuotMaterialsCount() {
const quotMaterialsCount = this.quotList.reduce((sum, row) => sum + parseFloat(row.quotMaterialsCount==null?0:row.quotMaterialsCount), 0);
return toDecimal(quotMaterialsCount);
},
//
sumQuotTotalPrice() {
const quotTotalPrice = this.quotList.reduce((sum, row) => sum + parseFloat(row.quotTotalPrice==null?0:row.quotTotalPrice), 0);
return toDecimal(quotTotalPrice);
},
},
watch: {
// screenHeighttable
screenHeight(val) {
this.screenHeight = val
this.tableHeight = this.screenHeight - 260
}
},
mounted: function() {
window.onresize = () => {
return (() => {
window.screenHeight = window.innerHeight
this.screenHeight = window.screenHeight
})()
}
},
};
</script>

View File

@ -79,6 +79,30 @@
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="center">清单附件</el-divider>
<el-row :gutter="8">
<el-col :span="24">
<el-table class="down" :data="quotXjFileList" border stripe style="width: 100%;" height="150px">
<el-table-column prop="fileName" label="文件名称" width="450px"></el-table-column>
<el-table-column prop="fileSize" label="文件大小" width="100px">
<template slot-scope="scope">
<span v-if="scope.row.fileSize / 1024 / 1024 < 1">{{(scope.row.fileSize / 1024).toFixed(2) + 'KB'}}</span>
<span v-else>{{(scope.row.fileSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
</template>
</el-table-column>
<el-table-column prop="fileTime" label="上传时间"></el-table-column>
<el-table-column width="150px" label="操作">
<template slot-scope="scope">
<el-button :key="Math.random()" size="small" type="text">
<a @click="downloadFile(scope.row.fileUrl)">下载</a>
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-divider content-position="center">技术规范要求(技术附件)</el-divider>
<el-row :gutter="8">
<el-col :span="24">
@ -101,6 +125,7 @@
</el-table>
</el-col>
</el-row>
<div v-if="showTl">
<el-divider content-position="center">特缆协助</el-divider>
<div style="margin-bottom: 10px;text-align:right">
@ -799,6 +824,7 @@
isSelfProp: true,
// --
quotJsgfFileList: [],
quotXjFileList: [],
//--
uploadUrl: process.env.VUE_APP_BASE_API + "/quot/quot/quotFile",
//--
@ -922,6 +948,7 @@
};
this.quotJsgfFileList = [];
this.quotXjFileList = [];
this.quotJsqrFileList = [];
this.showTl = false;
@ -963,6 +990,7 @@
}
this.getQuotJsgfFileList();
this.getQuotXjFileList();
this.quotJsqrTlRemarkDisSet();//-/
this.quotJsqrDyRemarkDisSet();//-/
this.quotJsqrZyRemarkDisSet();//-/
@ -987,6 +1015,13 @@
this.quotJsgfFileList = response.rows;
});
},
//-
getQuotXjFileList(){
const param = {relationId:this.form.quotId,fileType:'quotXjFile'}
quotFileList(param).then(response => {
this.quotXjFileList = response.rows;
});
},
//
doOperate(quotJsxzGroup,type,state){