国际物流云商项目day7

一、购销合同模块业务分析

在这里插入图片描述
2购销合同的表结构
购销合同表 与 合同下的货物是 一对多关系
购销合同下的货物 与 购销合同下的附件 一对多关系
购销合同下的货物 与 生产厂商 多对多关系
购销合同下的附件 与 生产厂商 多对多关系

二、数据库设计的三大范式

1、数据库设计的三大范式
第一范式 1NF:做到每列不可拆分
第二范式 2NF:确保一表只做一件事情
第三范式 3NF:在满足2NF,消除表中的传递依赖
2、数据库设计的反三大范式
反三范式:在进行数据库设计时,首先确保你所设计的表结构都达到第三范式要求,
但是实际开发时,为类满足 一些用户的特殊需求,开发又会在符合第三范式的表中,
加入冗余字段,结果就导致又不符合第三范式要求,这种情况下,称为反三范式

三、分散计算思想

如果没有分散计算,在查询购销合同总金额时,就需要关联加载购销合同下的所有货物,并要加载所有货物下的所有附件,这样可能实现购销合同总金额查询消耗时间太久,而用户等不起,此时就可以在平时添加货物时,添加附件时,分别计算出货物总金额,附件总金额,再更新购销合同总,这样就相当将一次集中计算的工作分散到平时的多次计算过程中,所以查询购销合同总金额时速度就会很快。

缺点:就是代码编写量和维护工作量急剧上升
优点:提高了页面数据的检索速度

分散计算思想主要体现在:
1、 购销合同下的货物 :
1)新增销合同下货物是也会 影响 购销合同的总额
1计算货物总金额 = 单价 * 数量
2购销合同总金额 = 购销合同 + 货物总金额

		//分散计算 
		Double amount = 0.0;
		//如果货物单价和数量都不为空  进去计算 货物总金额
		if(UtilFuns.isNotEmpty(entity.getCnumber()) && UtilFuns.isNotEmpty(entity.getPrice())){
			amount = entity.getCnumber() * entity.getPrice();
		}
		// 货物的总金额   如果货物单价和数量有为空的 总金额初始值为0.0
		entity.setAmount(amount);
		
		// 从数据库获取购销合同对象  
		Contract contract = contractDao.findOne(entity.getContract().getId());
		contract.setTotalAmount(contract.getTotalAmount() + amount); //分散计算的新增
		contractDao.save(contract);

2)修改购销合同下货物数量和单价直接影响 货物总金额 也影响了 购销合同的总额
购销合同的总金额 = 购销合同的总金额 + 货物的新总金额 - 货物的旧总金额

 // 保存旧的总金额
 Double oldAmount = entity.getAmount(); 
	//创建一个变量 保存新货物总金额
		Double amount = 0.0;
		//如果货物单价和数量都不为空  进去计算 货物总金额
		if(UtilFuns.isNotEmpty(entity.getCnumber()) && 				UtilFuns.isNotEmpty(entity.getPrice())){
			amount = entity.getCnumber() * entity.getPrice();
		}
		// 货物的旧总金额与新总金额 判断不等  证明修改了单价或者数量 
		if(oldAmount != amount){
		//修改后的总金额设置到商品上
			entity.setAmount(amount);  
			//从数据库中货物购销合同对象
			Contract contract = contractDao.findOne(entity.getContract().getId());
			 //修改的差值
			contract.setTotalAmount(contract.getTotalAmount() + amount - oldAmount); 
			contractDao.save(contract);
		}

3)删除货物也会影响购销合同合同总金额

//		获取货物对象
		ContractProduct contractProduct = contractProductDao.findOne(id);
//		1、获取货物旧总金额
		Contract contract1 = contractProduct.getContract();
		contract1.setTotalAmount(contract1.getTotalAmount()-contractProduct.getAmount());
//		2、删除货物下面所有附件
		Set<ExtCproduct> extCproducts = contractProduct.getExtCproducts();
		for (ExtCproduct extCproduct : extCproducts) {
			contract1.setTotalAmount(contract1.getTotalAmount()-extCproduct.getAmount());
			extCproductDao.delete(extCproduct);
		}
		contractDao.save(contract1);
		contractProductDao.delete(id);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值