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 + "", "工商银行");
+ }
+ });
+ }
+}