基于Jeecgboot前后端分离的ERP系统开发代码生成(五)

简介: 基于Jeecgboot前后端分离的ERP系统开发代码生成(五)

   这个部分主要是对采购入库经过审核进行库存更新与库存变动日志记录

1、通过两个表erp_goods_stock和erp_goods_stock_log生成两个模块,分别是商品库存表与库存变动表

  其中的前后端代码可以直接拿过来使用,当然以后很多地方还需要修改,目前先完成基本功能。

2、对采购入库审核通过的代码如下:

@Override
  @Transactional
  public Result approvePass(String id) throws Exception {
    ErpInSheet erpInSheet = erpInSheetMapper.selectById(id);
    if (erpInSheet == null) {
      return Result.error("采购入库单不存在!");
    }
    if (erpInSheet.getStatus() == 2 ) {
      return Result.error("采购入库单已审核通过,不能再次审核!");
    }
    
    erpInSheet.setStatus(2); //审核通过标志 2代表通过
    SysUser loginUser = iErpThirdService.getLoginUser();
    LambdaUpdateWrapper<ErpInSheet> updateOrderWrapper = Wrappers.lambdaUpdate(ErpInSheet.class)
            .set(ErpInSheet::getApproveBy, loginUser.getUsername())
            .set(ErpInSheet::getApproveTime, LocalDateTime.now())
            .eq(ErpInSheet::getId, erpInSheet.getId());
    if(erpInSheetMapper.update(erpInSheet, updateOrderWrapper) != 1) {
      return Result.error("采购入库单信息已过期,请刷新重试!");
    }
    Wrapper<ErpInSheetDetail> queryDetailWrapper = Wrappers.lambdaQuery(ErpInSheetDetail.class)
            .eq(ErpInSheetDetail::getSheetId, erpInSheet.getId())
            .orderByAsc(ErpInSheetDetail::getOrderNo);
        List<ErpInSheetDetail> details = erpInSheetDetailService.list(queryDetailWrapper);
        for (ErpInSheetDetail detail : details) {
          ErpGoodsStockVo erpGoodsStockVo = new ErpGoodsStockVo();
          erpGoodsStockVo.setScId(erpInSheet.getScId());
          erpGoodsStockVo.setGoodsId(detail.getGoodsId());
          erpGoodsStockVo.setStockNum(detail.getOrderNum());
          erpGoodsStockVo.setTaxAmount(NumberUtil.mul(detail.getTaxPrice(), detail.getOrderNum()));
          erpGoodsStockVo.setUnTaxAmount(NumberUtil.mul(NumberUtil.calcUnTaxPrice(detail.getTaxPrice(), detail.getTaxRate()), detail.getOrderNum()));
          erpGoodsStockVo.setTaxPrice(detail.getTaxPrice());
          erpGoodsStockVo.setUnTaxPrice(NumberUtil.calcUnTaxPrice(detail.getTaxPrice(), detail.getTaxRate()));
          erpGoodsStockVo.setBizCode(erpInSheet.getCode());
          erpGoodsStockVo.setBizDetailId(detail.getId());
          erpGoodsStockVo.setBizId(erpInSheet.getId());
          erpGoodsStockVo.setBizType(GoodsStockType.PURCHASE.getCode());
          erpGoodsStockService.inStock(erpGoodsStockVo);
        }
    return Result.OK("审核通过完成");
  }

这里用了两个枚举

public enum GoodsStockType implements BaseEnum<Integer> {
  PURCHASE(1, "采购入库"), PURCHASE_RETURN(2, "采购退货出库"), SALE(3, "销售出库"), SALE_RETURN(4,
          "销售退货入库"), RETAIL(5,
          "零售出库"), RETAIL_RETURN(6, "零售退货入库"), CHECK_STOCK_IN(7, "盘点入库"), CHECK_STOCK_OUT(8,
          "盘点出库"), STOCK_COST_ADJUST(
          9, "库存成本调整");
      @EnumValue
      private final Integer code;
      private final String desc;
      GoodsStockType(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
      }
      @Override
      public Integer getCode() {
        return this.code;
      }
      @Override
      public String getDesc() {
        return this.desc;
      }
}
/**
 * @Description: Enum基类
 * @Author: nbacheng
 * @Date:   2022-11-25
 * @Version: V1.0
 */
public interface BaseEnum<T extends Serializable> extends Serializable {
    /**
     * 获取枚举值
     *
     * @return
     */
    T getCode();
    /**
     * 获取描述
     *
     * @return
     */
    String getDesc();
  }

3、上面同时调用了inStock的方法,代码如下:

@Override
  @Transactional
  public void inStock(ErpGoodsStockVo erpGoodsStockVo) throws Exception {
      Wrapper<ErpGoodsStock> queryWrapper = Wrappers.lambdaQuery(ErpGoodsStock.class)
              .eq(ErpGoodsStock::getGoodsId, erpGoodsStockVo.getGoodsId()).eq(ErpGoodsStock::getScId, erpGoodsStockVo.getScId());
  
      ErpGoodsStock inerpGoodsStock =  erpGoodsStockMapper.selectOne(queryWrapper);
      ErpGoodsStockLog erpGoodsStockLog = new ErpGoodsStockLog();
      if(inerpGoodsStock == null) {
      //第一次入库,新增记录
      inerpGoodsStock = new ErpGoodsStock();
      inerpGoodsStock.setScId(erpGoodsStockVo.getScId());
      inerpGoodsStock.setGoodsId(erpGoodsStockVo.getGoodsId());
      inerpGoodsStock.setStockNum(erpGoodsStockVo.getStockNum());
      inerpGoodsStock.setTaxPrice(erpGoodsStockVo.getTaxPrice());
      inerpGoodsStock.setTaxAmount(erpGoodsStockVo.getTaxAmount());
      inerpGoodsStock.setUnTaxPrice(erpGoodsStockVo.getUnTaxPrice());
      inerpGoodsStock.setUnTaxAmount(erpGoodsStockVo.getUnTaxAmount());
  
      erpGoodsStockMapper.insert(inerpGoodsStock);
      
      erpGoodsStockLog.setOriStockNum(0);
      erpGoodsStockLog.setOriUnTaxPrice(BigDecimal.ZERO);
      erpGoodsStockLog.setOriTaxPrice(BigDecimal.ZERO);
    }
    else {//已有库存数量金额更新
      LambdaUpdateWrapper<ErpGoodsStock> updateWrapper = Wrappers.lambdaUpdate(ErpGoodsStock.class)
              .eq(ErpGoodsStock::getScId, erpGoodsStockVo.getScId())
              .eq(ErpGoodsStock::getGoodsId, erpGoodsStockVo.getGoodsId());
      
      erpGoodsStockLog.setOriStockNum(inerpGoodsStock.getStockNum());
      erpGoodsStockLog.setOriUnTaxPrice(inerpGoodsStock.getUnTaxPrice());
      erpGoodsStockLog.setOriTaxPrice(inerpGoodsStock.getTaxPrice());
      inerpGoodsStock.setScId(erpGoodsStockVo.getScId());
      inerpGoodsStock.setGoodsId(erpGoodsStockVo.getGoodsId());
      inerpGoodsStock.setStockNum(inerpGoodsStock.getStockNum() + erpGoodsStockVo.getStockNum());
      inerpGoodsStock.setTaxAmount(NumberUtil.add(inerpGoodsStock.getTaxAmount(), erpGoodsStockVo.getTaxAmount()));
      inerpGoodsStock.setTaxPrice(NumberUtil.div(inerpGoodsStock.getTaxAmount(), inerpGoodsStock.getStockNum()));
      inerpGoodsStock.setUnTaxAmount(NumberUtil.add(inerpGoodsStock.getUnTaxAmount(), erpGoodsStockVo.getUnTaxAmount()));
      inerpGoodsStock.setUnTaxPrice(NumberUtil.div(inerpGoodsStock.getUnTaxAmount(), inerpGoodsStock.getStockNum()));
      if(erpGoodsStockMapper.update(inerpGoodsStock, updateWrapper) != 1) {
        throw new Exception("入库更新信息已过期,请刷新重试!");
      }
    }
    erpGoodsStockLog.setGoodsId(erpGoodsStockVo.getGoodsId());
    erpGoodsStockLog.setScId(erpGoodsStockVo.getScId());
    erpGoodsStockLog.setStockNum(erpGoodsStockVo.getStockNum());
    erpGoodsStockLog.setTaxAmount(erpGoodsStockVo.getTaxAmount());
    erpGoodsStockLog.setUnTaxAmount(erpGoodsStockVo.getUnTaxAmount());
    erpGoodsStockLog.setCurStockNum(inerpGoodsStock.getStockNum());
    erpGoodsStockLog.setCurTaxPrice(inerpGoodsStock.getTaxPrice());
    erpGoodsStockLog.setCurUnTaxPrice(inerpGoodsStock.getUnTaxPrice());
    erpGoodsStockLog.setBizCode(erpGoodsStockVo.getBizCode());
    erpGoodsStockLog.setBizDetailId(erpGoodsStockVo.getBizDetailId());
    erpGoodsStockLog.setBizId(erpGoodsStockVo.getBizId());
    erpGoodsStockLog.setBizType(erpGoodsStockVo.getBizType());
    erpGoodsStockLogService.save(erpGoodsStockLog);
    
  }

4、效果图:

两条采购入库

库存表

库存变动表


相关文章
|
3天前
|
存储 关系型数据库 BI
如何开发ERP系统中的财务管理板块(附架构图+流程图+代码参考)
本文深入解析ERP系统中财务管理模块的设计与实现,涵盖核心功能、业务流程、开发技巧及代码示例,助力企业打造高效、智能的财务管理系统。
|
3天前
|
SQL 存储 供应链
如何开发ERP系统中的库存管理板块(附架构图+流程图+代码参考)
本文介绍如何通过ERP系统实现企业库存管理的数字化与自动化,涵盖仓库管理、库位管理、出入库操作、库存调拨与盘点等功能设计,并提供开发技巧及代码参考,帮助企业提升库存管理效率,减少错误与资源浪费。
|
6天前
|
供应链 Python
如何开发ERP系统中的采购管理板块(附架构图+流程图+代码参考)
本文介绍如何在ERP系统中开发高效采购管理模块,涵盖采购申请、订单处理、入库与退货等关键流程,解析核心功能与业务逻辑,并提供代码参考及开发技巧,助力企业优化采购管理效率。
|
6天前
|
监控 数据挖掘 BI
如何开发ERP系统中的生产管理板块(附架构图+流程图+代码参考)
本文探讨了如何高效整合资源、优化生产流程,并通过ERP系统提升企业竞争力。重点分析了生产管理模块的开发,涵盖生产工单、物料操作、生产流程、统计分析及辅助功能等方面,帮助企业实现生产效率提升与成本控制。
|
6天前
|
监控 安全 调度
如何开发ERP系统中的计划管理板块(附架构图+流程图+代码参考)
本文介绍了ERP系统中计划管理模块的重要性及开发方法,涵盖生产计划、物料需求、调度优化等功能,并提供代码示例与落地建议,帮助企业提升生产效率、优化资源配置。
|
3天前
|
SQL 数据挖掘 API
如何开发ERP系统中的质量管理板块(附架构图+流程图+代码参考)
质量管理在ERP系统中的作用不仅仅是记录质量检验数据,它还涉及到从物料采购、生产过程、到最终产品的全流程管理。如何搭建一个高效、可靠的质量管理板块,成为了许多企业在进行ERP系统开发时需要重点考虑的问题。本文将详细介绍如何开发ERP系统中的质量管理板块,涵盖功能模块、业务流程、开发技巧和实现效果等方面,并提供具体的代码参考。
|
6天前
|
SQL 监控 供应链
如何开发ERP系统中的委外管理板块(附架构图+流程图+代码参考)
在ERP系统中,委外管理模块能有效提升企业生产效率、降低成本。通过工单下发、物料发放、退料、入库及数据分析等功能,实现对外部合作的全流程管理,确保信息透明与流程顺畅。本文详解模块开发技巧与实现方案,助力企业快速搭建高效委外管理体系。
|
7天前
|
存储 消息中间件 开发框架
如何开发一套ERP系统(附架构图+流程图+代码参考)
ERP系统是企业资源计划的核心工具,有效解决信息孤岛、数据重复等问题,提升管理效率与运营成本控制能力。本文详解ERP系统的核心模块及订单管理模块的开发流程,涵盖功能设计、技术选型与代码示例,助力企业高效搭建信息系统。
|
7天前
|
存储 JavaScript 前端开发
如何开发ERP系统中的技术管理板块(附架构图+流程图+代码参考)
ERP系统中的技术管理板块对企业资源规划至关重要,尤其在制造业中,涵盖产品信息管理、BOM维护、工艺路线设计等功能,确保生产流程高效协同。本文详解其方案设计、核心模块与开发技巧,助力企业构建高效管理系统。
|
2月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
219 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发