基于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月前
|
运维 供应链 前端开发
开发一个 ERP
【9月更文第5天】开发一个 ERP (Enterprise Resource Planning) 系统是一项复杂的工程,涉及到多个业务流程的集成与优化。ERP 系统旨在帮助企业整合财务、人力资源、采购、销售、库存管理和生产计划等多个部门的数据,从而提高运营效率和决策质量。本文将带你一起体验从零开始开发一个简单的 ERP 系统,并通过示例代码来说明关键组件的设计与实现。
255 3
|
3月前
|
前端开发 JavaScript 关系型数据库
如何开发一个ERP系统:从零开始构建
【9月更文第4天】企业资源计划(ERP)系统是现代企业管理不可或缺的一部分,它集成了公司的关键业务流程,并提供了统一的数据管理平台。本文将探讨如何从零开始构建一个简单的ERP系统,并提供一些基本的代码示例来演示关键组件的开发过程。
865 3
|
7月前
|
JavaScript 前端开发
基于Jeecgboot前后端分离的ERP系统开发系列--出库单(2)
基于Jeecgboot前后端分离的ERP系统开发系列--出库单(2)
81 1
|
7月前
|
移动开发 供应链 前端开发
基于jeecgboot的ERP部分演示功能发布
基于jeecgboot的ERP部分演示功能发布
133 0
|
7月前
|
数据库
基于Jeecgboot前后端分离的ERP系统开发代码生成(六)
基于Jeecgboot前后端分离的ERP系统开发代码生成(六)
464 0
|
7月前
|
前端开发
基于Jeecgboot前后端分离的ERP系统开发系列--出库单(3)
基于Jeecgboot前后端分离的ERP系统开发系列--出库单(3)
93 0
|
5天前
|
监控 JavaScript 数据可视化
实施模切ERP系统,为模切企业带来哪些效益
在众多制造企业中,工厂的日常运营依旧依赖于人工管理,导致生产效率低、反应慢、容易出错。 1、急单交期短、订单频繁变更怎么办? 2、物料、半成品如何及时跟上生产? 3、 客户验厂,品质质量如何追溯? 4、机台信息不清楚,时间配置情况不确定?
22 2
|
5月前
|
存储 安全 数据安全/隐私保护
ERP系统的灾备与数据恢复:保障企业业务连续性
【7月更文挑战第29天】 ERP系统的灾备与数据恢复:保障企业业务连续性
270 2
|
27天前
|
弹性计算 监控 数据库
制造企业ERP系统迁移至阿里云ECS的实例,详细介绍了从需求分析、数据迁移、应用部署、网络配置到性能优化的全过程
本文通过一个制造企业ERP系统迁移至阿里云ECS的实例,详细介绍了从需求分析、数据迁移、应用部署、网络配置到性能优化的全过程,展示了企业级应用上云的实践方法与显著优势,包括弹性计算资源、高可靠性、数据安全及降低维护成本等,为企业数字化转型提供参考。
52 5
|
1月前
|
人工智能 JavaScript 大数据
模切企业上点晴模切ERP系统是否合算
在模切行业快速发展的今天,企业如何提升管理效率、降低成本、增强市场竞争力成为了关键问题。面对市场上琳琅满目的模切ERP系统,点晴模切ERP在模切领域积累了20余年丰富的行业经验,能够提供贴合模切行业管理需求的先进解决方案。同时选择上点晴模切ERP系统是否理想选择,也成为众多模切企业关注的焦点。
31 8