Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/recyclingrecord/AllTests.xml =================================================================== diff -u -r20493 -r23974 --- ssts-web/src/test/resources/test/forgon/disinfectsystem/recyclingrecord/AllTests.xml (.../AllTests.xml) (revision 20493) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/recyclingrecord/AllTests.xml (.../AllTests.xml) (revision 23974) @@ -19,6 +19,7 @@ + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r23694 -r23974 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 23694) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 23974) @@ -537,10 +537,26 @@ public boolean recyclingStatusAwaitRecycle(){ return StringTools.equals(RECYCLINGSTATUS_AWAITRECYCLE,recyclingStatus); } + /** + * 判断是否已回收状态 + * @return + */ @Transient + public boolean recyclingStatusRecycled(){ + return RECYCLINGSTATUS_RECYCLED.equals(recyclingStatus); + } + /** + * 判断是否已接收状态 + * @return + */ + public boolean recyclingStatusReceived(){ + return RECYCLINGSTATUS_AWAITRECEIVED.equals(recyclingStatus); + } + @Transient public boolean recyclingSTatusPartRecycle(){ return RECYCLINGSTATUS_PARTRECYCLE.equals(recyclingStatus); } + public String getDeliverStatus() { return deliverStatus; Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r23912 -r23974 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 23912) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 23974) @@ -1232,7 +1232,7 @@ // 一条回收记录只能有一个对应的回收申请单/器械包申请单 if (recyclingRecord.getId() == null && application != null && application.getRecyclingRecord(objectDao) != null - && !application.isForeignTousseAppliaction()) { + &&(!application.isForeignTousseAppliaction() || (application.isForeignTousseAppliaction() && (application.recyclingStatusReceived()||application.recyclingStatusRecycled())))) { //外来器械待回收状态,是可以再回收的,即使已经回收过了。因为有二次回收 throw new SystemException("当前申请单已回收,不能重复回收!"); }else if(recyclingRecord.statusComfirmed() && (application == null || !application.recyclingSTatusPartRecycle())){ Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/ForeignTousseRecyclingTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/ForeignTousseRecyclingTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/ForeignTousseRecyclingTests.java (revision 23974) @@ -0,0 +1,256 @@ +package test.forgon.disinfectsystem.recyclingrecord.service; + +import static org.testng.Assert.assertEquals; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.springframework.beans.factory.annotation.Autowired; +import org.testng.annotations.Test; + +import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.dataProvider.application.ForeignTousseAppDataProvider; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.MaterialDataProvider; + +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.packing.PackingTask; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; +import com.forgon.disinfectsystem.packing.service.PackingManager; +import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; +import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingContext; +import com.forgon.exception.SystemException; +import com.forgon.runwithtrans.model.RunWithTransNewTask; + +/** + * 外来器械包的测试用例 + * @author kzh + * + */ +public class ForeignTousseRecyclingTests extends AbstractCSSDTest { + private long appId; + private RecyclingContext rc; + /** + * 1、Test骨钩(包含材料:Test钢板*10、Test螺钉*10) + */ + private TousseDefinition td_Test骨钩; + private String foreignTousseCleanedEntirely; + @Autowired + private RecyclingRecordManager recyclingRecordManager; + @Autowired + private PackingManager packingManager; + /** + * 第一次正常回收 + */ + @Test + public void testRecycleForeignTousse(){ + prepare(); + buildRecyclingParam(); + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + recyclingRecordManager.save(rc); + } + }); + assertRecord(); + } + /** + * 在上一个测试用例的基础上,再次回收对应的申请单(没有传回收记录的id,参数跟第一次回收时一样) + */ + @Test(dependsOnMethods="testRecycleForeignTousse",expectedExceptions={SystemException.class},expectedExceptionsMessageRegExp="当前申请单已回收,不能重复回收!") + public void testRecycleForeignTousseTwice(){ + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + recyclingRecordManager.save(rc); + } + }); + } + /** + * 第二次回收以后,数据依然没有改变 + */ + @Test(dependsOnMethods="testRecycleForeignTousseTwice") + public void testDataNotChange(){ + assertRecord(); + } + /** + * 外来器械的二次回收,需要能够正常进行 + */ + @Test(dependsOnMethods="testDataNotChange") + public void testForeignTousseSecondRecycle(){ + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + //将装配任务装配完 + List tasks = packingManager.getByHql(String.format("sourceId in(select id from %s where recyclingApplication.id=%d)", + RecyclingRecord.class.getSimpleName(),appId)); + String basketGroup = String.join(";", Constants.Barcode.CLASSIFY_BASKET_1,Constants.Barcode.CLASSIFY_BASKET_2,Constants.Barcode.CLASSIFY_BASKET_3); + packingManager.packingTousse_TRANS_REQUIRED(packingParam(tasks.get(0).getId(),basketGroup), null); + + tasks = packingManager.getByHql(String.format("sourceId in(select id from %s where recyclingApplication.id=%d)", + RecyclingRecord.class.getSimpleName(),appId)); + assertEquals(tasks.size(), 0); + + ForeignTousseApplication app = foreignTousseApplicationManager.getForUpdate(appId); + app.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + foreignTousseApplicationManager.save(app); + } + }); + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + recyclingRecordManager.save(rc); + } + }); + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + List list = recyclingRecordManager.getByProperty("recyclingApplication.id", appId); + //回收记录有两条 + assertEquals(list.size(), 2); + //装配任务没有了 + List tasks = packingManager.getByHql(String.format("sourceId in(select id from %s where recyclingApplication.id=%d)", + RecyclingRecord.class.getSimpleName(),appId)); + assertEquals(tasks.size(), 0); + //申请单状态变成已回收 + ForeignTousseApplication app = foreignTousseApplicationManager.getForUpdate(appId); + assertEquals(app.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_RECYCLED); + } + }); + } + private String packingParam(Long packingTaskId,String basketBarcode){ + JSONObject packingParams = new JSONObject(); + packingParams.put("taskIds", packingTaskId); + packingParams.put("inspector", Constants.UserCode.Admin); + packingParams.put("inspectorCode", Constants.UserCode.Admin); + packingParams.put("operator", Constants.UserCode.Admin); + packingParams.put("operatorCode", Constants.UserCode.Admin); + packingParams.put("reviewer", Constants.UserCode.Admin); + packingParams.put("reviewerCode", Constants.UserCode.Admin); + packingParams.put("wrapper", Constants.UserCode.Admin); + packingParams.put("wrapperCode", Constants.UserCode.Admin); + packingParams.put("packageType", td_Test骨钩.getPackageType()); + packingParams.put("sterilingType", "无"); + packingParams.put("sterileDate", String.valueOf(System.currentTimeMillis())); + packingParams.put("packAmount", 1); + packingParams.put("taskGroup", ""); + packingParams.put("splitPackage", null); + packingParams.put("basketBarcode", basketBarcode); + packingParams.put("scannedBasketBarcodes", basketBarcode); + packingParams.put("idCardInstanceID", null); + packingParams.put("sterilizer", null); + packingParams.put("frequency", null); + packingParams.put("confirmContinue", "true"); + packingParams.put("urgentAmount", null); + packingParams.put("tousseWeight", ""); + return packingParams.toString(); + } + private void assertRecord() { + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + List list = recyclingRecordManager.getByProperty("recyclingApplication.id", appId); + assertEquals(list.size(), 1); + + List tasks = packingManager.getByHql(String.format("sourceId in(select id from %s where recyclingApplication.id=%d)", + RecyclingRecord.class.getSimpleName(),appId)); + assertEquals(tasks.size(), 1); + assertEquals(tasks.get(0).getUnPackAmount().intValue(), 1); + + ForeignTousseApplication app = foreignTousseApplicationManager.get(appId); + assertEquals(app.getApplicationItems().size(), 1); + assertEquals(app.getApplicationItems().get(0).getRecyclingAmount().intValue(), 1); + + SupplyRoomConfig sysConfig = supplyRoomConfigManager.getSystemParamsObj(); + sysConfig.setForeignTousseCleanedEntirely(foreignTousseCleanedEntirely); + supplyRoomConfigManager.save(sysConfig); + } + }); + } + + private void buildRecyclingParam() { + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + + @Override + public void runTask() { + MaterialDefinition mdTest钢板 = materialDefinitionManager.getForeignTousseMaterialDefinition(Constants.MaterialName.Test钢板, Constants.MaterialSpecification.Test钢板Spec); + String materialNameTest钢板 = CssdUtils.getMaterialName(mdTest钢板); + String basketGroup = String.join(";", Constants.Barcode.CLASSIFY_BASKET_1,Constants.Barcode.CLASSIFY_BASKET_2,Constants.Barcode.CLASSIFY_BASKET_3); + + JSONObject item1 = addRecyclingItem(Constants.Barcode.CLASSIFY_BASKET_1, "", materialNameTest钢板, + td_Test骨钩.getId(), 3, "材料", td_Test骨钩.getName(), 1, appId, basketGroup); + item1.put("basketSequence", 1); + + MaterialDefinition mdTest螺钉 = materialDefinitionManager.getForeignTousseMaterialDefinition(Constants.MaterialName.Test螺钉, Constants.MaterialSpecification.Test螺钉Spec); + String materialNameTest螺钉 = CssdUtils.getMaterialName(mdTest螺钉); + + JSONObject item2 = addRecyclingItem(Constants.Barcode.CLASSIFY_BASKET_2, "", materialNameTest钢板, + td_Test骨钩.getId(), 7, "材料", td_Test骨钩.getName(), 1, appId, basketGroup); + item2.put("basketSequence", 2); + + JSONObject item3 = addRecyclingItem(Constants.Barcode.CLASSIFY_BASKET_2, "", materialNameTest螺钉, + td_Test骨钩.getId(), 4, "材料", td_Test骨钩.getName(), 1, appId, basketGroup); + item3.put("basketSequence", 2); + + JSONObject item4 = addRecyclingItem(Constants.Barcode.CLASSIFY_BASKET_3, "", materialNameTest螺钉, + td_Test骨钩.getId(), 6, "材料", td_Test骨钩.getName(), 1, appId, basketGroup); + item4.put("basketSequence", 3); + + JSONArray jarrayItem = new JSONArray(); + jarrayItem.add(item1); + jarrayItem.add(item2); + jarrayItem.add(item3); + jarrayItem.add(item4); + + JSONObject params = new JSONObject(); + params.put("tousseJson", jarrayItem); + rc = new RecyclingContext(); + rc.setDepart(Constants.ORG_UNIT_NAME_OR); + rc.setDepartCode(Constants.ORG_UNIT_CODE_OR); + rc.setJsonParam(params.toString()); + rc.setRecyclingApplicationId(appId+""); + rc.parseParameters(); + } + }); + } + + private void prepare(){ + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + initCSSDData(); + + SupplyRoomConfig sysConfig = supplyRoomConfigManager.getSystemParamsObj(); + foreignTousseCleanedEntirely = sysConfig.getForeignTousseCleanedEntirely(); + sysConfig.setForeignTousseCleanedEntirely(com.forgon.Constants.STR_NO); + supplyRoomConfigManager.save(sysConfig); + + ForeignTousseApplication foreignTousseApplication = ForeignTousseAppDataProvider.createForeignTousseApplication(); + foreignTousseApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); + objectDao.saveOrUpdate(foreignTousseApplication); + + appId = foreignTousseApplication.getId(); + + MaterialDefinition mdTest钢板 = materialDefinitionManager.getForeignTousseMaterialDefinition(Constants.MaterialName.Test钢板, Constants.MaterialSpecification.Test钢板Spec); + MaterialDefinition mdTest螺钉 = materialDefinitionManager.getForeignTousseMaterialDefinition(Constants.MaterialName.Test螺钉, Constants.MaterialSpecification.Test螺钉Spec); + + JSONObject material1 = MaterialDataProvider.createForeignMaterial(CssdUtils.getMaterialName(mdTest钢板), 10); + JSONObject material2 = MaterialDataProvider.createForeignMaterial(CssdUtils.getMaterialName(mdTest螺钉), 10); + JSONArray materials = MaterialDataProvider.createMaterials(new JSONObject[]{material1, material2}); + + TousseDefinition tousseDefinition_Test骨钩 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test骨钩); + JSONArray foreignTousseTreeDatas = ForeignTousseAppDataProvider.createForeignTousseTreeDatas(ForeignTousseAppDataProvider.createForeignTousseItem(tousseDefinition_Test骨钩), materials); + //创建一张外来器械申请单 + foreignTousseApplicationManager.saveOrUpdate(foreignTousseApplication, foreignTousseTreeDatas.toString(), ForeignTousseApplication.ACTION_TYPE_ADD); + td_Test骨钩 = tousseDefinitionManager.getForeignTousseDefinitionByNameAPPIDAndSupplierName(Constants.TousseDefinitionName.Test骨钩, appId + "", "工商银行"); + } + }); + } +}