Browse Source

[feat] 采购管理

按照万材要求:采购报价单导出详情页面的数据+单号+单据创建时间
采购报价前端新增导出选择和导出所有的接口
新增 导出采购报价单详情模板实体类
采购报价后端新增导出全部和导出选择数据的接口
采购报价新增 根据采购报价单编号批量查询采购报价单方法
新增 导出采购报价单详情页面的数据+单号+单据创建时间的方法
采购报价子表新增 根据报价单号查询报价单子表物料信息
dev
liuxiaoxu 2 months ago
parent
commit
2e8c0bb143
  1. 25
      ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java
  2. 13
      ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuote.java
  3. 78
      ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/ExportPurchaseQuoteChildVo.java
  4. 4
      ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteMapper.java
  5. 5
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java
  6. 11
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java
  7. 8
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteChildServiceImpl.java
  8. 66
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java
  9. 19
      ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteMapper.xml
  10. 60
      ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/purchaseQuote.html

25
ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java

@ -13,6 +13,7 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.purchase.domain.PurchaseQuoteChild;
import com.ruoyi.purchase.domain.PurchaseQuoteHistory;
import com.ruoyi.purchase.domain.Vo.ExportPurchaseQuoteChildVo;
import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo;
import com.ruoyi.purchase.service.IPurchaseQuoteHistoryService;
import com.ruoyi.system.domain.SysCustomerQuoteHistory;
@ -126,6 +127,23 @@ public class PurchaseQuoteController extends BaseController
}
/**
* 导出采购报价单列表
*/
@RequiresPermissions("purchase:purchaseQuote:export")
@PostMapping("/exportAll")
@ResponseBody
public AjaxResult exportAll(PurchaseQuote purchaseQuote)
{
List<PurchaseQuote> purchaseQuoteList = purchaseQuoteService.selectPurchaseQuoteList2(purchaseQuote);
List<ExportPurchaseQuoteChildVo> list = purchaseQuoteService.getExportPurchaseQuoteChildVoList(purchaseQuoteList);
ExcelUtil<ExportPurchaseQuoteChildVo> util = new ExcelUtil<ExportPurchaseQuoteChildVo>(ExportPurchaseQuoteChildVo.class);
return util.exportExcel(list, "采购报价单数据");
}
/**
@ -135,10 +153,11 @@ public class PurchaseQuoteController extends BaseController
@PostMapping("/export")
@ResponseBody
public AjaxResult export(PurchaseQuote purchaseQuote)
public AjaxResult export(@RequestBody String[] purchaseQuoteCodes)
{
List<PurchaseQuote> list = purchaseQuoteService.selectPurchaseQuoteList2(purchaseQuote);
ExcelUtil<PurchaseQuote> util = new ExcelUtil<PurchaseQuote>(PurchaseQuote.class);
List<PurchaseQuote> purchaseQuoteList = purchaseQuoteService.selectPurchaseQuoteListByCodes(purchaseQuoteCodes);
List<ExportPurchaseQuoteChildVo> list = purchaseQuoteService.getExportPurchaseQuoteChildVoList(purchaseQuoteList);
ExcelUtil<ExportPurchaseQuoteChildVo> util = new ExcelUtil<ExportPurchaseQuoteChildVo>(ExportPurchaseQuoteChildVo.class);
return util.exportExcel(list, "采购报价单数据");
}

13
ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuote.java

@ -72,6 +72,9 @@ public class PurchaseQuote extends BaseEntity
@Excel(name = "使用状态")
private String useStatus;
/** 创建时间*/
private Date createTime;
//图片索引id
private Long photoAttachId;
@ -361,6 +364,16 @@ public class PurchaseQuote extends BaseEntity
this.applyTime = applyTime;
}
@Override
public Date getCreateTime() {
return createTime;
}
@Override
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

78
ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/ExportPurchaseQuoteChildVo.java

@ -0,0 +1,78 @@
package com.ruoyi.purchase.domain.Vo;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 导出采购报价单详情模板
* */
@Data
public class ExportPurchaseQuoteChildVo {
/** 采购报价单号 */
@Excel(name = "采购报价单号")
private String purchaseQuoteCode;
/** 创建时间*/
@Excel(name = "创建时间", dateFormat = "yyyy-MM-dd")
private Date createTime;
/** 供应商ID */
@Excel(name = "供应商ID")
private String supplierQuoteCode;
/** 供应商名称 */
@Excel(name = "供应商名称")
private String supplierName;
/** 税率 */
@Excel(name = "税率")
private Double taxRate;
/** 定价日期 */
@Excel(name = "定价日期")
private String pricingDate;
/** 物料表中的编号 */
@Excel(name = "料号")
private String materialCode;
/** 物料名称 */
@Excel(name = "物料名称")
private String materialName;
/** 物料加工方式 */
@Excel(name = "物料加工方式",dictType = "processMethod")
private String processMethod;
/** 物料品牌 */
@Excel(name = "物料品牌")
private String brand;
/** 物料描述 */
@Excel(name = "物料描述")
private String describe;
/** 物料数量 */
@Excel(name = "物料数量")
private Long materialNum;
/** 物料对外报价 */
@Excel(name = "物料对外报价")
private BigDecimal materialSole;
/** 物料不含税单价(RMB) */
@Excel(name = "物料不含税单价(RMB)")
private BigDecimal materialRmb;
/** 物料含税单价(RMB) */
@Excel(name = "物料含税单价(RMB)")
private BigDecimal materialNoRmb;
}

4
ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteMapper.java

@ -116,4 +116,8 @@ public interface PurchaseQuoteMapper
* */
List<PurchaseQuote> selectPurchaseQuoteAllList();
/**
* 根据采购报价单编号批量查询采购报价单
* */
List<PurchaseQuote> selectPurchaseQuoteListByCodes(String[] purchaseQuoteCodes);
}

5
ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java

@ -82,4 +82,9 @@ public interface IPurchaseQuoteChildService
int restorePurchaseQuoteChildById(Long purchaseQuoteChildId);
List<PurchaseQuoteChild> selectQuoteChildByMaterialCode(String materialCode);
/**
* 根据报价单号查询报价单子表物料信息
* */
List<PurchaseQuoteChild> selectQuoteChildListByQuoteCode(List<String> purchaseQuoteCodeList);
}

11
ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java

@ -1,6 +1,7 @@
package com.ruoyi.purchase.service;
import com.github.pagehelper.Page;
import com.ruoyi.purchase.domain.Vo.ExportPurchaseQuoteChildVo;
import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo;
import com.ruoyi.purchase.domain.PurchaseQuote;
import org.activiti.engine.runtime.ProcessInstance;
@ -99,4 +100,14 @@ public interface IPurchaseQuoteService
* 导入采购报价单
* */
String importPurchaseQuote(List<PurchaseQuote> purchaseQuoteList, boolean updateSupport, String operName);
/**
* 导出采购报价单导出详情页面的数据+单号+单据创建时间
* */
List<ExportPurchaseQuoteChildVo> getExportPurchaseQuoteChildVoList(List<PurchaseQuote> purchaseQuotes);
/**
* 根据采购报价单号批量查询采购报价单
* */
List<PurchaseQuote> selectPurchaseQuoteListByCodes(String[] purchaseQuoteCodes);
}

8
ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteChildServiceImpl.java

@ -133,4 +133,12 @@ public class PurchaseQuoteChildServiceImpl implements IPurchaseQuoteChildService
public List<PurchaseQuoteChild> selectQuoteChildByMaterialCode(String materialCode) {
return purchaseQuoteChildMapper.selectQuoteChildByMaterialCode(materialCode);
}
/**
* 根据报价单号查询报价单子表物料信息
* */
@Override
public List<PurchaseQuoteChild> selectQuoteChildListByQuoteCode(List<String> purchaseQuoteCodeList) {
return purchaseQuoteChildMapper.selectPurchaseQuoteChildListByQuoteCodeList(purchaseQuoteCodeList);
}
}

66
ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java

@ -1,6 +1,8 @@
package com.ruoyi.purchase.service.impl;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.domain.entity.SysUser;
@ -12,13 +14,13 @@ import com.ruoyi.common.service.ICommonService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.purchase.domain.PurchaseQuoteHistory;
import com.ruoyi.purchase.domain.*;
import com.ruoyi.purchase.domain.Vo.ExportPurchaseQuoteChildVo;
import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper;
import com.ruoyi.purchase.service.IPurchaseQuoteHistoryService;
import com.ruoyi.system.domain.SysAttach;
import com.ruoyi.purchase.domain.PurchaseQuoteChild;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysAttachFileService;
import com.ruoyi.system.service.ISysAttachService;
@ -32,7 +34,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.purchase.mapper.PurchaseQuoteMapper;
import com.ruoyi.purchase.domain.PurchaseQuote;
import com.ruoyi.purchase.service.IPurchaseQuoteService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;
@ -164,12 +165,18 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService
@Override
public Page<PurchaseQuote> selectPurchaseQuoteList2(PurchaseQuote purchaseQuote){
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
Page<PurchaseQuote> list = purchaseQuoteMapper.selectPurchaseQuoteList2(purchaseQuote);
return list;
}
/**
* 根据采购报价单编号批量查询采购报价单
* */
@Override
public List<PurchaseQuote> selectPurchaseQuoteListByCodes(String[] purchaseQuoteCodes) {
return purchaseQuoteMapper.selectPurchaseQuoteListByCodes(purchaseQuoteCodes);
}
/**
* 新增采购报价单
*
@ -527,4 +534,51 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService
return successMsg.toString();
}
/**
* 导出采购报价单
* */
@Override
public List<ExportPurchaseQuoteChildVo> getExportPurchaseQuoteChildVoList(List<PurchaseQuote> purchaseQuotes) {
if (!CollectionUtils.isEmpty(purchaseQuotes)){
List<ExportPurchaseQuoteChildVo> exportPurchaseQuoteChildVoList = new ArrayList<>();
List<String> purchaseQuoteCodeList = purchaseQuotes.stream().map(PurchaseQuote::getPurchaseQuoteCode).collect(Collectors.toList());
List<PurchaseQuoteChild> purchaseQuoteChildList = purchaseQuoteChildService.selectQuoteChildListByQuoteCode(purchaseQuoteCodeList);
// 创建一个 map 用于快速查找主表数据
Map<String, PurchaseQuote> purchaseQuoteMap = purchaseQuotes.stream()
.collect(Collectors.toMap(PurchaseQuote::getPurchaseQuoteCode, Function.identity()));
// 创建一个 map 用于快速查找子表数据
Map<String, List<PurchaseQuoteChild>> purchaseQuoteChildMap = purchaseQuoteChildList.stream()
.collect(Collectors.groupingBy(PurchaseQuoteChild::getPurchaseQuoteCode));
for (PurchaseQuoteChild purchaseQuoteChild : purchaseQuoteChildList) {
ExportPurchaseQuoteChildVo exportPurchaseQuoteChildVo = new ExportPurchaseQuoteChildVo();
PurchaseQuote purchaseQuote = purchaseQuoteMap.get(purchaseQuoteChild.getPurchaseQuoteCode());
exportPurchaseQuoteChildVo.setPurchaseQuoteCode(purchaseQuoteChild.getPurchaseQuoteCode());
exportPurchaseQuoteChildVo.setCreateTime(purchaseQuote.getCreateTime());
exportPurchaseQuoteChildVo.setSupplierQuoteCode(purchaseQuote.getSupplierQuoteCode());
exportPurchaseQuoteChildVo.setSupplierName(purchaseQuote.getSupplierName());
exportPurchaseQuoteChildVo.setTaxRate(purchaseQuote.getTaxRate());
exportPurchaseQuoteChildVo.setPricingDate(purchaseQuote.getPricingDate());
exportPurchaseQuoteChildVo.setMaterialCode(purchaseQuoteChild.getMaterialCode());
exportPurchaseQuoteChildVo.setMaterialName(purchaseQuoteChild.getMaterialName());
exportPurchaseQuoteChildVo.setProcessMethod(purchaseQuoteChild.getProcessMethod());
exportPurchaseQuoteChildVo.setBrand(purchaseQuoteChild.getBrand());
exportPurchaseQuoteChildVo.setDescribe(purchaseQuoteChild.getDescribe());
exportPurchaseQuoteChildVo.setMaterialNum(purchaseQuoteChild.getMaterialNum());
exportPurchaseQuoteChildVo.setMaterialSole(purchaseQuoteChild.getMaterialSole());
exportPurchaseQuoteChildVo.setMaterialRmb(purchaseQuoteChild.getMaterialRmb());
exportPurchaseQuoteChildVo.setMaterialNoRmb(purchaseQuoteChild.getMaterialNoRmb());
exportPurchaseQuoteChildVoList.add(exportPurchaseQuoteChildVo);
}
return exportPurchaseQuoteChildVoList;
}
return Collections.emptyList();
}
}

19
ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteMapper.xml

@ -123,14 +123,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and p.create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
<if test="auditStatus != null and auditStatus != ''"> and p.audit_status = #{auditStatus}</if>
<if test="useStatus != null and useStatus != ''"> and p.use_status = #{useStatus}</if>
<if test="instanceId != null and instanceId != ''"> and p.instance_id = #{instanceId}</if>
<if test="instanceType != null and instanceType != ''"> and p.instance_type = #{instanceType}</if>
<if test="submitInstanceId != null and submitInstanceId != ''"> and p.submit_instance_id = #{submitInstanceId}</if>
<if test="cancelInstanceId != null and cancelInstanceId != ''"> and p.cancel_instance_id = #{cancelInstanceId}</if>
<if test="restoreInstanceId != null and restoreInstanceId != ''"> and p.restore_instance_id = #{restoreInstanceId}</if>
<if test="applyTitle != null and applyTitle != ''"> and p.apply_title = #{applyTitle}</if>
<if test="applyUser != null and applyUser != ''"> and p.apply_user = #{applyUser}</if>
<if test="applyTime != null "> and p.apply_time = #{applyTime}</if>
<if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">
and p.create_time between #{params.beginCreateTime} and #{params.endCreateTime}
</if>
@ -165,6 +157,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where audit_status = '1' and use_status = '1'
</select>
<select id="selectPurchaseQuoteListByCodes" parameterType="String" resultMap="PurchaseQuoteResult">
<include refid="selectPurchaseQuoteVo"/>
<where>
purchase_quote_code in
<foreach collection="array" item="purchaseQuoteCode" open="(" close=")" separator=",">
#{purchaseQuoteCode}
</foreach>
</where>
</select>
<insert id="insertPurchaseQuote" parameterType="PurchaseQuote" useGeneratedKeys="true" keyProperty="purchaseQuoteId">
insert into purchase_quote
<trim prefix="(" suffix=")" suffixOverrides=",">

60
ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/purchaseQuote.html

@ -66,7 +66,7 @@
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="purchase:purchaseQuote:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-success" onclick="$.table.exportExcel()" shiro:hasPermission="purchase:purchaseQuote:export">
<a class="btn btn-success" onclick="exportExcel()" shiro:hasPermission="purchase:purchaseQuote:export">
<i class="fa fa-download"></i> 导出
</a>
<!-- <a class="btn btn-success" onclick="$.table.importExcel()" shiro:hasPermission="purchase:purchaseQuote:import">-->
@ -203,6 +203,64 @@
};
$.table.init(options);
});
// 导出
function exportExcel(formId) {
// $.table.set();
var purchaseQuoteCodeData = [];
var selections = $("#bootstrap-table").bootstrapTable("getSelections");
if(selections.length === 0){
$.modal.confirm("确定导出所有采购报价单吗?", function() {
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
var params = $("#bootstrap-table").bootstrapTable('getOptions');
var dataParam = $("#" + currentId).serializeArray();
dataParam.push({ "name": "orderByColumn", "value": params.sortName });
dataParam.push({ "name": "isAsc", "value": params.sortOrder });
$.modal.loading("正在导出数据,请稍后...");
$.post(prefix + '/exportAll', dataParam, function(result) {
if (result.code == web_status.SUCCESS) {
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg)
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
});
});
}else {
$.modal.confirm("确定导出选中的所有采购报价单吗?", function () {
//·拼接单号
for(let i=0;i<selections.length;i++){
purchaseQuoteCodeData.push(selections[i].purchaseQuoteCode);
}
var purchaseQuoteCodes = JSON.stringify(purchaseQuoteCodeData);
// console.log(bomNos);
$.modal.loading("正在导出数据,请稍后...");
var config = {
url: prefix + '/export',
type: "post",
dataType: "json",
contentType: "application/json;charset=utf-8",
data: purchaseQuoteCodes,
success: function(result) {
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
$.modal.alertSuccess("导出成功!")
$.modal.closeLoading();
},
error: function (result){
$.modal.alertError(result.msg);
}
};
$.ajax(config)
});
}
};
</script>
</body>
</html>
Loading…
Cancel
Save