求教各位Java大神,关于进销存出库商品是否含税问题
小弟java学艺不精,在此求助一逻辑问题,进销存出库,出库单中商品分含税与不含税,如含税商品不足可以出实际的库存,也可以不出该商品,若该单是出不含税商品,不含税商品不足则可以去调含税库中剩余的该商品。含税与不含税商品 价格不一样。,各位大神能帮到之处,小弟感激不尽。 java 进销存 出库 双库存 --------------------编程问答-------------------- 你这什么问题啊? --------------------编程问答-------------------- 出库时,考虑含税与不含税,含税商品不足可以出实际的库存,也可以不出该商品,若该单是出不含税商品,不含税商品不足则可以去调含税库中剩余的该商品。--------------------编程问答-------------------- 需求描述的再清楚些 --------------------编程问答-------------------- 代客下单,根据客户的需求,一张单子可能分成含税商品 与不含税商品,如果这张单子客户是要含税的商品, 进行添加商品明细的时,含税商品不足的时候,可以出实际的库存数 或者不出此单, 当这张单子是不含税的单子时,若发现不含税商品不足,则可以按照含税商品的价格去含税库调用对应的商品,此处,同个商品是分含税与不含税,也就是说有两个仓库。 --------------------编程问答--------------------
/**
* 商品类型
*
*/
public enum GoodsType {
含税,
不含税;
}
/**
* 商品接口
*
*/
public inte易做图ce IGoods {
public String getName();
public int getNumber();
public void setNumber(int i);
public float getPrice();
public GoodsType getType();
}
/**
* 仓库接口,不同的仓库可以有不同的实现
*/
public inte易做图ce 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;
}
}
补充:Java , Java相关