求教各位Java大神,关于进销存出库商品是否含税问题

陌城1019 2013-11-06 08:37:42
小弟java学艺不精,在此求助一逻辑问题,进销存出库,出库单中商品分含税与不含税,如含税商品不足可以出实际的库存,也可以不出该商品,若该单是出不含税商品,不含税商品不足则可以去调含税库中剩余的该商品。含税与不含税商品 价格不一样。,各位大神能帮到之处,小弟感激不尽。
...全文
1020 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
陌城1019 2013-11-07
  • 打赏
  • 举报
回复
代客下单,根据客户的需求,一张单子可能分成含税商品 与不含税商品,如果这张单子客户是要含税的商品, 进行添加商品明细的时,含税商品不足的时候,可以出实际的库存数 或者不出此单, 当这张单子是不含税的单子时,若发现不含税商品不足,则可以按照含税商品的价格去含税库调用对应的商品,此处,同个商品是分含税与不含税,也就是说有两个仓库。
朗晴 2013-11-07
  • 打赏
  • 举报
回复
需求描述的再清楚些
陌城1019 2013-11-07
  • 打赏
  • 举报
回复
出库时,考虑含税与不含税,含税商品不足可以出实际的库存,也可以不出该商品,若该单是出不含税商品,不含税商品不足则可以去调含税库中剩余的该商品。
etfired 2013-11-07
  • 打赏
  • 举报
回复

/**
 * 商品类型
 *
 */
public enum GoodsType {

	含税,
	不含税;
	
}

/**
 * 商品接口
 *
 */
public interface IGoods {
	

	public String getName();
	
	public int getNumber();
	
	public void setNumber(int i);
	
	public float getPrice();
	
	public GoodsType getType();
}

/**
 * 仓库接口,不同的仓库可以有不同的实现
 */
public interface IRespository {

	/**
	 * 出库商品
	 * @param goods 需要出库的商品
	 * @return 实际出库的商品
	 */
	public IGoods output(IGoods goods);
	
	/**
	 * 返回仓库存放的商品类型
	 * @return
	 */
	public GoodsType getType();
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 仓库服务
 *
 */
public class RespositoryService {

	//存储仓库,GoodsType表示含税仓库还是不含税仓库
	private Map<GoodsType,IRespository> dbs = new HashMap<GoodsType, IRespository>();
	
	//商品出库,因为可能来自不同的仓库,方法定义返回多个商品对象
	public List<IGoods> output(IGoods goods) {
		List<IGoods> goodsList = new ArrayList<IGoods>();
		//获取最原始的仓库,含税商品取出含税仓库,不含税商品取出不含税仓库
		IRespository respository = dbs.get(goods.getType());
		//商品出库
		IGoods out = this.outputFromRespository(goods, respository);
		//将实际出库的商品加入集合
		goodsList.add(out);
		//如果有剩余则从其他仓库出库
		if (out.getNumber() > 0) {
			//迭代其他仓库,完成出库
			for (IRespository res : this.getOtherRespository(goods.getType())) {
				goodsList.add(this.outputFromRespository(goods, res));
				if (goods.getNumber() < 1) {
					break;
				}
			}
		}
		//如果所有仓库出库完成,但是依然无法满足出库要求抛出异常
		if (goods.getNumber() > 0) {
			throw new RuntimeException("库存中商品无法完成出库");
		}
		return goodsList;
	}
	
	//商品出库,返回实际从仓库中出库的商品
	private IGoods outputFromRespository(IGoods goods, IRespository respository) {
		IGoods out = respository.output(goods);
		//减去完成出库的商品的数量,使其等于待出库的商品数量
		goods.setNumber(goods.getNumber() - out.getNumber());
		return out;
	}
	
	/**
	 * 获取不存放某个商品类型的所有仓库
	 * @param type 商品类型
	 * @return
	 */
	public List<IRespository> getOtherRespository(GoodsType type) {
		List<IRespository> respositories = new ArrayList<IRespository>();
		for (IRespository respository : dbs.values()) {
			if (respository.getType() != type) {
				respositories.add(respository);
			}
		}
		return respositories;
	}
	
}

teemai 2013-11-06
  • 打赏
  • 举报
回复
你这什么问题啊?

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧