一、实现功能
大致描述为:选择商品入库 可以选择多种进货单商品,然后凑成一个进货单,提交
截图如下:
1.点击添加,选择进货商品:
2.选择一件商品:
3.如果点击保存,进货入库的商品选择对话框会关闭,然后选择的进货商品会出现在进货单商品列表里面:
4.同一个单号当然可以进货多种商品,下面再选择另外一种进货商品:
5.选择保存后,进货单商品列表里面就有一下两种进货商品:
6.点击保存:
function savePurchaseGoods(){
$("#purchaseNumber").val($("#dh").text());
alert(JSON.stringify($("#dg").datagrid("getData").rows));
//将获取到的数据都转成json串
$("#goodsJson").val(JSON.stringify($("#dg").datagrid("getData").rows));
$("#fm").form("submit",{
url:"/admin/purchaseList/save",
onSubmit:function(){
if($("#dg").datagrid("getRows").length==0){
$.messager.alert("系统提示","请添加进货商品!");
return false;
}
if(!$(this).form("validate")){
return false;
}
if(isNaN($("#supplierId").combobox("getValue"))){
$.messager.alert("系统提示","请选择供应商!");
return false;
}
return true;
},
success:function(result){
alert(result);
var result=eval('('+result+')');
if(result.success){
alert("保存成功!");
window.location.reload();//刷新当前页面
}else{
$.messager.alert("系统提示",result.errorInfo);
}
}
});
}
7.请求到Controller:
其中参数purchaseList为进货单,goodsJson是前台已经转为Json串的进货单商品(这里包括两种商品):
purchaseList :进货单
goodsJson:进货单商品
8.下面使用gson.fromJson将进货单商品Json字符串转为实体:
9.ServiceImpl:
/**
* 添加进货单 以及所有进货单商品 以及 修改商品成本价 库存数量 上次进价
* @param purchaseList
* @param purchaseListGoodsList
*/
@Override
public void save(PurchaseList purchaseList, List<PurchaseListGoods> purchaseListGoodsList) {
for(PurchaseListGoods purchaseListGoods:purchaseListGoodsList) {
purchaseListGoods.setType(goodsTypeRepository.findOne(purchaseListGoods.getTypeId()));//
purchaseListGoods.setPurchaseList(purchaseList); //设置进货单
purchaseListGoodsRepository.save(purchaseListGoods);
// 修改商品库存 成本均价 以及上次进价
Goods goods=goodsRepository.findOne(purchaseListGoods.getGoodsId());
//计算成本均价
float avgPurchasePrice=(goods.getPurchasingPrice()*goods.getInventoryQuantity()+purchaseListGoods.getPrice()*purchaseListGoods.getNum())/(goods.getInventoryQuantity()+purchaseListGoods.getNum());
goods.setPurchasingPrice(MathUtil.format2Bit(avgPurchasePrice));
goods.setInventoryQuantity(goods.getInventoryQuantity()+purchaseListGoods.getNum());//进货后 原商品的库存量 要更新
goods.setLastPurchasingPrice(purchaseListGoods.getPrice());
goods.setState(2);//设置该商品状态 -->已发生进货单据
goodsRepository.save(goods);
}
purchaseListRepository.save(purchaseList);//保存进货单
}
10.进货成功:
11.进货成功,生成进货单,下面查询进货单据:
下面是刚生成的那个进货单和它对应的进货单商品:
Controller:
/**
* 根据条件查询所有进货单信息
* @param purchaseList
* @return
* @throws Exception
*/
@RequestMapping("/list")
//@RequiresPermissions(value="进货单据查询")
public Map<String,Object> list(PurchaseList purchaseList) throws Exception{
Map<String,Object> resultMap=new HashMap<>();
List<PurchaseList> purchaseListList=purchaseListService.list(purchaseList, Direction.DESC, "purchaseDate");
resultMap.put("rows", purchaseListList);
return resultMap;
}
ServiceImpl:
/**
* 根据条件查询进货单信息
* @param purchaseList
* @param direction
* @param properties
* @return
*/
@Override
public List<PurchaseList> list(PurchaseList purchaseList, Direction direction, String... properties) {
return purchaseListRepository.findAll(new Specification<PurchaseList>() {
@Override
public Predicate toPredicate(Root<PurchaseList> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate predicate=cb.conjunction();
if(purchaseList!=null) {
if(StringUtil.isNotEmpty(purchaseList.getPurchaseNumber())) {
predicate.getExpressions().add(cb.like(root.get("purchaseNumber"), "%"+purchaseList.getPurchaseNumber()+"%"));
}
if(purchaseList.getSupplier()!=null && purchaseList.getSupplier().getId()!=null) {
predicate.getExpressions().add(cb.equal(root.get("supplier").get("id"), purchaseList.getSupplier().getId()));
}
if(purchaseList.getState()!=null) {
predicate.getExpressions().add(cb.equal(root.get("state"),purchaseList.getState()));
}
if(purchaseList.getbPurchaseDate()!=null) {
predicate.getExpressions().add(cb.greaterThanOrEqualTo(root.get("purchaseDate"), purchaseList.getbPurchaseDate()));
}
if(purchaseList.getePurchaseDate()!=null) {
predicate.getExpressions().add(cb.lessThanOrEqualTo(root.get("purchaseDate"), purchaseList.getePurchaseDate()));
}
}
return predicate;
}
}, new Sort(direction,properties));
}
12.部分源码地址
https://gitee.com/never_enough/jxc_system/tree/master/jxc_%E6%8C%81%E7%BB%AD