商贸型企业 Java 收货 + 入库 + 生成付款单
- package cn.hybn.erp.modular.system.service.impl;
- import cn.hybn.erp.core.common.page.LayuiPageFactory;
- import cn.hybn.erp.core.common.page.LayuiPageInfo;
- import cn.hybn.erp.modular.system.base.BaseStatus;
- import cn.hybn.erp.modular.system.base.Order;
- import cn.hybn.erp.modular.system.base.Status;
- import cn.hybn.erp.modular.system.entity.*;
- import cn.hybn.erp.modular.system.mapper.GrnOrderMapper;
- import cn.hybn.erp.modular.system.model.params.GrnOrderParam;
- import cn.hybn.erp.modular.system.model.params.PurchaseOrderParam;
- import cn.hybn.erp.modular.system.model.result.GrnOrderResult;
- import cn.hybn.erp.modular.system.service.*;
- import cn.hybn.erp.modular.system.utility.Katrina_CJ_Utils;
- import cn.stylefeng.roses.core.util.ToolUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.sun.xml.internal.bind.v2.TODO;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.io.Serializable;
- import java.math.BigDecimal;
- import java.util.*;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author Katrina_CJ
- * @since 2019-03-16
- */
- @Service
- public class GrnOrderServiceImpl extends ServiceImpl<GrnOrderMapper, GrnOrder> implements GrnOrderService {
- @Autowired
- private PurchaseDetailService purchaseDetailService;
- @Autowired
- private GrnOrderDetailService grnOrderDetailService;
- @Autowired
- private InventoryService inventoryService;
- @Autowired
- private InventoryTransactionService inventoryTransactionService;
- @Autowired
- private PurchaseOrderService purchaseOrderService;
- @Autowired
- private PaymentOrderService paymentOrderService;
- @Override
- public void add(GrnOrderParam param) {
- GrnOrder entity = getEntity(param);
- this.save(entity);
- }
- @Override
- public void delete(GrnOrderParam param) {
- this.removeById(getKey(param));
- }
- @Override
- public void update(GrnOrderParam param) {
- GrnOrder oldEntity = getOldEntity(param);
- GrnOrder newEntity = getEntity(param);
- ToolUtil.copyProperties(newEntity, oldEntity);
- this.updateById(newEntity);
- }
- @Override
- public GrnOrderResult findBySpec(GrnOrderParam param) {
- return null;
- }
- @Override
- public List<GrnOrderResult> findListBySpec(GrnOrderParam param) {
- return null;
- }
- @Override
- public LayuiPageInfo findPageBySpec(GrnOrderParam param) {
- Page pageContext = getPageContext();
- QueryWrapper<GrnOrder> objectQueryWrapper = new QueryWrapper<>();
- IPage page = this.page(pageContext, objectQueryWrapper);
- return LayuiPageFactory.createPageInfo(page);
- }
- @Override
- @Transactional(rollbackFor = {Exception.class})
- public void createGrnOrder(PurchaseOrderParam param) {
- GrnOrder grnOrder = new GrnOrder();
- grnOrder.setGrnOrderStatus(Status.CREATE.getStatus());
- grnOrder.setOrderId(param.getPoId());
- grnOrder.setGrnOrderCreateTime(new Date());
- QueryWrapper<GrnOrder> wrapper = new QueryWrapper<>();
- wrapper.orderByDesc("grn_order_id").last("limit 1");
- GrnOrder grnId = this.getOne(wrapper);
- //如果当前数据库没有订单,手动赋值
- if (Objects.isNull(grnId)) {
- grnId = new GrnOrder();
- grnId.setOrderId((long) 0);
- }
- //创建订单编号
- LoggerFactory.getLogger(GrnOrderServiceImpl.class).info("DEBUG:->" + String.valueOf(grnId.getOrderId()));
- String serial = Katrina_CJ_Utils.createOrderSerial(Order.RKD_, grnId.getOrderId());
- grnOrder.setGrnOrderSerial(serial);
- //填充入库单明细
- // QueryWrapper<PurchaseDetail> queryWrapper = new QueryWrapper<>();
- // queryWrapper.eq("order_po_id", param.getPoId());
- //当前采购单明细
- // List<PurchaseDetail> details = purchaseDetailService.list(queryWrapper);
- this.getBaseMapper().insert(grnOrder);
- // details.forEach(pd -> {
- // GrnOrderDetail grnOrderDetail = new GrnOrderDetail();
- // grnOrderDetail.setGrnOrderId(grnOrder.getGrnOrderId());
- // grnOrderDetail.setGrnDetailIsGift(pd.getOrderIsGifts());
- // grnOrderDetail.setGrnDetailProductId(pd.getOrderProductId());
- // grnOrderDetail.setGrnDetailUnit(pd.getOrderUnit());
- // grnOrderDetail.setGrnDetailGoods(new BigDecimal(0));
- // grnOrderDetailService.getBaseMapper().insert(grnOrderDetail);
- // });
- }
- @Override
- @Transactional(rollbackFor = {Exception.class})
- public void getGoods(GrnOrderParam grnOrderParam) {
- GrnOrder grnOrder = new GrnOrder();
- grnOrder.setGrnOrderId(grnOrderParam.getGrnOrderId());
- grnOrder.setGrnOrderAgent(grnOrderParam.getGrnOrderAgent());
- grnOrder.setGrnOrderAgentDept(grnOrderParam.getGrnOrderAgentDept());
- grnOrder.setGrnOrderGetGoodsTime(new Date());
- grnOrder.setGrnOrderRemark(grnOrderParam.getGrnOrderRemark());
- grnOrder.setGrnOrderStatus(Status.FINISH.getStatus());
- List<GrnOrderDetail> grnOrderDetails = JSONObject.parseArray(grnOrderParam.getGrnOrderDetail(), GrnOrderDetail.class);
- //更新入库单
- this.getBaseMapper().updateById(grnOrder);
- //更新入库单详情
- grnOrderDetails.forEach(g -> {
- // grnOrderDetail.setGrnDetailIsGift(pd.getOrderIsGifts());
- // grnOrderDetail.setGrnDetailProductId(pd.getOrderProductId());
- // grnOrderDetail.setGrnDetailUnit(pd.getOrderUnit());
- // grnOrderDetail.setGrnDetailGoods(new BigDecimal(0));
- g.setGrnDetailProductId(g.getGrnDetailProductId());
- g.setGrnDetailIsGift(g.getGrnDetailIsGift());
- g.setGrnOrderId(grnOrder.getGrnOrderId());
- grnOrderDetailService.getBaseMapper().insert(g);
- });
- //查询入库单详情
- QueryWrapper<GrnOrderDetail> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("grn_order_id", grnOrder.getGrnOrderId());
- //更新库存和库存事务
- List<GrnOrderDetail> details = grnOrderDetailService.list(queryWrapper);
- //获取采购单数据
- GrnOrder grn = this.getById(grnOrder.getGrnOrderId());
- PurchaseOrder purchaseOrder = purchaseOrderService.getById(grn.getOrderId());
- //更新采购单数据
- QueryWrapper<PurchaseDetail> purchaseDetailQueryWrapper = new QueryWrapper<>();
- purchaseDetailQueryWrapper.eq("order_po_id", purchaseOrder.getPoId());
- List<PurchaseDetail> purchaseDetails = purchaseDetailService.list(purchaseDetailQueryWrapper);
- //移除无入库的明细
- details.removeIf(d -> Objects.isNull(d.getGrnDetailWarehouse()));
- details.forEach(d -> {
- QueryWrapper<Inventory> inventoryQueryWrapper = new QueryWrapper<>();
- inventoryQueryWrapper.eq("inventory_product_id", d.getGrnDetailProductId());
- List<Inventory> inventories = inventoryService.list(inventoryQueryWrapper);
- //如果无当前产品,新增库存
- if (inventories.size() == 0) {
- //新库存
- Inventory inventory = new Inventory();
- inventory.setInventoryAmount(d.getGrnDetailGoods());
- inventory.setInventoryAvailableLocation(d.getGrnDetailGoods());
- inventory.setInventoryIn(d.getGrnDetailGoods());
- inventory.setInventoryLow(new BigDecimal(0));
- inventory.setInventoryProductId(d.getGrnDetailProductId());
- inventory.setInventoryMax(new BigDecimal(0));
- inventory.setInventoryWarehouseId(d.getGrnDetailWarehouse());
- inventory.setInventoryUnit(d.getGrnDetailUnit());
- inventory.setInventoryCreateTime(new Date());
- inventory.setInventoryOnWay(new BigDecimal(0));
- inventory.setInventoryBatch(d.getGrnDetailBatch());
- inventory.setInventoryProductTime(d.getGrnDetailProductTime());
- inventoryService.getBaseMapper().insert(inventory);
- //新库存事务
- InventoryTransaction transaction = new InventoryTransaction();
- transaction.setGrnTransactionInventoryId(inventory.getInventoryId());
- transaction.setGrnTransactionIsGift(d.getGrnDetailIsGift());
- transaction.setGrnTransactionOrderSerial(grnOrderParam.getGrnOrderSerial());
- transaction.setGrnTransactionBatch(d.getGrnDetailBatch());
- transaction.setGrnTransactionType(BaseStatus.RK.getDesc());
- transaction.setGrnTransactionProductId(d.getGrnDetailProductId());
- transaction.setGrnTransactionGrnOrderId(grnOrder.getGrnOrderId());
- transaction.setGrnTransactionHappenNumber(d.getGrnDetailGoods());
- transaction.setGrnTransactionProductionOfDate(d.getGrnDetailProductTime());
- transaction.setGrnTransactionProductBarcode(d.getGrnDetailBarcode());
- inventoryTransactionService.getBaseMapper().insert(transaction);
- } else {
- inventories.forEach(inventory -> {
- //库位一致
- if (inventory.getInventoryWarehouseId().equals(d.getGrnDetailWarehouse())) {
- //单位一致
- if (inventory.getInventoryUnit().equals(d.getGrnDetailUnit())) {
- //更新库存数量
- inventory.setInventoryAmount(inventory.getInventoryAmount().add(d.getGrnDetailGoods()));
- inventoryService.getBaseMapper().updateById(inventory);
- } else {
- //新库存
- Inventory newInventory = new Inventory();
- newInventory.setInventoryAmount(d.getGrnDetailGoods());
- newInventory.setInventoryAvailableLocation(d.getGrnDetailGoods());
- newInventory.setInventoryIn(d.getGrnDetailGoods());
- newInventory.setInventoryLow(new BigDecimal(0));
- newInventory.setInventoryProductId(d.getGrnDetailProductId());
- newInventory.setInventoryMax(new BigDecimal(0));
- newInventory.setInventoryWarehouseId(d.getGrnDetailWarehouse());
- newInventory.setInventoryUnit(d.getGrnDetailUnit());
- newInventory.setInventoryCreateTime(new Date());
- newInventory.setInventoryOnWay(new BigDecimal(0));
- newInventory.setInventoryBatch(d.getGrnDetailBatch());
- newInventory.setInventoryProductTime(d.getGrnDetailProductTime());
- inventoryService.getBaseMapper().insert(newInventory);
- //新库存事务
- InventoryTransaction transaction = new InventoryTransaction();
- transaction.setGrnTransactionInventoryId(newInventory.getInventoryId());
- transaction.setGrnTransactionIsGift(d.getGrnDetailIsGift());
- transaction.setGrnTransactionOrderSerial(grnOrderParam.getGrnOrderSerial());
- transaction.setGrnTransactionBatch(d.getGrnDetailBatch());
- transaction.setGrnTransactionType(BaseStatus.RK.getDesc());
- transaction.setGrnTransactionProductId(d.getGrnDetailProductId());
- transaction.setGrnTransactionGrnOrderId(grnOrder.getGrnOrderId());
- transaction.setGrnTransactionHappenNumber(d.getGrnDetailGoods());
- transaction.setGrnTransactionProductionOfDate(d.getGrnDetailProductTime());
- transaction.setGrnTransactionProductBarcode(d.getGrnDetailBarcode());
- inventoryTransactionService.getBaseMapper().insert(transaction);
- }
- } else {
- //新库存
- Inventory newInventory = new Inventory();
- newInventory.setInventoryAmount(d.getGrnDetailGoods());
- newInventory.setInventoryAvailableLocation(d.getGrnDetailGoods());
- newInventory.setInventoryIn(d.getGrnDetailGoods());
- newInventory.setInventoryLow(new BigDecimal(0));
- newInventory.setInventoryProductId(d.getGrnDetailProductId());
- newInventory.setInventoryMax(new BigDecimal(0));
- newInventory.setInventoryWarehouseId(d.getGrnDetailWarehouse());
- newInventory.setInventoryUnit(d.getGrnDetailUnit());
- newInventory.setInventoryCreateTime(new Date());
- newInventory.setInventoryOnWay(new BigDecimal(0));
- newInventory.setInventoryBatch(d.getGrnDetailBatch());
- newInventory.setInventoryProductTime(d.getGrnDetailProductTime());
- inventoryService.getBaseMapper().insert(newInventory);
- //新库存事务
- InventoryTransaction transaction = new InventoryTransaction();
- transaction.setGrnTransactionInventoryId(newInventory.getInventoryId());
- transaction.setGrnTransactionIsGift(d.getGrnDetailIsGift());
- transaction.setGrnTransactionOrderSerial(grnOrderParam.getGrnOrderSerial());
- transaction.setGrnTransactionBatch(d.getGrnDetailBatch().longValue());
- transaction.setGrnTransactionType(BaseStatus.RK.getDesc());
- transaction.setGrnTransactionProductId(d.getGrnDetailProductId());
- transaction.setGrnTransactionGrnOrderId(grnOrder.getGrnOrderId());
- transaction.setGrnTransactionHappenNumber(d.getGrnDetailGoods());
- transaction.setGrnTransactionProductionOfDate(d.getGrnDetailProductTime());
- transaction.setGrnTransactionProductBarcode(d.getGrnDetailBarcode());
- inventoryTransactionService.getBaseMapper().insert(transaction);
- }
- });
- }
- });
- //TODO
- //生成付款单
- QueryWrapper<PaymentOrder> wrapper = new QueryWrapper<>();
- wrapper.orderByDesc("payment_order_id").last("limit 1");
- PaymentOrder serial = paymentOrderService.getOne(wrapper);
- if (Objects.isNull(serial)) {
- serial = new PaymentOrder();
- serial.setPaymentOrderId((long) 0);
- }
- String paySerial = Katrina_CJ_Utils.createOrderSerial(Order.FKD_, serial.getPaymentOrderId());
- PaymentOrder paymentOrder = new PaymentOrder();
- paymentOrder.setPaymentOrderSerial(paySerial);
- paymentOrder.setPaymentOrderCreateTime(new Date());
- paymentOrder.setPaymentOrderStatus(Status.EXECUTION.getStatus());
- //更新采购单
- //当前采购单总数
- purchaseOrder.setPoSumNumbers(new BigDecimal(0));
- details.forEach(d -> {
- if (purchaseOrder.getPoStatus().equals(Status.EXECUTION.getStatus()) || purchaseOrder.getPoStatus().equals(Status.TERMINATION.getStatus())) {
- purchaseDetails.forEach(pd -> {
- if (pd.getOrderProductId().equals(d.getGrnDetailProductId())) {
- //更新已完成数量
- pd.setOrderFinishNumber(pd.getOrderFinishNumber().add(d.getGrnDetailGoods()));
- int flag = pd.getOrderNumbers().compareTo(pd.getOrderFinishNumber());
- if (flag == 0) {
- //已完成
- pd.setOrderPendingNumber(new BigDecimal(0));
- } else if (flag < 0) {
- //超收
- pd.setOrderPendingNumber(new BigDecimal(0));
- } else {
- //更新未完成数量
- pd.setOrderPendingNumber(pd.getOrderNumbers().subtract(pd.getOrderFinishNumber()));
- }
- paymentOrder.setPaymentAmountsPayable(pd.getOrderPrice().multiply(d.getGrnDetailGoods()));
- purchaseOrder.setPoSumNumbers(purchaseOrder.getPoSumNumbers().add(pd.getOrderFinishNumber()));
- purchaseDetailService.getBaseMapper().updateById(pd);
- }
- });
- } else {
- throw new RuntimeException("订单状态异常!");
- }
- });
- PurchaseOrder purchaseOrder_old = purchaseOrderService.getById(purchaseOrder.getPoId());
- int flag = purchaseOrder.getPoSumNumbers().compareTo(purchaseOrder_old.getPoSumNumbers());
- //订单完成
- if (flag == 0 || flag > 0) {
- //订单完成
- purchaseOrder_old.setPoStatus(Status.FINISH.getStatus());
- purchaseOrderService.getBaseMapper().updateById(purchaseOrder_old);
- }
- paymentOrder.setPaymentGrnOrder(grnOrder.getGrnOrderId());
- //新增付款单
- paymentOrderService.getBaseMapper().insert(paymentOrder);
- }
- private Serializable getKey(GrnOrderParam param) {
- return param.getGrnOrderId();
- }
- private Page getPageContext() {
- return LayuiPageFactory.defaultPage();
- }
- private GrnOrder getOldEntity(GrnOrderParam param) {
- return this.getById(getKey(param));
- }
- private GrnOrder getEntity(GrnOrderParam param) {
- GrnOrder entity = new GrnOrder();
- ToolUtil.copyProperties(param, entity);
- return entity;
- }
- @Override
- public Page<Map<String, Object>> list(String condition, String date_1, String date_2, String status) {
- Page productPage = LayuiPageFactory.defaultPage();
- return baseMapper.order_list(productPage, condition, date_1, date_2, status);
- }
- }
商贸型企业 Java 收货 + 入库 + 生成付款单的更多相关文章
- SAP交货单过账自动生产采购订单、采购订单自动收货入库
公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...
- ERP采购收货在标准成本和移动平均价下的差别
欢迎关注微信公众号:iERPer (ERP咨询顾问之家) ERP系统在处理主要的采购流程有: 下采购合同->下采购订单->收货->发票校验->付款(财务) 其中 收货和发票校验 ...
- PP生产订单创建、下达、报工、收货、投料
转自http://blog.sina.com.cn/s/blog_69fb8eb60102vpjd.html SAP 物料订单创建.下达.报工.收货与投料(ABAP代码) (2015-06-03 22 ...
- PDA移动POS终端系统,实现专柜或店铺的收货、零售、盘点通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理
利用PDA移动终端,实现专柜或店铺的收货.零售.盘点等一体化操作,通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理. · PDA订货会应用解决方案利用PDA或电脑系统,在订货会现场直接 ...
- 微信支付开发(7) 收货地址共享接口V2
关键字:微信公众平台 JSSDK 发送给朋友 收货地址共享接口 openAddress 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-open ...
- JDE报表开发笔记(R5537011 收货校验统计表)
业务场景:根据批次收货,收货后对该批次产品进行检验,记录检验结果生成统计表. 涉及表:主表F37011,业务从表F43121/F4101/F4108 ------------------------- ...
- PO_PO系列 - 收货管理分析(案例)
2014-07-01 Created By BaoXinjian
- 收货MIGO
FUNCTION zrfc_mm003. *"---------------------------------------------------------------------- * ...
- java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串
java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...
随机推荐
- C# 死锁 Task/AutoResetEvent
与之前<C# 死锁 TaskCompletionSource>类似,还有很多死锁的案例 使用Task异步转同步时,使用不当造成的死锁 private void Task_OnClick(o ...
- 蓝桥杯:合并石子(区间DP+平行四边形优化)
http://lx.lanqiao.cn/problem.page?gpid=T414 题意:…… 思路:很普通的区间DP,但是因为n<=1000,所以O(n^3)只能拿90分.上网查了下了解了 ...
- HDU 6011:Lotus and Characters(贪心)
http://acm.hdu.edu.cn/showproblem.php?pid=6011 题意:共有n种字符,每种字符有一个val和一个cnt,代表这个字符的价值和数量.可以制造的总价值是:第一个 ...
- scrapy实战6爬取IT桔子国内所有融资公司:
爬取融资公司,融资公司简介,融资时间,轮次,融资额,投资方,股权占比以及融资公司完整融资历史 如图 源码地址:https://github.com/huwei86/spiderITjuzi
- 你必须知道的Docker镜像仓库的搭建
近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜像仓库的搭建进行介绍,我们可以根据需要选 ...
- Object.toString()打印“地址”的原理
Object.toString()打印"地址"的原理 @(java) 首先,打印的绝不是地址 public native int hashCode(); public boolea ...
- Java项目案例之---常用工具类练习
常用工具类练习 1. 请根据控制台输入的特定日期格式拆分日期,如:请输入一个日期(格式如:**月**日****年),经过处理得到:****年**月**日 import java.util.Scanne ...
- 从壹开始[ 做贡献 ]之三 || 北京.Net俱乐部活动——DNT精英论坛开幕
缘起 哈喽大家好!好久不见,可能有一部分小伙伴发现我好久没有写文章了,是不是懒惰了,并没有,这两周也是正式开始了<NetCore系列教程的视频录制>,不过还不多,预计会是每周一个视频,基本 ...
- [WPF自定义控件库]了解WPF的布局过程,并利用Measure为Expander添加动画
1. 前言 这篇文章介绍WPF UI元素的两步布局过程,并且通过Resizer控件介绍只使用Measure可以实现些什么内容. 我不建议初学者做太多动画的工作,但合适的动画可以引导用户视线,提升用户体 ...
- [笨方法学python]习题51自动化测试笔记
习题51 本节自动化测试部分看不大懂,自己每步都打印出来,帮助理解.(代码标红部分为自己加入调试为打印变量值所用) tests/tools.py from nose.tools import * im ...