diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java index 6bc7effb..7c6f5c0d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java @@ -32,13 +32,14 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * 采购报价单Controller - * + * * @author 刘晓旭 * @date 2024-04-15 */ @@ -85,11 +86,44 @@ public class PurchaseQuoteController extends BaseController return getDataTable(list); } + + + /** + * 导入采购报价单 + * */ + @Log(title = "采购报价", businessType = BusinessType.IMPORT) + @RequiresPermissions("purchase:purchaseQuote:import") + @PostMapping("/importData") + @ResponseBody + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(PurchaseQuote.class); + List purchaseQuoteList = util.importExcel(file.getInputStream()); + String operName = ShiroUtils.getSysUser().getLoginName(); + String message = purchaseQuoteService.importPurchaseQuote(purchaseQuoteList, updateSupport, operName); + return AjaxResult.success(message); + } + + /** + * 导入模板 + * */ + @RequiresPermissions("purchase:purchaseQuote:view") + @GetMapping("/importTemplate") + @ResponseBody + public AjaxResult importTemplate() + { + ExcelUtil util = new ExcelUtil(PurchaseQuote.class); + return util.importTemplateExcel("采购报价数据"); + } + + + + /** * 导出采购报价单列表 */ @RequiresPermissions("purchase:purchaseQuote:export") - @Log(title = "采购报价单", businessType = BusinessType.EXPORT) + @PostMapping("/export") @ResponseBody public AjaxResult export(PurchaseQuote purchaseQuote) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchasePlan.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchasePlan.java index fb947531..0bc6b6bf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchasePlan.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchasePlan.java @@ -1,6 +1,8 @@ package com.ruoyi.purchase.domain; import java.math.BigDecimal; + +import com.ruoyi.system.domain.Vo.Supplier; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; @@ -83,6 +85,12 @@ public class PurchasePlan extends BaseEntity /** 删除标志 0 启用 1逻辑删除 */ private String delFlag; + //用于前端 显示供应商名称 + private String supplierName; + + //用于前端 显示供应商Id + private String supplierCode; + public void setPurchasePlanId(Long purchasePlanId) { this.purchasePlanId = purchasePlanId; @@ -239,6 +247,22 @@ public class PurchasePlan extends BaseEntity return delFlag; } + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getSupplierCode() { + return supplierCode; + } + + public void setSupplierCode(String supplierCode) { + this.supplierCode = supplierCode; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -264,6 +288,8 @@ public class PurchasePlan extends BaseEntity .append("updateTime", getUpdateTime()) .append("remark", getRemark()) .append("delFlag", getDelFlag()) + .append("supplierName", getSupplierName()) + .append("supplierCode", getSupplierCode()) .toString(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuoteHistory.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuoteHistory.java index 9b634fe2..8f9ed37a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuoteHistory.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuoteHistory.java @@ -96,6 +96,10 @@ public class PurchaseQuoteHistory extends BaseEntity @Excel(name = "审核状态") private String auditStatus; + /** 是否是最新报价(0否、1是) */ + @Excel(name = "是否是最新报价(0否、1是)") + private String isLatest; + /** 删除标志 */ private String delFlag; @@ -279,7 +283,16 @@ public class PurchaseQuoteHistory extends BaseEntity { return auditStatus; } - public void setDelFlag(String delFlag) + + public String getIsLatest() { + return isLatest; + } + + public void setIsLatest(String isLatest) { + this.isLatest = isLatest; + } + + public void setDelFlag(String delFlag) { this.delFlag = delFlag; } @@ -317,6 +330,7 @@ public class PurchaseQuoteHistory extends BaseEntity .append("remark", getRemark()) .append("useStatus", getUseStatus()) .append("auditStatus", getAuditStatus()) + .append("isLatest", getIsLatest()) .append("delFlag", getDelFlag()) .toString(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanChildMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanChildMapper.java index bc0de6a2..f0a659d2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanChildMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanChildMapper.java @@ -42,7 +42,7 @@ public interface PurchasePlanChildMapper * @param purchasePlanChildList 采购计划单物料信息集合 * @return 结果 */ - public int batchInsertPurchasePlanChild(@Param("list") List purchasePlanChildList); + public int batchInsertPurchasePlanChild(List purchasePlanChildList); /** * 修改采购计划单物料信息 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteChildMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteChildMapper.java index ee424d57..85e76154 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteChildMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteChildMapper.java @@ -89,4 +89,9 @@ public interface PurchaseQuoteChildMapper * 通过采购报价单号查找所有采购报价子表集合 * */ List selectPurchaseQuoteChildListByQuoteCodeList(List purchaseQuoteCodes); + + /** + * 通过供应商编码查找所有采购报价子表集合 + * */ + List selectQuoteChildBySupplierCode(String supplierCode); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteHistoryMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteHistoryMapper.java index 3fca392b..8ed977fe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteHistoryMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteHistoryMapper.java @@ -27,6 +27,12 @@ public interface PurchaseQuoteHistoryMapper */ public List selectPurchaseQuoteHistoryList(PurchaseQuoteHistory purchaseQuoteHistory); + + /* + * 根据报价编号和物料号查询最新一条记录 + * */ + public PurchaseQuoteHistory findLatestPurchaseQuoteHistory(PurchaseQuoteHistory purchaseQuoteHistory); + /** * 新增采购物料历史报价信息 * @@ -35,6 +41,15 @@ public interface PurchaseQuoteHistoryMapper */ public int insertPurchaseQuoteHistory(PurchaseQuoteHistory purchaseQuoteHistory); + + /** + * 批量新增采购物料历史报价信息 + * + * @param purchaseQuoteHistoryList 采购物料历史报价信息集合 + * @return 结果 + */ + public int insertBatchPurchaseQuoteHistory(List purchaseQuoteHistoryList); + /** * 修改采购物料历史报价信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchasePlanService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchasePlanService.java index fc217129..81c62b95 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchasePlanService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchasePlanService.java @@ -4,6 +4,7 @@ import com.ruoyi.erp.domain.vo.ErpDevelopModifyorderVo; import com.ruoyi.purchase.domain.PurchasePlan; import com.ruoyi.purchase.domain.PurchasePlanChild; import com.ruoyi.purchase.domain.Vo.PurchasePlanSelectSupplierVo; +import com.ruoyi.system.domain.SysMakeOrder; import com.ruoyi.system.domain.SysMakeorderBom; import java.util.List; @@ -88,9 +89,9 @@ public interface IPurchasePlanService public List selectPurchasePlanByPlanCode(String purchasePlanCodes); /** - * 生产订单工程审核后生成采购计划 + * 生产订单采购审核后生成采购计划 * */ - void generatePurchasePlanByMakeOrder(List insertedSysMakeorderBoms); + void generatePurchasePlanByMakeOrder(SysMakeOrder sysMakeOrder); /** * 开发修改单审核通过后生成采购计划 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteHistoryService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteHistoryService.java index 9b1a871b..a5b97438 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteHistoryService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteHistoryService.java @@ -1,6 +1,8 @@ package com.ruoyi.purchase.service; import java.util.List; + +import com.ruoyi.purchase.domain.PurchaseQuote; import com.ruoyi.purchase.domain.PurchaseQuoteHistory; /** @@ -72,4 +74,10 @@ public interface IPurchaseQuoteHistoryService * @return */ int restorePurchaseQuoteHistoryById(Long purchaseQuoteChildId); + + /** + * 采购报价新增的时候生成采购报价历史数据 + * + * */ + int generatePurchaseQuoteHistory(PurchaseQuote purchaseQuote); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java index 8ef72f7d..6f2bd4af 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java @@ -6,6 +6,8 @@ import com.ruoyi.purchase.domain.PurchaseQuote; import org.activiti.engine.runtime.ProcessInstance; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 采购报价单Service接口 * @@ -92,4 +94,9 @@ public interface IPurchaseQuoteService * @return 结果 */ Object getId(); + + /** + * 导入采购报价单 + * */ + String importPurchaseQuote(List purchaseQuoteList, boolean updateSupport, String operName); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java index eb60c7e8..84757718 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java @@ -7,6 +7,7 @@ import java.util.*; import java.util.stream.Collectors; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; @@ -15,6 +16,7 @@ import com.ruoyi.erp.domain.ErpDevelopModifyorderDetail; import com.ruoyi.erp.domain.vo.ErpDevelopModifyorderVo; import com.ruoyi.erp.mapper.ErpDevelopModifyorderDetailMapper; import com.ruoyi.erp.service.IErpBomService; +import com.ruoyi.purchase.controller.PurchaseQuoteController; import com.ruoyi.purchase.domain.PurchasePlan; import com.ruoyi.purchase.domain.PurchasePlanChild; import com.ruoyi.purchase.domain.PurchaseQuote; @@ -26,6 +28,7 @@ import com.ruoyi.purchase.mapper.PurchaseQuoteMapper; import com.ruoyi.system.domain.*; import com.ruoyi.system.domain.Vo.SysSupplierVo; import com.ruoyi.system.mapper.SysMakeOrderMapper; +import com.ruoyi.system.mapper.SysMakeorderBomMapper; import com.ruoyi.system.mapper.SysSalesOrderChildMapper; import com.ruoyi.system.mapper.SysSupplierMapper; import org.springframework.beans.BeanUtils; @@ -75,6 +78,13 @@ public class PurchasePlanServiceImpl implements IPurchasePlanService @Autowired private SysSupplierMapper sysSupplierMapper; + + @Autowired + private SysMakeorderBomMapper sysMakeorderBomMapper; + + + + /** * 查询采购计划单 * @@ -194,6 +204,11 @@ public class PurchasePlanServiceImpl implements IPurchasePlanService purchasePlanCodeList = Arrays.asList(splitSalesOrderCode); } + String supplierCode = purchasePlan.getSupplierCode(); + + + List purchaseQuoteChildList = purchaseQuoteChildMapper.selectQuoteChildBySupplierCode(supplierCode); + //采购计划子表数据 List purchasePlanChildList = purchasePlanChildMapper.selectPurchasePlanChildPlanCodeList(purchasePlanCodeList); @@ -235,7 +250,7 @@ public class PurchasePlanServiceImpl implements IPurchasePlanService mergedList.forEach(item->{ //字段(本次占用共享库存数):必填;默认为0,若共享可用库存数>0,则默认=共享可用库存数,可修改;需0<=本次占用共享库存数<=共享可用库存数 - if (item.getSharedAvailableInventoryNum() > 0){ + if (item.getSharedAvailableInventoryNum() != null && item.getSharedAvailableInventoryNum() > 0){ item.setSharedInventoryOccupancyNum(item.getSharedAvailableInventoryNum()); }else { item.setSharedInventoryOccupancyNum(0); @@ -337,106 +352,85 @@ public class PurchasePlanServiceImpl implements IPurchasePlanService /* - * 生产订单工程审核后生成采购计划 + * 生产订单采购审核后生成采购计划 * */ @Override - public void generatePurchasePlanByMakeOrder(List insertedSysMakeorderBoms) { - // 假设此处有一个生成唯一采购计划单号的方法 + public void generatePurchasePlanByMakeOrder(SysMakeOrder makeOrder) { + // 生成唯一采购计划单号的方法 String purchasePlanCode = generateUniquePurchasePlanCode(); + String loginName = ShiroUtils.getLoginName(); - List uniqueBoms = insertedSysMakeorderBoms.stream() - // 分组依据为MaterialNo - .collect(Collectors.groupingBy(SysMakeorderBom::getMaterialNo)) - // 把每个分组转为流,然后取第一个元素 - .values().stream() - .map(groupedBoms -> groupedBoms.stream().findFirst().orElse(null)) - // 过滤掉null值,以防万一某些分组是空的 - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - //过滤掉 只有采购的类型 - List filterUniqueBoms = uniqueBoms.stream().filter(bom -> "0".equals(bom.getProcessMethod())).collect(Collectors.toList()); - //统计物料种类的数量 - Integer materialAmount = filterUniqueBoms.size(); - - // 仅查询一次,因为所有SysMakeorderBom都关联同一生产单号 - SysMakeOrder sysMakeOrder = sysMakeOrderMapper.selectMakeOrderByMakeNo(insertedSysMakeorderBoms.get(0).getMakeNo()); - - //保存所有加工方式为采购的物料 - List filterSysMakeorderBoms = insertedSysMakeorderBoms.stream().filter(bom -> "0".equals(bom.getProcessMethod())).collect(Collectors.toList()); - - if(StringUtils.isNotEmpty(filterUniqueBoms)){ - //所有数据的销售订单号相同,只需查一条的销售订单号 - String quoteId = filterSysMakeorderBoms.get(0).getSalesOrderCode(); - - // 第一步:收集所有不同的salesOrderMaterialNo 利用set key值不重复的特性 - Set uniqueSalesOrderMaterialNos = new HashSet<>(); - for (SysMakeorderBom filterSysMakeorderBom : filterSysMakeorderBoms) { - uniqueSalesOrderMaterialNos.add(filterSysMakeorderBom.getSalesOrderMaterialNo()); - } + PurchasePlan purchasePlan = new PurchasePlan(); - // 第二步:查询每个salesOrderMaterialNo对应的SalesOrder数据 - Map salesOrderChildByMaterialNo = new HashMap<>(); - for (String salesOrderMaterialNo : uniqueSalesOrderMaterialNos) { - SysSalesOrderChild sysSalesOrderChild = new SysSalesOrderChild(); - sysSalesOrderChild.setMaterialCode(salesOrderMaterialNo); - sysSalesOrderChild.setQuoteId(quoteId); - SysSalesOrderChild salesOrderChild = salesOrderChildMapper.selectSalesOrderChildByCodeAndNo(sysSalesOrderChild); - salesOrderChildByMaterialNo.put(salesOrderMaterialNo, salesOrderChild); - } + String makeNo = makeOrder.getMakeNo(); - Integer purchasePlanMaterialSum = 0; - // 第三步:计算purchasePlanNum - for (SysMakeorderBom filterSysMakeorderBom : filterSysMakeorderBoms) { - String salesOrderMaterialNo = filterSysMakeorderBom.getSalesOrderMaterialNo(); - SysSalesOrderChild sysSalesOrderChild = salesOrderChildByMaterialNo.get(salesOrderMaterialNo); - if (sysSalesOrderChild != null) { - //物料数量 - Integer materialNum = sysSalesOrderChild.getMaterialNum(); - //用量 - Integer useNum = filterSysMakeorderBom.getUseNum(); - - //采购计划数 - Integer purchasePlanNum = materialNum * useNum; - - // 立即创建PurchasePlanChild对象 - PurchasePlanChild purchasePlanChild = new PurchasePlanChild(); - purchasePlanChild.setPurchasePlanCode(purchasePlanCode); - purchasePlanChild.setMaterialNo(filterSysMakeorderBom.getMaterialNo()); - - PurchasePlanChild tempPurchasePlanChild = purchasePlanChildMapper.selectPurchasePlanChildByCodeAndNo(purchasePlanChild); - if (tempPurchasePlanChild != null){ - - purchasePlanChild.setPurchasePlanChildId(tempPurchasePlanChild.getPurchasePlanChildId()); - //设置计划采购数 - purchasePlanChildMapper.updatePurchasePlanChild(purchasePlanChild); - }else { - purchasePlanChild.setMaterialName(filterSysMakeorderBom.getMaterialName()); - purchasePlanChild.setMaterialType(filterSysMakeorderBom.getMaterialType()); - purchasePlanChild.setWarehouseDept(filterSysMakeorderBom.getWarehouseDept()); - purchasePlanChild.setMaterialProcessMethod("0"); - purchasePlanChild.setMaterialBrand(filterSysMakeorderBom.getBrand()); - purchasePlanChild.setMaterialDescribe(filterSysMakeorderBom.getDescribe()); - purchasePlanChild.setMaterialUnit(filterSysMakeorderBom.getUnit()); - purchasePlanChild.setWarehouseDept(filterSysMakeorderBom.getWarehouseDept()); - // 物料的计划采购数,使用计算出的purchasePlanNum - purchasePlanChild.setCreateBy(ShiroUtils.getLoginName()); - purchasePlanChild.setCreateTime(new Date()); - // 直接保存PurchasePlanChild对象 - purchasePlanChildMapper.insertPurchasePlanChild(purchasePlanChild); - } - - // 更新总和 - purchasePlanMaterialSum += purchasePlanNum; - } + List sysMakeorderBoms = sysMakeorderBomMapper.selectSysMakeorderBomByMakeNo(makeNo); + + //保留 只有采购的类型 + List filterUniqueBoms = sysMakeorderBoms.stream().filter(bom -> "0".equals(bom.getProcessMethod())).collect(Collectors.toList()); + + List purchasePlanChildList = new ArrayList<>(); + + for (SysMakeorderBom filterUniqueBom : filterUniqueBoms) { + PurchasePlanChild purchasePlanChild = new PurchasePlanChild(); + String salesOrderMaterialNo = filterUniqueBom.getSalesOrderMaterialNo(); + String tempMakeNo = filterUniqueBom.getMakeNo(); + + int orderNum = 0; + if (StringUtils.isNotEmpty(salesOrderMaterialNo)){ + SysMakeorderBom tempMakeorderBom = new SysMakeorderBom(); + tempMakeorderBom.setMaterialNo(salesOrderMaterialNo); + tempMakeorderBom.setMakeNo(tempMakeNo); + SysMakeorderBom oldMakeorderBom = sysMakeorderBomMapper.selectSysMakeorderBomByNo(tempMakeorderBom); + orderNum = oldMakeorderBom.getOrderNum(); + + purchasePlanChild.setPlanPurchaseNum(orderNum * filterUniqueBom.getUseNum()); + purchasePlanChild.setPurchaseNum(orderNum * filterUniqueBom.getUseNum()); + }else { + purchasePlanChild.setPlanPurchaseNum(filterUniqueBom.getOrderNum()); + purchasePlanChild.setPurchaseNum(filterUniqueBom.getOrderNum()); } + purchasePlanChild.setPurchasePlanStatus("0"); + purchasePlanChild.setPurchasePlanCode(purchasePlanCode); + purchasePlanChild.setMaterialNo(filterUniqueBom.getMaterialNo()); + purchasePlanChild.setMaterialName(filterUniqueBom.getMaterialName()); + purchasePlanChild.setMaterialUnit(filterUniqueBom.getUnit()); + purchasePlanChild.setMaterialDescribe(filterUniqueBom.getDescribe()); + purchasePlanChild.setMaterialProcessMethod(filterUniqueBom.getProcessMethod()); + purchasePlanChild.setMaterialBrand(filterUniqueBom.getBrand()); + purchasePlanChild.setMaterialType(filterUniqueBom.getMaterialType()); + purchasePlanChild.setMaterialPhotourl(filterUniqueBom.getPhotoUrl()); + purchasePlanChild.setMaterialModel(filterUniqueBom.getMaterialModel()); + purchasePlanChild.setWarehouseDept(filterUniqueBom.getWarehouseDept()); + purchasePlanChild.setCreateTime(new Date()); + purchasePlanChild.setCreateBy(loginName); + purchasePlanChildList.add(purchasePlanChild); + } + + int batchInsertPurchasePlanChildResult = purchasePlanChildMapper.batchInsertPurchasePlanChild(purchasePlanChildList); + if (batchInsertPurchasePlanChildResult <= 0){ + throw new BusinessException("插入采购计划子表数据失败"); + } + //计算计划采购总数 + int planPurchaseSum = purchasePlanChildList.stream().mapToInt(PurchasePlanChild::getPlanPurchaseNum).sum(); - // 创建采购计划主记录 - PurchasePlan purchasePlan = buildPurchasePlan(sysMakeOrder, purchasePlanCode,materialAmount,purchasePlanMaterialSum); + purchasePlan.setPurchaseSum(planPurchaseSum); + purchasePlan.setPlanPurchaseSum(planPurchaseSum); - purchasePlanMapper.insertPurchasePlan(purchasePlan); + purchasePlan.setMaterialSum(filterUniqueBoms.size()); + purchasePlan.setPurchasePlanType("1");//生产单 + purchasePlan.setPurchasePlanCode(purchasePlanCode); + purchasePlan.setPurchasePlanStatus("0"); + purchasePlan.setCorrelationCode(makeOrder.getMakeNo()); + purchasePlan.setCreateTime(new Date()); + purchasePlan.setCreateBy(loginName); + + int insertPurchasePlanResult = purchasePlanMapper.insertPurchasePlan(purchasePlan); + if (insertPurchasePlanResult <= 0){ + throw new BusinessException("插入采购计划数据失败"); } + } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteHistoryServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteHistoryServiceImpl.java index 9320e743..e6580f16 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteHistoryServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteHistoryServiceImpl.java @@ -1,8 +1,11 @@ package com.ruoyi.purchase.service.impl; +import java.util.ArrayList; import java.util.List; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.purchase.domain.PurchaseQuote; +import com.ruoyi.purchase.domain.PurchaseQuoteChild; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.purchase.mapper.PurchaseQuoteHistoryMapper; @@ -123,4 +126,40 @@ public class PurchaseQuoteHistoryServiceImpl implements IPurchaseQuoteHistorySer { return purchaseQuoteHistoryMapper.restorePurchaseQuoteHistoryById(purchaseQuoteChildId); } + + + /** + * 采购报价新增的时候生成采购报价历史数据 + * + * */ + @Override + public int generatePurchaseQuoteHistory(PurchaseQuote purchaseQuote) { + String loginName = ShiroUtils.getLoginName(); + + List purchaseQuoteChildList = purchaseQuote.getPurchaseQuoteChildList(); + String supplierQuoteCode = purchaseQuote.getSupplierQuoteCode(); + String supplierName = purchaseQuote.getSupplierName(); + String auditStatus = purchaseQuote.getAuditStatus(); + String purchaseQuoteCode = purchaseQuote.getPurchaseQuoteCode(); + + + List purchaseQuoteHistoryChildren = new ArrayList<>(); + + for (PurchaseQuoteChild purchaseQuoteChild : purchaseQuoteChildList) { + PurchaseQuoteHistory purchaseQuoteHistory = new PurchaseQuoteHistory(); + purchaseQuoteHistory.setPurchaseQuoteCode(purchaseQuoteCode); + purchaseQuoteHistory.setMaterialCode(purchaseQuoteChild.getMaterialCode()); + purchaseQuoteHistory.setMaterialName(purchaseQuoteChild.getMaterialName()); + purchaseQuoteHistory.setMaterialNormb(purchaseQuoteChild.getMaterialNoRmb()); + purchaseQuoteHistory.setMaterialRmb(purchaseQuoteChild.getMaterialRmb()); + purchaseQuoteHistory.setSupplierCode(supplierQuoteCode); + purchaseQuoteHistory.setSupplierName(supplierName); + purchaseQuoteHistory.setIsLatest("0"); //第一次添加没有值 + purchaseQuoteHistory.setAuditStatus(auditStatus); + purchaseQuoteHistory.setCreateBy(loginName); + purchaseQuoteHistory.setCreateTime(DateUtils.getNowDate()); + purchaseQuoteHistoryChildren.add(purchaseQuoteHistory); + } + return purchaseQuoteHistoryMapper.insertBatchPurchaseQuoteHistory(purchaseQuoteHistoryChildren); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java index 90d0add4..f0711d4d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java @@ -7,13 +7,16 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.PageDomain; import com.ruoyi.common.core.page.TableSupport; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.BusinessException; 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.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; @@ -75,6 +78,10 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService @Autowired private IPurchaseQuoteChildService purchaseQuoteChildService; + + @Autowired + private IPurchaseQuoteHistoryService purchaseQuoteHistoryService; + /** * 查询采购报价单 * @@ -202,10 +209,22 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService } } purchaseQuote.setMaterialAmount(String.valueOf(childResult)); + + int result = purchaseQuoteMapper.insertPurchaseQuote(purchaseQuote); + + //新增采购报价历史数据 + int insertHistoryResult = purchaseQuoteHistoryService.generatePurchaseQuoteHistory(purchaseQuote); + if (insertHistoryResult <= 0){ + throw new BusinessException("新增采购报价历史数据失败"); + } + return result; } + + + /** * 修改采购报价单 * @@ -438,4 +457,67 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService public Object getId(){ return redisCache.generateBillNo("CGBJ"); } + + + /** + * 导入采购报价单 + * */ + @Override + public String importPurchaseQuote(List purchaseQuoteList, boolean updateSupport, String operName) { + + if (StringUtils.isNull(purchaseQuoteList) || purchaseQuoteList.size() == 0) + { + throw new BusinessException("导入采购报价数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); +// for (PurchaseQuote purchaseQuote : purchaseQuoteList) +// { +// try +// { +// // 验证是否存在这个用户 +// SysUser u = userMapper.selectUserByLoginName(user.getLoginName()); +// if (StringUtils.isNull(u)) +// { +// user.setPassword(Md5Utils.hash(user.getLoginName() + password)); +// user.setCreateBy(operName); +// this.insertUser(user); +// successNum++; +// successMsg.append("
" + successNum + "、账号 " + user.getLoginName() + " 导入成功"); +// } +// else if (isUpdateSupport) +// { +// user.setUpdateBy(operName); +// this.updateUser(user); +// successNum++; +// successMsg.append("
" + successNum + "、账号 " + user.getLoginName() + " 更新成功"); +// } +// else +// { +// failureNum++; +// failureMsg.append("
" + failureNum + "、账号 " + user.getLoginName() + " 已存在"); +// } +// } +// catch (Exception e) +// { +// failureNum++; +// String msg = "
" + failureNum + "、账号 " + user.getLoginName() + " 导入失败:"; +// failureMsg.append(msg + e.getMessage()); +// log.error(msg, e); +// } +// } +// if (failureNum > 0) +// { +// failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); +// throw new BusinessException(failureMsg.toString()); +// } +// else +// { +// successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); +// } + return successMsg.toString(); + + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java index 78796e79..9d702027 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java @@ -452,12 +452,16 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService makeorderBomMapper.updateSysMakeorderBom(makeBom); } } -// sysMakeOrder.setMakeStatus("3");//生产状态-待生产 -// sysMakeOrder.setEceiptStatus("0");//入库状态-待采购 + sysMakeOrder.setMakeStatus("3");//生产状态-待生产 + sysMakeOrder.setEceiptStatus("0");//入库状态-待采购 //测试用状态(跳过采购) - sysMakeOrder.setMakeStatus("4");//生产状态-待生产 - sysMakeOrder.setEceiptStatus("7");//入库状态-待采购 +// sysMakeOrder.setMakeStatus("4");//生产状态-待生产 +// sysMakeOrder.setEceiptStatus("7");//入库状态-待采购 + + //生成采购计划 + purchasePlanService.generatePurchasePlanByMakeOrder(sysMakeOrder); + updateSysMakeOrder(sysMakeOrder); } diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanChildMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanChildMapper.xml index 70e4e011..0342064b 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanChildMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanChildMapper.xml @@ -142,6 +142,78 @@ + + + insert into purchase_plan_child ( + purchase_plan_code, + purchase_plan_status, + correlation_code, + purchase_plan_type, + material_no, + material_name, + material_type, + material_photoUrl, + material_brand, + material_unit, + material_describe, + material_process_method, + material_model, + warehouse_dept, + material_noRmb_sum, + material_rmb_sum, + plan_purchase_num, + purchase_num, + actual_purchase_num, + shared_inventory_occupancy_num, + cancel_num, + plan_delivery_time, + this_purchase_num, + shared_available_inventory_num, + latest_quote_rmb, + create_by, + create_time, + remark, + del_flag + ) values + + ( + #{item.purchasePlanCode}, + #{item.purchasePlanStatus}, + #{item.correlationCode}, + #{item.purchasePlanType}, + #{item.materialNo}, + #{item.materialName}, + #{item.materialType}, + #{item.materialPhotourl}, + #{item.materialBrand}, + #{item.materialUnit}, + #{item.materialDescribe}, + #{item.materialProcessMethod}, + #{item.materialModel}, + #{item.warehouseDept}, + #{item.materialNoRmbSum}, + #{item.materialRmbSum}, + #{item.planPurchaseNum}, + #{item.purchaseNum}, + #{item.actualPurchaseNum}, + #{item.sharedInventoryOccupancyNum}, + #{item.cancelNum}, + #{item.planDeliveryTime}, + #{item.thisPurchaseNum}, + #{item.sharedAvailableInventoryNum}, + #{item.latestQuoteRmb}, + #{item.createBy}, + #{item.createTime}, + #{item.remark}, + #{item.delFlag} + ) + + + + + + + update purchase_plan_child diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml index f9cd1dc2..5c7a2d6d 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml @@ -42,6 +42,7 @@ and purchase_plan_type = #{purchasePlanType} and create_time between #{params.beginCreateTime} and #{params.endCreateTime} + order by create_time desc + + + + insert into purchase_quote_child @@ -242,4 +249,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteHistoryMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteHistoryMapper.xml index a899c8d2..70be7175 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteHistoryMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteHistoryMapper.xml @@ -30,11 +30,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select purchase_quote_child_id, purchase_quote_code, material_id, material_code, material_name, material_type, processMethod, brand, photoUrl, describe, tax_rate, usd_rate, material_num, material_sole, material_rmb, material_noRmb, supplier_code, supplier_name, create_by, create_time, update_by, update_time, remark, use_status, audit_status, del_flag from purchase_quote_history + select purchase_quote_child_id, purchase_quote_code, material_id, material_code, material_name, material_type, processMethod, brand, photoUrl, describe, tax_rate, usd_rate, material_num, material_sole, material_rmb, material_noRmb, supplier_code, supplier_name, create_by, create_time, update_by, update_time, remark, use_status, audit_status, is_latest,del_flag from purchase_quote_history + + where purchase_quote_code = #{purchaseQuoteCode} and material_code = #{materialCode} and audit_status = '1' + order by update_time desc + limit 1 + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html index da4cb084..3c35313e 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html @@ -92,7 +92,6 @@ fixedColumns: true, // 启用冻结列 fixedRightNumber: 1, // 冻结右列个数 sortable: true, // 是否启用排序 - sortStable: true, // 设置为 true 将获得稳定的排序 columns: [{ checkbox: true }, @@ -101,7 +100,6 @@ field: 'purchaseOrderId', visible: false }, - {title: '流程实例ID',field: 'instanceId',visible: false}, { title: '流程提交实例ID',field: 'submitInstanceId',visible: false}, { title:'流程作废实例ID',field: 'cancelInstanceId',visible: false}, @@ -116,11 +114,6 @@ } }, - {title: '审核状态',field: 'auditStatus',visible: false, - formatter: function(value, row, index) { - return $.table.selectDictLabel(auditStatusDatas, value);} - }, - {title: '当前状态',field: 'taskStatus', formatter: function(value, row, index) { if(row.auditStatus!="1"&&value != "未启动"){ diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html index d5212a5e..54d937bb 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html @@ -267,6 +267,10 @@ animation-fill-mode: none; var prefix = ctx + "purchase/purchasePlan" + + // 全局变量存储 supplierCode + var selectedSupplierCode = ''; + $("#form-addPurchaseOrder-addTwo").validate({focusCleanup: true}); $("input[name='planDeliveryTime']").datetimepicker({ @@ -303,6 +307,15 @@ animation-fill-mode: none; $('#supplierCode').val(supplierCode); $('#supplierName').val(supplierName); + // 存储 supplierCode 到全局变量 + selectedSupplierCode = supplierCode; + + // 切换到第二步前,刷新 bootstrap-table + $('#selectMaterial-bootstrap-table').bootstrapTable('refresh', { + url: prefix + "/selectMaterialTwoList", + queryParams: queryParamsTwo + }); + // 切换到第二步 $('#smartwizard').smartWizard("next"); }); @@ -513,7 +526,6 @@ animation-fill-mode: none; $(function() { var options = { id: "selectMaterial-bootstrap-table", - url: prefix + "/selectMaterialTwoList", queryParams: queryParamsTwo, showSearch: false, showRefresh: false, @@ -719,12 +731,12 @@ animation-fill-mode: none; }); - function queryParamsTwo(params){ - + function queryParamsTwo(params) { var curParams = { - purchasePlanCode : $("#purchasePlanCodes").val() + purchasePlanCode: $("#purchasePlanCodes").val(), + supplierCode: selectedSupplierCode // 使用全局变量 }; - return curParams + return curParams; } diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html index 188ea481..db95ddaf 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html @@ -25,10 +25,6 @@ -
  • - - -
  • @@ -86,6 +82,7 @@ detailView: true, fixedColumns: true, // 启用冻结列 fixedRightNumber: 1, // 冻结右列个数 + sortable: true, onExpandRow : function(index,row,$detail){ $detail.html('
    ').find('table'); // 一阶 @@ -108,8 +105,9 @@ {title: '作废总数',field: 'cancelSum',}, {title: '不含税总价(RMB)',field: 'noRmbSum',}, {title: '含税总价(RMB)',field: 'rmbSum',}, - {title: '申请人',field: 'applyUser',}, - {title: '录入时间',field: 'createTime',}, + {title: '录入时间',field: 'createTime', + sortable: true, + }, {title: '更新人',field: 'updateBy',}, {title: '上次更新时间',field: 'updateTime',}, {title: '操作',align: 'center', diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/purchaseQuote.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/purchaseQuote.html index 2fc31fca..71a93b81 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/purchaseQuote.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/purchaseQuote.html @@ -69,9 +69,9 @@ 导出 - - 导入 - + + +