Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerTests.java =================================================================== diff -u -r38352 -r38573 --- ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerTests.java (.../RecyclingRecordManagerTests.java) (revision 38352) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerTests.java (.../RecyclingRecordManagerTests.java) (revision 38573) @@ -1,11 +1,15 @@ package test.forgon.disinfectsystem.recyclingrecord.service; import static org.junit.Assert.*; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -16,11 +20,13 @@ import test.forgon.disinfectsystem.AbstractCSSDTest; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.packing.PackingTask; @@ -33,11 +39,14 @@ import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingBasketItemVo; +import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingSumInfoVo; import com.forgon.disinfectsystem.recyclingrecord.vo.SplitDepartTousseVo; import com.forgon.disinfectsystem.recyclingrecord.vo.UrgentTousseItem; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.tools.MathTools; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.util.ConfigUtils; +import com.forgon.tools.util.SqlUtils; /*** * * @author WangYi @@ -536,5 +545,159 @@ } } } - + /** + * 测试增删回收物品时,包实例的增减是否正常 + */ + @Test + public void testUpdateTousseInstance() { + //场景1 测试增加 回收3种包 共31个数量 生成31个包实例 + OrgUnit ou1 = new OrgUnit(); + ou1.setOrgUnitCoding("ks02"); + ou1.setName("科室02"); + objectDao.save(ou1); + //回收3种包 第一种10个 第二种20个 第三种是绑定标识牌的包 数量为1 + TousseDefinition td1 = new TousseDefinition(); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + td1.setName("测试01"); + objectDao.save(td1); + TousseDefinition td2 = new TousseDefinition(); + td2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + td2.setName("测试02"); + objectDao.save(td2); + TousseDefinition td3 = new TousseDefinition(); + td3.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + td3.setName("测试03"); + objectDao.save(td3); + + RecyclingRecord record = new RecyclingRecord(); + record.setDepart(ou1.getName()); + record.setDepartCode(ou1.getOrgUnitCoding()); + objectDao.save(record); + + RecyclingItem ri1 = new RecyclingItem(); + ri1.setTousseDefinitionId(td1.getId()); + ri1.setRecyclingRecord(record); + ri1.setAmount(10); + objectDao.save(ri1); + RecyclingItem ri2 = new RecyclingItem(); + ri2.setTousseDefinitionId(td2.getId()); + ri2.setRecyclingRecord(record); + ri2.setAmount(20); + objectDao.save(ri2); + RecyclingItem ri3 = new RecyclingItem(); + ri3.setTousseDefinitionId(td3.getId()); + ri3.setRecyclingRecord(record); + ri3.setAmount(1); + objectDao.save(ri3); + List ris = new ArrayList(); + ris.add(ri1); + ris.add(ri2); + ris.add(ri3); + record.setItems(ris); + objectDao.saveOrUpdate(record); + + RecyclingSumInfoVo recyclingSumInfoVo = new RecyclingSumInfoVo(); + + JSONArray addRecyclingItemArr = new JSONArray(); + JSONObject addRecyclingItem1 = new JSONObject(); + addRecyclingItem1.put("amount", ri1.getAmount()); + addRecyclingItem1.put("recyclingItemId", ri1.getId()); + + JSONObject addRecyclingItem2 = new JSONObject(); + addRecyclingItem2.put("amount", ri2.getAmount()); + addRecyclingItem2.put("recyclingItemId", ri2.getId()); + + JSONObject addRecyclingItem3 = new JSONObject(); + addRecyclingItem3.put("amount", ri3.getAmount()); + addRecyclingItem3.put("recyclingItemId", ri3.getId()); + + + addRecyclingItemArr.add(addRecyclingItem1); + addRecyclingItemArr.add(addRecyclingItem2); + addRecyclingItemArr.add(addRecyclingItem3); + + recyclingSumInfoVo.setAddRecyclingItemArr(addRecyclingItemArr); + + BarcodeDevice idi = new IDCardInstance(); + idi.setBarcode("0390000001"); + idi.setType(BarcodeDevice.BARCODE_TYPE_SIGNBOARD); + objectDao.save(idi); + Map idCardInstanceBarcodesMap = new HashMap(); + idCardInstanceBarcodesMap.put(ri3.getId(), idi.getBarcode()); + recyclingSumInfoVo.setIdCardInstanceBarcodesMap(idCardInstanceBarcodesMap); + + recyclingRecordManager.updateTousseInstance(recyclingSumInfoVo, record); + objectDao.flush(); + objectDao.clear(); + @SuppressWarnings("unchecked") + List tousseInstanceList = objectDao.findByHql("select po from " + + TousseInstance.class.getSimpleName() + + " po where operationTime is null and recyclingRecordId="+record.getId()); + assertNotNull(tousseInstanceList); + assertEquals(ri1.getAmount()+ri2.getAmount()+ri3.getAmount(), tousseInstanceList.size()); + int amountOfRi1 = 0; + int amountOfRi2 = 0; + int amountOfRi3 = 0; + for (TousseInstance ti : tousseInstanceList) { + if(MathTools.equals(ti.getSourceRecyclingItemId(), ri1.getId())){ + amountOfRi1++; + }else if(MathTools.equals(ti.getSourceRecyclingItemId(), ri2.getId())){ + amountOfRi2++; + }else if(MathTools.equals(ti.getSourceRecyclingItemId(), ri3.getId())){ + assertEquals(idi.getBarcode(), ti.getIdCardInstanceBarcode()); + amountOfRi3++; + } + } + assertEquals(ri1.getAmount().intValue(), amountOfRi1); + assertEquals(ri2.getAmount().intValue(), amountOfRi2); + assertEquals(ri3.getAmount().intValue(), amountOfRi3); + + + //场景2 测试增加 扣减 删除 第一种包增加5个 第二种扣减2个 第三种包删除 总包实例会多3个 + addRecyclingItemArr.clear(); + addRecyclingItem1 = new JSONObject(); + int addAmount = 5; + addRecyclingItem1.put("amount", addAmount); + addRecyclingItem1.put("recyclingItemId", ri1.getId()); + addRecyclingItemArr.add(addRecyclingItem1); + JSONArray reduceRecyclingItembArr = new JSONArray(); + JSONObject reduceRecyclingItem1 = new JSONObject(); + int reduceAmount = -2; + reduceRecyclingItem1.put("amount", reduceAmount); + reduceRecyclingItem1.put("recyclingItemId", ri2.getId()); + reduceRecyclingItembArr.add(reduceRecyclingItem1); + recyclingSumInfoVo.setAddRecyclingItemArr(addRecyclingItemArr); + recyclingSumInfoVo.setReduceRecyclingItembArr(reduceRecyclingItembArr); + Set delRecyclingItemIds = new HashSet(); + delRecyclingItemIds.add(ri3.getId()); + recyclingSumInfoVo.setDelRecyclingItemIds(delRecyclingItemIds); + tousseInstanceList.clear(); + + recyclingRecordManager.updateTousseInstance(recyclingSumInfoVo, record); + objectDao.flush(); + objectDao.clear(); + tousseInstanceList = objectDao.findByHql("select po from " + + TousseInstance.class.getSimpleName() + + " po where operationTime is null and recyclingRecordId="+record.getId()); + + assertNotNull(tousseInstanceList); + assertEquals(ri1.getAmount()+ri2.getAmount()+ ri3.getAmount()+addAmount+reduceAmount-1, tousseInstanceList.size()); + + amountOfRi1 = 0; + amountOfRi2 = 0; + amountOfRi3 = 0; + for (TousseInstance ti : tousseInstanceList) { + if(MathTools.equals(ti.getSourceRecyclingItemId(), ri1.getId())){ + amountOfRi1++; + }else if(MathTools.equals(ti.getSourceRecyclingItemId(), ri2.getId())){ + amountOfRi2++; + }else if(MathTools.equals(ti.getSourceRecyclingItemId(), ri3.getId())){ + assertEquals(idi.getBarcode(), ti.getIdCardInstanceBarcode()); + amountOfRi3++; + } + } + assertEquals(ri1.getAmount().intValue() + addAmount, amountOfRi1); + assertEquals(ri2.getAmount().intValue() + reduceAmount, amountOfRi2); + assertEquals(0, amountOfRi3); + } }