Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/action/MaterialDefinitionAction.java =================================================================== diff -u -r16673 -r17345 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/action/MaterialDefinitionAction.java (.../MaterialDefinitionAction.java) (revision 16673) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/action/MaterialDefinitionAction.java (.../MaterialDefinitionAction.java) (revision 17345) @@ -133,44 +133,25 @@ } /** - * 保存MaterialDefinition TODO 此处代码应该移到manager里面 + * 保存MaterialDefinition */ public String saveMaterialDefinition() { JSONObject obj = new JSONObject(); - if (!DatabaseUtil.isPoIdValid(materialDefinition.getId())) { - materialDefinition.setId(null); - } try { - Long id = materialDefinition.getId(); - String idStr = null; - if(id != null){ - idStr = id.toString(); - } - boolean result = materialDefinitionManager.verifyMaterialDefinition(idStr, - materialDefinition.getName(), materialDefinition.getSpecification(),materialDefinition.getIsForeignMaterial()); - if (!result) { - throw new RuntimeException("已存在相同名称的材料!"); - } - // 设置拼音码、五笔码 - materialDefinition.setSpelling(GB2Alpha - .string2Alpha(materialDefinition.getName())); - materialDefinition.setWbCode(GB2WB.getWBCode(materialDefinition - .getName())); - if (StringUtils.isBlank(materialDefinition.getSpecification())) { - materialDefinition.setSpecification(null); - } materialDefinitionManager.saveOrUpdate(materialDefinition); obj.put("success", true); obj.put("msg", "保存成功!"); } catch (Exception e) { - e.printStackTrace(); obj.put("success", false); obj.put("msg", e.getMessage()); } StrutsResponseUtils.output(obj); return null; } + /** + * 删除器械材料定义 + */ public void deleteMaterialDefinition() { String idStr = StrutsParamUtils.getPraramValue("ids", ""); String message = ""; @@ -202,15 +183,7 @@ } } - HttpServletResponse httpServletResponse = StrutsParamUtils - .getResponse(); - httpServletResponse.setCharacterEncoding("UTF-8"); - try { - httpServletResponse.getWriter().print( - "{success:true,msg:'" + message + "'}"); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output("{success:true,msg:'" + message + "'}"); } public void getHttpOptionResultSet() { Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/material/AllTests.xml =================================================================== diff -u -r17245 -r17345 --- ssts-web/src/test/resources/test/forgon/disinfectsystem/material/AllTests.xml (.../AllTests.xml) (revision 17245) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/material/AllTests.xml (.../AllTests.xml) (revision 17345) @@ -4,7 +4,7 @@ - + \ No newline at end of file Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManager.java =================================================================== diff -u -r17245 -r17345 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManager.java (.../MaterialDefinitionManager.java) (revision 17245) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManager.java (.../MaterialDefinitionManager.java) (revision 17345) @@ -17,26 +17,47 @@ */ public interface MaterialDefinitionManager { - public void saveOrUpdate(MaterialDefinition materialDefinition); + /** + * 保存或者更新器械材料定义.
+ * 注意:不允许存在同名称同规格的外来/非外来器械,否则会抛运行时异常,调用者自行处理异常 + * @param md 器械材料定义 + */ + public void saveOrUpdate(MaterialDefinition md); public void saveOrUpdateAll(List materialDefinitionList); + /** + * 根据id获取器械材料定义 + * @param id 材料id + * @return + */ public MaterialDefinition getMaterialDefinitionById(String id); public void deleteMaterialDefinitionById(String id); - public boolean verifyMaterialDefinition(String id, String name,String specification,String isForeignMaterial); - public List getMaterialDefinitionByType(String type); /** - * 根据名字和规格获取可再生材料,不包含外来器械.. - * @param name - * @param specification + * 根据名称获取器械材料定义. + * @param name 材料名称 * @return */ + public List getMaterialDefinitionByName(String name); + + /** + * 根据名字和规格获取器械材料(非外来器械器).. + * @param name 材料名称 + * @param specification 材料规格 + * @return + */ public MaterialDefinition getMaterialDefinitionByName(String name,String specification); + /** + * 根据名字和规格获取器械材料(外来器械器). + * @param name 材料名称 + * @param specification 材料规格 + * @return + */ public MaterialDefinition getForeignTousseMaterialDefinition(String name,String specification); public List getAllMaterialDefinition(); @@ -77,6 +98,11 @@ public void exportMaterial(OutputStream ops); + /** + * 根据“物资系统的物资编码”获取材料定义 + * @param inventorySerialNumber + * @return + */ public MaterialDefinition getMaterialDefinitionByInventorySerialNumber(String inventorySerialNumber); /** * 获取材料定义的注意事项数组。数组的每一项为注意事项的一条内容,由用户在文本框中换行输入 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r17149 -r17345 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 17149) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 17345) @@ -659,6 +659,12 @@ return tousseDefinition; } + /** + * 根据“带规格的名称”获取外来器械材料 + * @param materialName 带规格的名称 + * @param isImplant 是否植入物 + * @return + */ private MaterialDefinition getMaterialDefintion(String materialName,String isImplant) { JSONObject obj = CssdUtils.getGoodsNameAndSp(materialName); String name = obj.optString("materialName"); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManagerImpl.java =================================================================== diff -u -r17245 -r17345 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManagerImpl.java (.../MaterialDefinitionManagerImpl.java) (revision 17245) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManagerImpl.java (.../MaterialDefinitionManagerImpl.java) (revision 17345) @@ -46,6 +46,8 @@ import com.forgon.security.tools.Util; import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.GB2Alpha; +import com.forgon.tools.GB2WB; import com.forgon.tools.MathTools; import com.forgon.tools.Path; import com.forgon.tools.db.DatabaseUtil; @@ -89,9 +91,29 @@ this.objectDao = objectDao; } - public void saveOrUpdate(MaterialDefinition materialDefinition) { - synchronizationUpdate(materialDefinition); - objectDao.saveOrUpdate(materialDefinition); + public void saveOrUpdate(MaterialDefinition md) { + Long id = md.getId(); + boolean result = verifyMaterialDefinition(id, md.getName(), + md.getSpecification(), md.getIsForeignMaterial()); + if (!result) { + throw new RuntimeException("已存在相同名称的材料!"); + } + + //设置拼音码、五笔码(如果没有的才帮他生成,有的就不用了,比如一些基础数据导入的,已经有自定义的了,但是修改修材料定义的操作还是要的,有可能会改材料名称的) + if (StringTools.isBlank(md.getSpelling()) + || DatabaseUtil.isPoIdValid(id)) { + md.setSpelling(GB2Alpha.string2Alpha(md.getName())); + } + if (StringTools.isBlank(md.getWbCode()) + || DatabaseUtil.isPoIdValid(id)) { + md.setWbCode(GB2WB.getWBCode(md.getName())); + } + + if (StringUtils.isBlank(md.getSpecification())) { + md.setSpecification(null); + } + synchronizationUpdate(md); + objectDao.saveOrUpdate(md); } /** @@ -130,10 +152,18 @@ Long.valueOf(id)); } - public boolean verifyMaterialDefinition(String id, String name, + /** + * 判断器械材料是否允许被添加(即:不允许存在同名称同规格的外来/非外来器械). + * @param id 材料id + * @param name 材料名称 + * @param specification 材料规格 + * @param isForeignMaterial 是否外来器械 + * @return 返回true说明允许被添加,false则不允许 + */ + private boolean verifyMaterialDefinition(Long id, String name, String specification,String isForeignMaterial) { String sql = "where po.name = '" + name + "'"; - if (StringUtils.isNotEmpty(id)) { + if (DatabaseUtil.isPoIdValid(id)) { sql += " and po.id != " + id; } if (StringUtils.isNotBlank(specification)) { @@ -165,12 +195,6 @@ MaterialDefinition.class.getSimpleName(), "type", type); } - /** - * 根据名字和规格获取可再生材料,不包含外来器械 - * @param name - * @param specification - * @return - */ @Override public MaterialDefinition getMaterialDefinitionByName(String name, String specification) { @@ -921,4 +945,15 @@ MaterialDefinition.class.getSimpleName(), sql); } + @Override + public List getMaterialDefinitionByName(String name) { + List list = new ArrayList(); + if (StringUtils.isNotBlank(name)) { + String sql = String.format("where po.name='%s'", name); + list = (List) objectDao + .findBySql(MaterialDefinition.class.getSimpleName(),sql); + } + return list; + } + } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/MterialDefinitionManagerTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/MterialDefinitionManagerTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/MterialDefinitionManagerTest.java (revision 17345) @@ -0,0 +1,191 @@ +package test.forgon.disinfectsystem.material.service; + +import java.util.List; + +import org.hibernate.Session; +import org.testng.annotations.Test; + +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; + +import static org.testng.Assert.*; +import test.forgon.disinfectsystem.AbstractCSSDTest; +/** + * 本类主要测试修改材料定义增删改 + * @author Chenjiaru 2017-03-13 + * + */ +public class MterialDefinitionManagerTest extends AbstractCSSDTest { + + + + /** + * 此方法主要测试新增器械材料定义 + * 测试以下6种场景 + * 1、新增“非外来器械材料Test金剪刀[20CM]” 预期结果:成功添加 + * 2、新增“非外来器械材料Test金剪刀[20CM]” 预期结果:添加失败 + * 3、新增“非外来器械材料Test金剪刀[30CM]” 预期结果:添加成功 + * 4、新增“外来器械材料Test金剪刀[20CM]” 预期结果:添加成功 + * 5、新增“外来器械材料Test金剪刀[20CM]” 预期结果:添加失败 + * 6、新增“外来器械材料Test金剪刀[30CM]” 预期结果:添加成功 + */ + @Test + public void testSaveMterialDefinition() { + MaterialDefinition md1_Test金剪刀 = new MaterialDefinition(); + md1_Test金剪刀.setName("Test金剪刀"); + md1_Test金剪刀.setSpecification("20CM"); + md1_Test金剪刀.setType("金属"); + md1_Test金剪刀.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md1_Test金剪刀.setIsForeignMaterial(Constants.STR_NO); + materialDefinitionManager.saveOrUpdate(md1_Test金剪刀); + + List list = materialDefinitionManager.getMaterialDefinitionByName("Test金剪刀"); + assertEquals(list.size(), 1); + MaterialDefinition md1 = list.get(0); + assertEquals(md1.getName(), "Test金剪刀"); + assertEquals(md1.getSpecification(), "20CM"); + assertEquals(md1.getType(), "金属"); + assertEquals(md1.getGoodsType(), MaterialDefinition.TYPE_MATERIALGOODS); + assertEquals(md1.getIsForeignMaterial(), Constants.STR_NO); + + MaterialDefinition md2_Test金剪刀 = new MaterialDefinition(); + md2_Test金剪刀.setName("Test金剪刀"); + md2_Test金剪刀.setSpecification("20CM"); + md2_Test金剪刀.setType("金属"); + md2_Test金剪刀.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md2_Test金剪刀.setIsForeignMaterial(Constants.STR_NO); + try { + materialDefinitionManager.saveOrUpdate(md2_Test金剪刀); + } catch (Exception e) { + assertEquals(e.getMessage(), "已存在相同名称的材料!"); + } + list = materialDefinitionManager.getMaterialDefinitionByName("Test金剪刀"); + assertEquals(list.size(), 1); + + MaterialDefinition md3_Test金剪刀 = new MaterialDefinition(); + md3_Test金剪刀.setName("Test金剪刀"); + md3_Test金剪刀.setSpecification("30CM"); + md3_Test金剪刀.setType("金属"); + md3_Test金剪刀.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md3_Test金剪刀.setIsForeignMaterial(Constants.STR_NO); + materialDefinitionManager.saveOrUpdate(md3_Test金剪刀); + list = materialDefinitionManager.getMaterialDefinitionByName("Test金剪刀"); + assertEquals(list.size(), 2); + + MaterialDefinition md4_Test金剪刀 = new MaterialDefinition(); + md4_Test金剪刀.setName("Test金剪刀"); + md4_Test金剪刀.setSpecification("20CM"); + md4_Test金剪刀.setType("金属"); + md4_Test金剪刀.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md4_Test金剪刀.setIsForeignMaterial(Constants.STR_YES); + materialDefinitionManager.saveOrUpdate(md4_Test金剪刀); + list = materialDefinitionManager.getMaterialDefinitionByName("Test金剪刀"); + assertEquals(list.size(), 3); + + MaterialDefinition md5_Test金剪刀 = new MaterialDefinition(); + md5_Test金剪刀.setName("Test金剪刀"); + md5_Test金剪刀.setSpecification("20CM"); + md5_Test金剪刀.setType("金属"); + md5_Test金剪刀.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md5_Test金剪刀.setIsForeignMaterial(Constants.STR_YES); + try { + materialDefinitionManager.saveOrUpdate(md5_Test金剪刀); + } catch (Exception e) { + assertEquals(e.getMessage(), "已存在相同名称的材料!"); + } + assertEquals(list.size(), 3); + + MaterialDefinition md6_Test金剪刀 = new MaterialDefinition(); + md6_Test金剪刀.setName("Test金剪刀"); + md6_Test金剪刀.setSpecification("30CM"); + md6_Test金剪刀.setType("金属"); + md6_Test金剪刀.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + md6_Test金剪刀.setIsForeignMaterial(Constants.STR_YES); + materialDefinitionManager.saveOrUpdate(md6_Test金剪刀); + list = materialDefinitionManager.getMaterialDefinitionByName("Test金剪刀"); + assertEquals(list.size(), 4); + } + + + /** + 此方法主要测试修改器械材料定义的isImplant属性后,相关的器械包定义的includeImplant,是否正确同步修改 + 测试的内容主要分两大块(有六种场景): + 一、第一块(两个场景) + Test开胸包材料清单 + 名称 数量 是否植入物 + Test钳子 5 否 + Test镊子 2 否 + 1、把材料“Test钳子”的是否植入物属性(否-》否) 预期结果:Test开胸包的IncludeImplant=1 + 2、把材料“Test钳子”的是否植入物属性(否-》是) 预期结果:Test开胸包的IncludeImplant=0 + + 二、第二块(四个场景) + Test开胸包材料清单 + 名称 数量 是否植入物 + Test钳子 5 是 + Test镊子 2 否 + 1、把材料“Test钳子”的是否植入物属性(是-》否) 预期结果:Test开胸包的IncludeImplant=1 + 2、把材料“Test钳子”的是否植入物属性(是-》是) 预期结果:Test开胸包的IncludeImplant=0 + 3、把材料“Test镊子”的是否植入物属性(否-》否) 预期结果:Test开胸包的IncludeImplant=0 + 4、把材料“Test镊子”的是否植入物属性(否-》是) 预期结果:Test开胸包的IncludeImplant=0 + */ + @Test + public void testUpdateMterialIsImplantProperty() { + initCSSDData(); + Session session = objectDao.getHibernateSession(); + + /** + Test开胸包材料清单 + 名称 数量 是否植入物 + Test钳子 5 否 + Test镊子 2 否 + */ + MaterialDefinition md_钳子 = materialDefinitionManager.getMaterialDefinitionByName("Test钳子", null); + //1、把材料“Test钳子”的是否植入物属性(否-》否)预期结果:Test开胸包的IncludeImplant=1 + md_钳子.setIsImplant(Constants.STR_NO); + materialDefinitionManager.saveOrUpdate(md_钳子); + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + assertEquals(td_开胸包.getIncludeImplant(), new Integer(1)); + + //2、把材料“Test钳子”的是否植入物属性(否-》是)预期结果:Test开胸包的IncludeImplant=0 + md_钳子.setIsImplant(Constants.STR_YES); + materialDefinitionManager.saveOrUpdate(md_钳子); + session.refresh(td_开胸包); + assertEquals(td_开胸包.getIncludeImplant(), new Integer(0)); + + /** + Test开胸包材料清单 + 名称 数量 是否植入物 + Test钳子 5 是 + Test镊子 2 否 + */ + //1、把材料“Test钳子”的是否植入物属性(是-》否)预期结果:Test开胸包的IncludeImplant=1 + md_钳子.setIsImplant(Constants.STR_NO); + materialDefinitionManager.saveOrUpdate(md_钳子); + session.refresh(td_开胸包); + assertEquals(td_开胸包.getIncludeImplant(), new Integer(1)); + + //2、把材料“Test钳子”的是否植入物属性(是-》是)预期结果:Test开胸包的IncludeImplant=0 + md_钳子.setIsImplant(Constants.STR_YES); + td_开胸包.setIncludeImplant(TousseDefinition.INCLUDE_IMPLANT); + session.flush(); //上两句是还原测试的数据,(实现一个方法测试用例能测试多个复杂度相对较低的场景) + md_钳子.setIsImplant(Constants.STR_YES); + materialDefinitionManager.saveOrUpdate(md_钳子); + session.refresh(td_开胸包); + assertEquals(td_开胸包.getIncludeImplant(), new Integer(0)); + + //3、把材料“Test镊子”的是否植入物属性(否-》否)预期结果:Test开胸包的IncludeImplant=0 + MaterialDefinition md_镊子 = materialDefinitionManager.getMaterialDefinitionByName("Test镊子", null); + md_镊子.setIsImplant(Constants.STR_NO); + materialDefinitionManager.saveOrUpdate(md_镊子); + session.refresh(td_开胸包); + assertEquals(td_开胸包.getIncludeImplant(), new Integer(0)); + + //4、把材料“Test镊子”的是否植入物属性(否-》是)预期结果:Test开胸包的IncludeImplant=0 + md_镊子.setIsImplant(Constants.STR_YES); + materialDefinitionManager.saveOrUpdate(md_镊子); + session.refresh(td_开胸包); + assertEquals(td_开胸包.getIncludeImplant(), new Integer(0)); + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/materialDefinition/materialDefinitionForm.js =================================================================== diff -u -r16242 -r17345 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/materialDefinition/materialDefinitionForm.js (.../materialDefinitionForm.js) (revision 16242) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/materialDefinition/materialDefinitionForm.js (.../materialDefinitionForm.js) (revision 17345) @@ -495,7 +495,7 @@ buttons : [{ id : 'saveBtn', text : '保存', - handler : save + handler : validateAndSubmit }, { text : '取消', id : 'saveAndNewBtn', @@ -715,12 +715,25 @@ return re.test(s) } function validateAndSubmit(){ - var materialName = top.Ext.getCmp('name').getValue(); - var specification = top.Ext.getCmp('specification').getValue(); + this.disable(); + if (!formObj.form.isValid()) { + showResult('请正确填写表单各值'); + this.enable(); + return false; + } + var materialName = top.Ext.getCmp("name").getValue(); + var specification = top.Ext.getCmp("specification").getValue(); + + if(includeSpecialCharacter(materialName) || includeSpecialCharacter(specification)){ + showResult("物品名称和规格都不能包含特殊字符!"); + this.enable(); + return false; + } var intoBasketMaxAmount = top.Ext.getCmp('intoBasketMaxAmount').getValue(); if(intoBasketMaxAmount != ""){ if(!isPositiveNum(intoBasketMaxAmount)){ showResult("清洗筐装载数量上限必须是正整数!"); + this.enable(); return; } } @@ -746,7 +759,6 @@ top.Ext.getCmp('saveBtn').enable(); } }); - } /** @@ -759,24 +771,6 @@ } -function save() { - this.disable(); - if (!formObj.form.isValid()) { - showResult('请正确填写表单各值'); - this.enable(); - return false; - } - var materialName = top.Ext.getCmp("name").getValue(); - var specification = top.Ext.getCmp("specification").getValue(); - - if(includeSpecialCharacter(materialName) || includeSpecialCharacter(specification)){ - showResult("物品名称和规格都不能包含特殊字符!"); - this.enable(); - return false; - } - validateAndSubmit(); -} - function cancel() { materialDefinitionWin.close(); } Fisheye: Tag 17345 refers to a dead (removed) revision in file `ssts-web/src/test/java/test/forgon/disinfectsystem/material/service/UpdateMterialIsImplantPropertyTest.java'. Fisheye: No comparison available. Pass `N' to diff?