Index: ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/MaterialEntryManagerTests.java =================================================================== diff -u -r18455 -r19127 --- ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/MaterialEntryManagerTests.java (.../MaterialEntryManagerTests.java) (revision 18455) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/MaterialEntryManagerTests.java (.../MaterialEntryManagerTests.java) (revision 19127) @@ -25,6 +25,7 @@ import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; import test.forgon.disinfectsystem.material.model.GoodsStockInfo; +import test.forgon.disinfectsystem.material.model.InventoryRecordInfo; import test.forgon.disinfectsystem.material.model.MaterialItemInfo; import com.forgon.directory.acegi.tools.AcegiHelper; @@ -33,6 +34,9 @@ import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.materialmanager.MaterialEntry; import com.forgon.disinfectsystem.entity.materialmanager.MaterialEntryItem; +import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryItem; +import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryRecord; +import com.forgon.disinfectsystem.inventoryrecord.service.InventoryRecordManager; import com.forgon.disinfectsystem.tousse.materialmanager.service.MaterialEntryItemManager; import com.forgon.disinfectsystem.tousse.materialmanager.service.MaterialEntryManager; import com.forgon.tools.MathTools; @@ -48,6 +52,8 @@ private MaterialEntryManager materialEntryManager; @Autowired private MaterialEntryItemManager materialEntryItemManager; + @Autowired + private InventoryRecordManager inventoryRecordManager; /** * 构建数据 @@ -86,6 +92,10 @@ */ private Set materialDefinitionIds = new HashSet(); /** + * 盘点数量(盘点数量小于初始化数量为盘亏) + */ + private Integer amount = 1000; + /** * 查找库存信息 * @param goodsStockInfos * @param itemInfo @@ -219,6 +229,162 @@ assertEquals(totalPrice, dbMaterialEntry.getTotalPrice()); } /** + * 盘点断言 + */ + public void takeStockAssertion(){ + List inventoryItems = inventoryRecordManager.getInventoryItems(recordId()); + assertNotNull(inventoryItems); + Integer storageDifference = null; + Double infoPrice = null ;//用来判断什么时候退出循环 + Integer storage = null; + Double price = null; + for(InventoryItem item : inventoryItems){ + storage = item.getStorage(); + price = item.getPrice(); + for(GoodsStockInfo goods : materialStockBefore){ + if(goods.getPrice().equals(infoPrice)){ + continue; + } + storageDifference = MathTools.sub(amount, goods.getAmount()).intValue();//盘点差值 + assertEquals(item.getAmount(),amount);//对比盘点的数量是否一致 + assertEquals(storage,goods.getAmount());//对比账面数量和入库数量 + assertEquals(item.getStorageDifference(),storageDifference);//对比盘点差值 + assertEquals(price,goods.getPrice());//物品价格是否一致 + assertEquals(item.getWareHouseId(),wareHouse.getId());//仓库Id是否一致 + assertEquals(item.getWareHouseName(),wareHouse.getName());//仓库名称是否一致 + infoPrice = goods.getPrice(); + break; + } + } + List currentStock = getMaterialStocks(); + MaterialEntry dbMaterialEntry = materialEntryManager.getFirst("subType","盘盈入库");//盘盈生成的盘盈入库信息 + Double totalPrice = 0.0; + GoodsStockInfo gsa = currentStock.get(currentStock.size()-2);//盘点后材料的库存信息 + for(MaterialItemInfo info : items){ + GoodsStockInfo gsb = findGoodsStockInfo(materialStockBefore,info);//盘点前材料的库存信息 + assertNotNull(gsb); + assertNotNull(gsa); + amount = MathTools.add(gsb.getAmount(), gsa.getAmount()).intValue();//盘点材料库存前后总数量 + for(InventoryItem info1 : inventoryItems){ + if(info1.getPrice().equals(infoPrice)){ + continue; + } + assertEquals(info1.getAmount(),amount);//对比盘点材料库存前后总数量和盘点数量是否一致 + infoPrice=info1.getPrice(); + totalPrice += MathTools.mul(info1.getPrice(), info1.getStorageDifference()).doubleValue(); + gsa = currentStock.get(currentStock.size()-1); + break; + } + + } + assertEquals(totalPrice, dbMaterialEntry.getTotalPrice());//对比盘点生成的盘盈入库单总价格是否和盘点信息总价格一致 + + } + /** + * 盘点测试(材料盘盈测试,盘亏后期补上) + * @throws Exception + */ + @Test + @Rollback(value=false) + public void testSaveInventoryRecord() throws Exception{ + prepare(); + //2.添加材料 + testSaveMterialDefinition(); + //3.准备材料 + initMaterialItem(); + //4.准备入库单 + buildMaterialEntry(true); + //5.保存入库单 + materialEntryManager.saveMaterialEntry((MaterialEntry)BeanUtilsBean2.getInstance().cloneBean(materialEntry), buildItemsJsonStr(),false); + //6.断言 + assertion(); + //7.记录盘点前库存数量 + materialStockBefore = getMaterialStocks(); + //8.添加盘点记录和详情 + inventoryRecordManager.addInventoryRecord(initInventoryJson()); + //9.修改物品库存生成盘盈盘亏单 + inventoryRecordManager.updateGoodsStock(recordId(),itemJson(),"material");//material材料disposableGoods一次性物品 + //10.断言 + takeStockAssertion(); + } + /** + * 需要盘点的材料 + */ + public void testSaveMterialDefinition() { + MaterialDefinition md = new MaterialDefinition(); + md.setName("Test手术刀"); + md.setType("金属"); + md.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md.setIsForeignMaterial("否"); + md.setDisable("否"); + md.setIsMonthCheck("是"); + materialDefinitionManager.save(md); + MaterialDefinition md1 = new MaterialDefinition(); + md1.setName("Test手术钳"); + md1.setType("金属"); + md1.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md1.setIsForeignMaterial("否"); + md1.setDisable("否"); + md1.setIsMonthCheck("是"); + materialDefinitionManager.save(md1); + } + /** + * 将InventoryRecordInfo信息转换为JsonObject + * @return + */ + public String initInventoryJson(){ + JSONObject json =new JSONObject(); + InventoryRecordInfo inventoryRecordInfo = new InventoryRecordInfo(); + inventoryRecordInfo.setWareHouseId(wareHouse.getId()); + inventoryRecordInfo.setType("material"); + List list = new ArrayList(); + list.add(inventoryRecordInfo); + if(CollectionUtils.isNotEmpty(list)){ + for(Object item : list){ + json = JSONObject.fromObject(item); + } + } + return json.toString(); + } + public String itemJson(){ + List inventoryItem = inventoryRecordManager.getInventoryItems(recordId()); + List list = new ArrayList(); + for(InventoryItem item : inventoryItem){ + InventoryRecordInfo inventoryRecordInfo = new InventoryRecordInfo(); + inventoryRecordInfo.setItemId(item.getId()); + inventoryRecordInfo.setAmount(amount);//数量低于物品的库存盘亏,大于盘盈 + inventoryRecordInfo.setPrice(item.getPrice()); + list.add(inventoryRecordInfo); + } + return JSONArray.fromObject(list).toString(); + } + /** + * 准备盘点入库材料 + */ + private void initMaterialItem(){ + items.clear(); + MaterialDefinition md = materialDefinitionManager.getMaterialDefinitionByName("Test手术刀", null); + assertNotNull(md); + materialDefinitionIds.add(md.getId()); + MaterialItemInfo info = new MaterialItemInfo(md.getId(),150,50.8); + items.add(info); + + MaterialDefinition md2 = materialDefinitionManager.getMaterialDefinitionByName("Test手术钳", null); + assertNotNull(md2); + materialDefinitionIds.add(md2.getId()); + + MaterialItemInfo info2 = new MaterialItemInfo(md2.getId(),100,60.8); + items.add(info2); + } + /** + *获取需要盘点的盘点记录单Id + *测试用例,每次只会在InventoryRecord里创建一条记录,所以这么查 + */ + public String recordId(){ + InventoryRecord inventoryRecord = inventoryRecordManager.getInventoryRecord() ; + return inventoryRecord.getId().toString(); + } + /** * 测试保存材料入库单。先入库,再出库 * @throws Exception */ Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java =================================================================== diff -u -r19113 -r19127 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 19113) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 19127) @@ -1039,4 +1039,10 @@ } return wb; } + + @Override + public InventoryRecord getInventoryRecord(){ + String Sql = " "; + return (InventoryRecord) objectDao.getBySql(InventoryRecord.class.getSimpleName(), Sql); + } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManager.java =================================================================== diff -u -r15651 -r19127 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManager.java (.../InventoryRecordManager.java) (revision 15651) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManager.java (.../InventoryRecordManager.java) (revision 19127) @@ -13,6 +13,10 @@ public void deleteStockTakeInfoById_TRANS_NEW(String id); public InventoryRecord getById(String id); + /** + * 获取当前租户下的盘点几记录信息 + */ + public InventoryRecord getInventoryRecord(); public List getInventoryItems(String inventoryRecordId); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/material/model/InventoryRecordInfo.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/material/model/InventoryRecordInfo.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/material/model/InventoryRecordInfo.java (revision 19127) @@ -0,0 +1,76 @@ +package test.forgon.disinfectsystem.material.model; + +public class InventoryRecordInfo { + /** + * 盘点记录详细Id + */ + private Long itemId ; + /** + * 盘点 的数量 + */ + private Integer amount; + /** + * 盘点物品的单价 + */ + private Double price; + /** + * 仓库id + */ + private Long wareHouseId ; + + /** + * 盘点材料类型 + */ + private String type ; + + public InventoryRecordInfo(Long wareHouseId, String type) { + super(); + this.wareHouseId = wareHouseId; + this.type = type; + } + + public InventoryRecordInfo() { + super(); + } + + public Long getWareHouseId() { + return wareHouseId; + } + + public void setWareHouseId(Long wareHouseId) { + this.wareHouseId = wareHouseId; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Long getItemId() { + return itemId; + } + + public void setItemId(Long itemId) { + this.itemId = itemId; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + +}