Index: build.gradle =================================================================== diff -u -r39423 -r39442 --- build.gradle (.../build.gradle) (revision 39423) +++ build.gradle (.../build.gradle) (revision 39442) @@ -785,6 +785,7 @@ compile (project(":forgon-core")) compile (project(":ssts-basedata")) compile (project(":ssts-tousse")) + compile (project(":ssts-datasync")) } } Index: ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/action/IDCardDefinitionAction.java =================================================================== diff -u -r35410 -r39442 --- ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/action/IDCardDefinitionAction.java (.../IDCardDefinitionAction.java) (revision 35410) +++ ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/action/IDCardDefinitionAction.java (.../IDCardDefinitionAction.java) (revision 39442) @@ -6,6 +6,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; @@ -15,13 +16,17 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; +import com.forgon.disinfectsystem.entity.idcarddefinition.MedicalConsumables; import com.forgon.disinfectsystem.idcarddefinition.service.IDCardDefinitionManager; +import com.forgon.disinfectsystem.inventorymanagement.model.MedicalConsumablesVo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.opensymphony.xwork2.ModelDriven; @@ -134,7 +139,13 @@ "tousseDefinitionId", ""); String idNumber = StrutsParamUtils.getPraramValue( "idNumber", ""); - JSONObject obj = idCardDefinitionManager.addIDCardDefinition_TRANS_REQUIRED(tousseDefinitionId,idNumber); + String medicalConsumablesBarcode = StrutsParamUtils.getPraramValue("medicalConsumablesBarcode", ""); + JSONObject obj = JSONUtil.buildJsonObject(true); + try { + obj = idCardDefinitionManager.addIDCardDefinition_TRANS_REQUIRED(tousseDefinitionId,idNumber,medicalConsumablesBarcode); + } catch (Exception e) { + obj = JSONUtil.buildJsonObject(false, e.getMessage()); + } StrutsResponseUtils.output(obj); } @@ -376,6 +387,48 @@ } + /** + * 查询标识牌定义的医用耗材SPD信息SZSDSRMYY-176 + */ + public void loadIDCardDefinitionMedicalConsumablesSPDInfo(){ + Long idCardDefinitionId = StrutsParamUtils.getPraramLongValue("idCardDefinitionId", null); + JSONObject result = JSONUtil.buildJsonObject(true); + try { + List medicalConsumablesList = idCardDefinitionManager.loadIDCardDefinitionMedicalConsumablesSPDInfo(idCardDefinitionId); + JSONArray data = new JSONArray(); + if(CollectionUtils.isNotEmpty(medicalConsumablesList)){ + data = JSONArray.fromObject(medicalConsumablesList); + } + result = JSONUtil.buildJsonObject(true, data); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 扫描标签号获取医用耗材SPD信息SZSDSRMYY-176 + */ + public void loadMedicalConsumablesSPDInfo(){ + String medicalConsumablesBarcode = StrutsParamUtils.getPraramValue("medicalConsumablesBarcode", ""); + JSONObject result = JSONUtil.buildJsonObject(true); + try { + //取值为当前时间 + String optNo = DateTools.getCurrentDayByFormat("yyyyMMddHHmmss"); + //01- ISC标签(标签管理类,前两位为*88*)(固定传“01”)SZSDSRMYY-175 + //02- 产品条码(跟台类,前两位为00、01、240、+H等) + String barcodeType = "01"; + List medicalConsumablesVOList = idCardDefinitionManager.loadMedicalConsumablesVos(optNo, barcodeType, medicalConsumablesBarcode); + JSONArray data = new JSONArray(); + if(CollectionUtils.isNotEmpty(medicalConsumablesVOList)){ + data = JSONArray.fromObject(medicalConsumablesVOList); + } + result = JSONUtil.buildJsonObject(true, data); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + StrutsResponseUtils.output(result); + } @Override public void prepare() throws Exception { Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java =================================================================== diff -u -r32874 -r39442 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 32874) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 39442) @@ -54,5 +54,10 @@ * 科室人员返回状态:OK */ public final static String RESULT_MARK = "OK"; + + /** + * 根据条码获取医用耗材信息 + */ + public final static String MethodName_GetMedicalConsumables = "getMedicalConsumables"; } Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/model/MedicalConsumablesVo.java =================================================================== diff -u --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/model/MedicalConsumablesVo.java (revision 0) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/model/MedicalConsumablesVo.java (revision 39442) @@ -0,0 +1,397 @@ +package com.forgon.disinfectsystem.inventorymanagement.model; + +import java.util.Date; + +/** + * 医用耗材信息 + * 深圳第三人民医院 医用耗材管理SPD项目(耗材信息接口)可扫描ISC/RFID/产品条码等取耗材信息 + * SZSDSRMYY-175 + */ +public class MedicalConsumablesVo { + + /** + * 当前标识牌条码 + */ + private String curIdCardInstanceBarcode; + + /** + * 当前标识牌实例ID + */ + private Long idCardInstanceID; + + /** + * 当前标识牌定义id + */ + private Long idCardDefinitionID; + + /** + * 器械包定义id + */ + private Long tousseDefinitionId; + + /** + * 操作单号 + * (唯一、非空) + */ + private String optNo; + + /** + * 输入单号 + * 扫描录入条码号 + */ + private String barcode; + + /** + * 收费码 + */ + private String chargeCode; + + /** + * 物品名称 + */ + private String goodsName; + + /** + * 规格型号 + */ + private String goodsTypeModel; + + /** + * 数量 + */ + private Long qty; + + /** + * 收费单价 + * NUMBER(30,6) + * 需与收费库进行校验 + */ + private Double price; + + /** + * 收费金额 + * NUMBER(30,6) + */ + private Double amt; + + /** + * 生产日期 + */ + private Date productDT; + + /** + * 有效期 + */ + private Date endDT; + + /** + * 灭菌日期 + */ + private Date serDT; + + /** + * 灭菌效期 + */ + private Date serEndDT; + + /** + * 批号 + */ + private String batchNo; + + /** + * 灭菌批号 + */ + private String serLoc; + + /** + * GTIN码 + * 主码 + */ + private String goodsCode; + + /** + * 批次码 + * 副码,暂为空 + */ + private String lotCode; + + /** + * 产品编号 + */ + private String productCode; + + /** + * 生产厂家 + */ + private String factoryName; + + /** + * 完整条码 + * 特征码 + */ + private String udi; + + /** + * 追溯码 + * SPD标签号 + */ + private String iscBarcode; + + /** + * 预留字段1 + */ + private String mark1; + + /** + * 预留字段2 + */ + private String mark2; + + /** + * 预留字段3 + */ + private String mark3; + + /** + * 预留字段4 + */ + private String mark4; + + /** + * 预留字段5 + */ + private String mark5; + + public String getOptNo() { + return optNo; + } + + public void setOptNo(String optNo) { + this.optNo = optNo; + } + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public String getChargeCode() { + return chargeCode; + } + + public void setChargeCode(String chargeCode) { + this.chargeCode = chargeCode; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getGoodsTypeModel() { + return goodsTypeModel; + } + + public void setGoodsTypeModel(String goodsTypeModel) { + this.goodsTypeModel = goodsTypeModel; + } + + public Long getQty() { + return qty; + } + + public void setQty(Long qty) { + this.qty = qty; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Double getAmt() { + return amt; + } + + public void setAmt(Double amt) { + this.amt = amt; + } + + public Date getProductDT() { + return productDT; + } + + public void setProductDT(Date productDT) { + this.productDT = productDT; + } + + public Date getEndDT() { + return endDT; + } + + public void setEndDT(Date endDT) { + this.endDT = endDT; + } + + public Date getSerDT() { + return serDT; + } + + public void setSerDT(Date serDT) { + this.serDT = serDT; + } + + public Date getSerEndDT() { + return serEndDT; + } + + public void setSerEndDT(Date serEndDT) { + this.serEndDT = serEndDT; + } + + public String getBatchNo() { + return batchNo; + } + + public void setBatchNo(String batchNo) { + this.batchNo = batchNo; + } + + public String getSerLoc() { + return serLoc; + } + + public void setSerLoc(String serLoc) { + this.serLoc = serLoc; + } + + public String getGoodsCode() { + return goodsCode; + } + + public void setGoodsCode(String goodsCode) { + this.goodsCode = goodsCode; + } + + public String getLotCode() { + return lotCode; + } + + public void setLotCode(String lotCode) { + this.lotCode = lotCode; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getFactoryName() { + return factoryName; + } + + public void setFactoryName(String factoryName) { + this.factoryName = factoryName; + } + + public String getUdi() { + return udi; + } + + public void setUdi(String udi) { + this.udi = udi; + } + + public String getIscBarcode() { + return iscBarcode; + } + + public void setIscBarcode(String iscBarcode) { + this.iscBarcode = iscBarcode; + } + + public String getMark1() { + return mark1; + } + + public void setMark1(String mark1) { + this.mark1 = mark1; + } + + public String getMark2() { + return mark2; + } + + public void setMark2(String mark2) { + this.mark2 = mark2; + } + + public String getMark3() { + return mark3; + } + + public void setMark3(String mark3) { + this.mark3 = mark3; + } + + public String getMark4() { + return mark4; + } + + public void setMark4(String mark4) { + this.mark4 = mark4; + } + + public String getMark5() { + return mark5; + } + + public void setMark5(String mark5) { + this.mark5 = mark5; + } + + public String getCurIdCardInstanceBarcode() { + return curIdCardInstanceBarcode; + } + + public void setCurIdCardInstanceBarcode(String curIdCardInstanceBarcode) { + this.curIdCardInstanceBarcode = curIdCardInstanceBarcode; + } + + public Long getIdCardInstanceID() { + return idCardInstanceID; + } + + public void setIdCardInstanceID(Long idCardInstanceID) { + this.idCardInstanceID = idCardInstanceID; + } + + public Long getIdCardDefinitionID() { + return idCardDefinitionID; + } + + public void setIdCardDefinitionID(Long idCardDefinitionID) { + this.idCardDefinitionID = idCardDefinitionID; + } + + public Long getTousseDefinitionId() { + return tousseDefinitionId; + } + + public void setTousseDefinitionId(Long tousseDefinitionId) { + this.tousseDefinitionId = tousseDefinitionId; + } +} Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/MedicalConsumablesDao.java =================================================================== diff -u --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/MedicalConsumablesDao.java (revision 0) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/MedicalConsumablesDao.java (revision 39442) @@ -0,0 +1,23 @@ +package com.forgon.disinfectsystem.inventorymanagement.dao; + +import java.util.List; + +import com.forgon.disinfectsystem.inventorymanagement.model.MedicalConsumablesVo; + +/** + * 医用耗材信息接口 + * 深圳第三人民医院 医用耗材管理SPD项目(耗材信息接口)可扫描ISC/RFID/产品条码等取耗材信息 + * SZSDSRMYY-175 + */ +public interface MedicalConsumablesDao { + + /** + * 根据条码获取医用耗材信息 + * @param optNo 操作记录号 + * @param barcodeType 输入条码类型 + * @param barcode 输入条码 + * @return + */ + public List getMedicalConsumablesVos(String optNo, String barcodeType, String barcode); + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java =================================================================== diff -u -r39360 -r39442 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 39360) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 39442) @@ -79,6 +79,7 @@ ,@Index(columnList = "tousseGroupID", name = "td_tgid_index") ,@Index(columnList = "parentID", name = "td_pid_index") ,@Index(columnList = "warningType", name = "td_wnt_index") +,@Index(columnList = "thirdPartyDefinitionId", name = "td_thrid_index") }) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class TousseDefinition implements IDAble{ @@ -838,6 +839,18 @@ * 权重值 */ private Double weightScore; + + /** + * 是否SPD物品 + * (不保存到数据库)SZSDSRMYY-176 + */ + private boolean isSPDGoods = false; + + /** + * 第三方器械包定义id + */ + private Long thirdPartyDefinitionId; + @Override @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -2807,5 +2820,22 @@ public void setWeightScore(Double weightScore) { this.weightScore = weightScore; } + + @Transient + public boolean getIsSPDGoods() { + return isSPDGoods; + } + + public void setIsPDGoods(boolean isSPDGoods) { + this.isSPDGoods = isSPDGoods; + } + + public Long getThirdPartyDefinitionId() { + return thirdPartyDefinitionId; + } + + public void setThirdPartyDefinitionId(Long thirdPartyDefinitionId) { + this.thirdPartyDefinitionId = thirdPartyDefinitionId; + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/idcarddefinition/MedicalConsumables.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/idcarddefinition/MedicalConsumables.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/idcarddefinition/MedicalConsumables.java (revision 39442) @@ -0,0 +1,389 @@ +package com.forgon.disinfectsystem.entity.idcarddefinition; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 医用耗材信息 + * 深圳第三人民医院 医用耗材管理SPD项目(耗材信息接口)可扫描ISC/RFID/产品条码等取耗材信息 + * SZSDSRMYY-176 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +@Table(name = "MedicalConsumables",indexes = {@Index(columnList = "idCardDefinitionID", name = "mc_icdid_index") +,@Index(columnList = "barcode", name = "mc_barcode_index")}) +public class MedicalConsumables { + + private Long id; + + /** + * 标识牌定义id + */ + private Long idCardDefinitionID; + + /** + * 操作单号 + * (唯一、非空) + */ + private String optNo; + + /** + * 输入单号 + * 扫描录入条码号 + */ + private String barcode; + + /** + * 收费码 + */ + private String chargeCode; + + /** + * 物品名称 + */ + private String goodsName; + + /** + * 规格型号 + */ + private String goodsTypeModel; + + /** + * 数量 + */ + private Long qty; + + /** + * 收费单价 + * NUMBER(30,6) + * 需与收费库进行校验 + */ + private Double price; + + /** + * 收费金额 + * NUMBER(30,6) + */ + private Double amt; + + /** + * 生产日期 + */ + private Date productDT; + + /** + * 有效期 + */ + private Date endDT; + + /** + * 灭菌日期 + */ + private Date serDT; + + /** + * 灭菌效期 + */ + private Date serEndDT; + + /** + * 批号 + */ + private String batchNo; + + /** + * 灭菌批号 + */ + private String serLoc; + + /** + * GTIN码 + * 主码 + */ + private String goodsCode; + + /** + * 批次码 + * 副码,暂为空 + */ + private String lotCode; + + /** + * 产品编号 + */ + private String productCode; + + /** + * 生产厂家 + */ + private String factoryName; + + /** + * 完整条码 + * 特征码 + */ + private String udi; + + /** + * 追溯码 + * SPD标签号 + */ + private String iscBarcode; + + /** + * 预留字段1 + */ + private String mark1; + + /** + * 预留字段2 + */ + private String mark2; + + /** + * 预留字段3 + */ + private String mark3; + + /** + * 预留字段4 + */ + private String mark4; + + /** + * 预留字段5 + */ + private String mark5; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getIdCardDefinitionID() { + return idCardDefinitionID; + } + + public void setIdCardDefinitionID(Long idCardDefinitionID) { + this.idCardDefinitionID = idCardDefinitionID; + } + + public String getOptNo() { + return optNo; + } + + public void setOptNo(String optNo) { + this.optNo = optNo; + } + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public String getChargeCode() { + return chargeCode; + } + + public void setChargeCode(String chargeCode) { + this.chargeCode = chargeCode; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getGoodsTypeModel() { + return goodsTypeModel; + } + + public void setGoodsTypeModel(String goodsTypeModel) { + this.goodsTypeModel = goodsTypeModel; + } + + public Long getQty() { + return qty; + } + + public void setQty(Long qty) { + this.qty = qty; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Double getAmt() { + return amt; + } + + public void setAmt(Double amt) { + this.amt = amt; + } + + public Date getProductDT() { + return productDT; + } + + public void setProductDT(Date productDT) { + this.productDT = productDT; + } + + public Date getEndDT() { + return endDT; + } + + public void setEndDT(Date endDT) { + this.endDT = endDT; + } + + public Date getSerDT() { + return serDT; + } + + public void setSerDT(Date serDT) { + this.serDT = serDT; + } + + public Date getSerEndDT() { + return serEndDT; + } + + public void setSerEndDT(Date serEndDT) { + this.serEndDT = serEndDT; + } + + public String getBatchNo() { + return batchNo; + } + + public void setBatchNo(String batchNo) { + this.batchNo = batchNo; + } + + public String getSerLoc() { + return serLoc; + } + + public void setSerLoc(String serLoc) { + this.serLoc = serLoc; + } + + public String getGoodsCode() { + return goodsCode; + } + + public void setGoodsCode(String goodsCode) { + this.goodsCode = goodsCode; + } + + public String getLotCode() { + return lotCode; + } + + public void setLotCode(String lotCode) { + this.lotCode = lotCode; + } + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + + public String getFactoryName() { + return factoryName; + } + + public void setFactoryName(String factoryName) { + this.factoryName = factoryName; + } + + public String getUdi() { + return udi; + } + + public void setUdi(String udi) { + this.udi = udi; + } + + public String getIscBarcode() { + return iscBarcode; + } + + public void setIscBarcode(String iscBarcode) { + this.iscBarcode = iscBarcode; + } + + public String getMark1() { + return mark1; + } + + public void setMark1(String mark1) { + this.mark1 = mark1; + } + + public String getMark2() { + return mark2; + } + + public void setMark2(String mark2) { + this.mark2 = mark2; + } + + public String getMark3() { + return mark3; + } + + public void setMark3(String mark3) { + this.mark3 = mark3; + } + + public String getMark4() { + return mark4; + } + + public void setMark4(String mark4) { + this.mark4 = mark4; + } + + public String getMark5() { + return mark5; + } + + public void setMark5(String mark5) { + this.mark5 = mark5; + } + +} Index: ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManager.java =================================================================== diff -u -r36551 -r39442 --- ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManager.java (.../IDCardDefinitionManager.java) (revision 36551) +++ ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManager.java (.../IDCardDefinitionManager.java) (revision 39442) @@ -7,6 +7,8 @@ import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; +import com.forgon.disinfectsystem.entity.idcarddefinition.MedicalConsumables; +import com.forgon.disinfectsystem.inventorymanagement.model.MedicalConsumablesVo; import com.forgon.tools.hibernate.BasePoManager; public interface IDCardDefinitionManager extends BasePoManager { @@ -34,7 +36,14 @@ public void delete_TRANS_MANDATORY(IDCardDefinition idCardDefinition); - public JSONObject addIDCardDefinition_TRANS_REQUIRED(String tousseDefinitionId,String idNumber); + /** + * 添加标识牌 + * @param tousseDefinitionId 器械包定义id + * @param idNumber 编号 + * @param medicalConsumablesBarcode 医用耗材条码 SZSDSRMYY-176 + * @return + */ + public JSONObject addIDCardDefinition_TRANS_REQUIRED(String tousseDefinitionId,String idNumber, String medicalConsumablesBarcode); public String addIDCardInstanceToThisDefinition_TRANS_REQUIRED( String tousseDefinitionID, String idCardDefinitionID); @@ -71,4 +80,20 @@ * @return status:包状态(可能未产生器械包实例) dateStr:状态对应的时间 回收时间目前取自回收记录,清洗时间取清洗记录的清洗开始时间 */ public JSONObject getRecyclingTimeOfUnPackingIDCardInstance(Long idCardInstanceID, String recyclingRecordId); + + /** + * 查询标识牌定义的医用耗材SPD信息 + * @param idCardDefinitionId 标识牌定义id + * @return + */ + public List loadIDCardDefinitionMedicalConsumablesSPDInfo(Long idCardDefinitionId); + + /** + * 扫描标签号获取医用耗材SPD信息SZSDSRMYY-176 + * @param optNo 操作记录号 + * @param barcodeType 输入条码类型 + * @param medicalConsumablesBarcode 输入条码 + * @return + */ + public List loadMedicalConsumablesVos(String optNo, String barcodeType, String medicalConsumablesBarcode); } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/MedicalConsumablesDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/MedicalConsumablesDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/MedicalConsumablesDaoImpl.java (revision 39442) @@ -0,0 +1,282 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; + +import com.forgon.disinfectsystem.inventorymanagement.dao.MedicalConsumablesDao; +import com.forgon.disinfectsystem.inventorymanagement.model.MedicalConsumablesVo; +import com.forgon.exception.SystemException; +import com.forgon.tools.date.DateTools; + +public class MedicalConsumablesDaoImpl implements MedicalConsumablesDao { + + Logger logger = Logger.getLogger(this.getClass()); + + /** + * 接口地址 + */ + private String webserviceAddress; + + public String getWebserviceAddress() { + if(StringUtils.isNotBlank(webserviceAddress)){ + webserviceAddress = webserviceAddress.replace("?wsdl", ""); + webserviceAddress = webserviceAddress.replace("?WSDL", ""); + } + return webserviceAddress; + } + + public void setWebserviceAddress(String webserviceAddress) { + this.webserviceAddress = webserviceAddress; + } + + @SuppressWarnings("unchecked") + @Override + public List getMedicalConsumablesVos(String optNo, String barcodeType, String barcode) { + if(StringUtils.isBlank(optNo)){ + throw new SystemException("操作记录号不能为空!"); + } + if(StringUtils.isBlank(barcodeType)){ + throw new SystemException("输入条码类型不能为空!"); + } + if(StringUtils.isBlank(barcode)){ + throw new SystemException("输入条码不能为空!"); + } + List medicalConsumablesVos = new ArrayList(); + try { + String inputXml = WebServiceClientHelper.buildInputString(DatasyncConstant.MethodName_GetMedicalConsumables, optNo, barcodeType, barcode); + logger.info("医用耗材信息接口请求信息:" + inputXml); + String result = WebServiceClientHelper.doPostSoap1_2(getWebserviceAddress(), inputXml, ""); + /*String result = "" + + "" + + "" + + "操作单号" + + "2025012401" + + "代码" + + "成功/失败" + + "收费码" + + "测试物品" + + "规格型号" + + "2" + + "0.123456" + + "0.246912" + + "单位" + + "2025-01-20" + + "2025-05-20" + + "2025-02-20" + + "2025-03-20" + + "批号" + + "灭菌批号" + + "GTIN码" + + "批次码" + + "产品编号" + + "生产厂家" + + "完整条码" + + "追溯码" + + "预留字段1" + + "预留字段2" + + "预留字段3" + + "预留字段4" + + "预留字段5" + + "" + + "" + + "";*/ + logger.info("医用耗材信息接口返回信息:" + result); + if(StringUtils.isBlank(result)){ + throw new RuntimeException("医用耗材信息接口返回信息为空!"); + } + int startIndex = result.indexOf(""); + if(startIndex == -1){ + throw new RuntimeException("医用耗材信息接口返回信息不包含标签!"); + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + throw new RuntimeException("医用耗材信息接口返回信息不包含标签!"); + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + xmlString = "" + xmlString + ""; + Document document = DocumentHelper.parseText(xmlString); + // 返回结果可能存在多条信息 + String itemXpath = "/RESPONSE/BARCODE_LIST/BARCODE"; + XPath xpath = document.createXPath(itemXpath); + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + for (int i = 1; i <= nodeList.size(); i++) { + String msgXpath = itemXpath + "[" + i + "]"; + //操作单号 + String optNoXpath = msgXpath + "/OPT_NO"; + //扫描录入条码号 + String barcodeXpath = msgXpath + "/BARCODE"; + //收费码 + String chargeCodeXpath = msgXpath + "/CHARGE_CODE"; + //物品名称 + String goodsNameXpath = msgXpath + "/GOODS_NAME"; + + //规格型号 + String goodsTypeModelXpath = msgXpath + "/GOODS_TYPE_MODEL"; + //数量 + String qtyXpath = msgXpath + "/QTY"; + //收费单价 + String priceXpath = msgXpath + "/PRICE"; + //收费金额 + String amtXpath = msgXpath + "/AMT"; + + //生产日期 + String productDTXpath = msgXpath + "/PRODUCT_DT"; + //有效期 + String endDTXpath = msgXpath + "/END_DT"; + //灭菌日期 + String serDTXpath = msgXpath + "/SER_DT"; + //灭菌效期 + String serEndDTXpath = msgXpath + "/SER_END_DT"; + + //批号 + String batchNoXpath = msgXpath + "/BATCH_NO"; + //灭菌批号 + String serLocXpath = msgXpath + "/SER_LOC"; + //GTIN码 + String goodsCodeXpath = msgXpath + "/GOODS_CODE"; + //批次码 + String lotCodeXpath = msgXpath + "/LOT_CODE"; + + //产品编号 + String productCodeXpath = msgXpath + "/PRODUCT_CODE"; + //生产厂家 + String factoryNameXpath = msgXpath + "/FACTORY_NAME"; + //完整条码 + String udiXpath = msgXpath + "/UDI"; + //追溯码 + String iscBarcodeXpath = msgXpath + "/ISC_BARCODE"; + + //预留字段 + String mark1Xpath = msgXpath + "/MARK1"; + String mark2Xpath = msgXpath + "/MARK2"; + String mark3Xpath = msgXpath + "/MARK3"; + String mark4Xpath = msgXpath + "/MARK4"; + + String mark5Xpath = msgXpath + "/MARK5"; + + String optNoRes = WebServiceClientHelper.processDataByXpath(document, optNoXpath); + String barcodeRes = WebServiceClientHelper.processDataByXpath(document, barcodeXpath); + String chargeCode = WebServiceClientHelper.processDataByXpath(document, chargeCodeXpath); + String goodsName = WebServiceClientHelper.processDataByXpath(document, goodsNameXpath); + + String goodsTypeModel = WebServiceClientHelper.processDataByXpath(document, goodsTypeModelXpath); + String qty = WebServiceClientHelper.processDataByXpath(document, qtyXpath); + String price = WebServiceClientHelper.processDataByXpath(document, priceXpath); + String amt = WebServiceClientHelper.processDataByXpath(document, amtXpath); + + String productDT = WebServiceClientHelper.processDataByXpath(document, productDTXpath); + String endDT = WebServiceClientHelper.processDataByXpath(document, endDTXpath); + String serDT = WebServiceClientHelper.processDataByXpath(document, serDTXpath); + String serEndDT = WebServiceClientHelper.processDataByXpath(document, serEndDTXpath); + + String batchNo = WebServiceClientHelper.processDataByXpath(document, batchNoXpath); + String serLoc = WebServiceClientHelper.processDataByXpath(document, serLocXpath); + String goodsCode = WebServiceClientHelper.processDataByXpath(document, goodsCodeXpath); + String lotCode = WebServiceClientHelper.processDataByXpath(document, lotCodeXpath); + + String productCode = WebServiceClientHelper.processDataByXpath(document, productCodeXpath); + String factoryName = WebServiceClientHelper.processDataByXpath(document, factoryNameXpath); + String udi = WebServiceClientHelper.processDataByXpath(document, udiXpath); + String iscBarcode = WebServiceClientHelper.processDataByXpath(document, iscBarcodeXpath); + + String mark1 = WebServiceClientHelper.processDataByXpath(document, mark1Xpath); + String mark2 = WebServiceClientHelper.processDataByXpath(document, mark2Xpath); + String mark3 = WebServiceClientHelper.processDataByXpath(document, mark3Xpath); + String mark4 = WebServiceClientHelper.processDataByXpath(document, mark4Xpath); + + String mark5 = WebServiceClientHelper.processDataByXpath(document, mark5Xpath); + + MedicalConsumablesVo medicalConsumablesVo = new MedicalConsumablesVo(); + if(StringUtils.isNotBlank(amt)){ + try { + medicalConsumablesVo.setAmt(Double.valueOf(amt)); + } catch (Exception e) { + e.printStackTrace(); + throw new SystemException("收费金额无效"); + } + } + medicalConsumablesVo.setBarcode(barcodeRes); + medicalConsumablesVo.setBatchNo(batchNo); + medicalConsumablesVo.setChargeCode(chargeCode); + if(StringUtils.isNotBlank(endDT)){ + Date endDt = DateTools.coverStrToDate(endDT, DateTools.COMMON_DATE_ONLY); + if(endDt == null){ + throw new SystemException("有效期格式异常"); + } + medicalConsumablesVo.setEndDT(endDt); + } + medicalConsumablesVo.setFactoryName(factoryName); + medicalConsumablesVo.setGoodsCode(goodsCode); + medicalConsumablesVo.setGoodsName(goodsName); + medicalConsumablesVo.setGoodsTypeModel(goodsTypeModel); + medicalConsumablesVo.setIscBarcode(iscBarcode); + medicalConsumablesVo.setLotCode(lotCode); + medicalConsumablesVo.setMark1(mark1); + medicalConsumablesVo.setMark2(mark2); + medicalConsumablesVo.setMark3(mark3); + medicalConsumablesVo.setMark4(mark4); + medicalConsumablesVo.setMark5(mark5); + medicalConsumablesVo.setOptNo(optNoRes); + if(StringUtils.isNotBlank(price)){ + Double priceDouble = Double.valueOf(price); + if(priceDouble == null){ + throw new SystemException("收费单价无效"); + } + medicalConsumablesVo.setPrice(priceDouble); + } + medicalConsumablesVo.setProductCode(productCode); + if(StringUtils.isNotBlank(productDT)){ + Date productDTDate = DateTools.coverStrToDate(productDT, DateTools.COMMON_DATE_ONLY); + if(productDTDate == null){ + throw new SystemException("生产日期格式异常"); + } + medicalConsumablesVo.setProductDT(productDTDate); + } + if(StringUtils.isNotBlank(qty)){ + try { + medicalConsumablesVo.setQty(Long.valueOf(qty)); + } catch (Exception e) { + e.printStackTrace(); + throw new SystemException("数量无效"); + } + } + if(StringUtils.isNotBlank(serDT)){ + Date serDTDate = DateTools.coverStrToDate(serDT, DateTools.COMMON_DATE_ONLY); + if(serDTDate == null){ + throw new SystemException("灭菌日期格式异常"); + } + medicalConsumablesVo.setSerDT(serDTDate); + } + if(StringUtils.isNotBlank(serEndDT)){ + Date serEndDTDate = DateTools.coverStrToDate(serEndDT, DateTools.COMMON_DATE_ONLY); + if(serEndDTDate == null){ + throw new SystemException("灭菌效期格式异常"); + } + medicalConsumablesVo.setSerEndDT(serEndDTDate); + } + medicalConsumablesVo.setSerLoc(serLoc); + medicalConsumablesVo.setUdi(udi); + + medicalConsumablesVos.add(medicalConsumablesVo); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("医用耗材信息接口调用异常:" + e.getMessage()); + throw new SystemException("医用耗材信息接口调用异常:" + e.getMessage()); + } + + return medicalConsumablesVos; + } + +} Index: ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManagerImpl.java =================================================================== diff -u -r36552 -r39442 --- ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManagerImpl.java (.../IDCardDefinitionManagerImpl.java) (revision 36552) +++ ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManagerImpl.java (.../IDCardDefinitionManagerImpl.java) (revision 39442) @@ -10,6 +10,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import net.sf.json.JSONArray; @@ -19,9 +20,11 @@ import net.sf.json.util.CycleDetectionStrategy; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.Query; import org.hibernate.Session; +import org.springframework.beans.BeanUtils; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; @@ -46,6 +49,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; +import com.forgon.disinfectsystem.entity.idcarddefinition.MedicalConsumables; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; @@ -54,17 +58,22 @@ import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; +import com.forgon.disinfectsystem.inventorymanagement.dao.MedicalConsumablesDao; +import com.forgon.disinfectsystem.inventorymanagement.model.MedicalConsumablesVo; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.tousseDefinitionBelongOrgUnit.service.TousseDefinitionBelongDepartManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.traceablematerial.util.TraceableMaterialUtils; +import com.forgon.exception.SystemException; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.MathTools; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; import com.google.gson.Gson; @@ -96,6 +105,12 @@ private DataModifyRecordManager dataModifyRecordManager; + private MedicalConsumablesDao medicalConsumablesDao; + + public void setMedicalConsumablesDao(MedicalConsumablesDao medicalConsumablesDao) { + this.medicalConsumablesDao = medicalConsumablesDao; + } + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { this.dataModifyRecordManager = dataModifyRecordManager; } @@ -263,6 +278,9 @@ // 不包含已废弃的标识牌定义 List idCardDefinitions = getIDCardDefinitionsOfTousseDefinition( tousseDefinitionId, includeDiscardDefinitions); + + //标识牌定义id对应的医用耗材信息SPD信息 + Map medicalConsumablesIdMap = getMedicalConsumablesIdMap(idCardDefinitions); if (idCardDefinitions != null && idCardDefinitions.size() > 0) { // Set idCardDefinitionIds @@ -313,6 +331,8 @@ JSONArray materialsArr = new JSONArray(); obj.put("traceableMaterials", materialsArr.toArray()); + + obj.put("medicalConsumablesId", medicalConsumablesIdMap.get(idCardDefinition.getId())); JSONArray arr = new JSONArray(); // if (idCardInstances.size() > 0) { @@ -344,6 +364,48 @@ } return array.toString(); } + + /** + * 查询标识牌定义关联的医用耗材信息id + * @param idCardDefinitions + * @return + */ + private Map getMedicalConsumablesIdMap(List idCardDefinitions) { + Map medicalConsumablesIdMap = new HashMap(); + boolean enableRecyclingAutomaticallyCreatesIDCard = ConfigUtils.getSystemSetConfigByNameBool("enableRecyclingAutomaticallyCreatesIDCard"); + if(!enableRecyclingAutomaticallyCreatesIDCard){ + return medicalConsumablesIdMap; + } + if(CollectionUtils.isEmpty(idCardDefinitions)){ + return medicalConsumablesIdMap; + } + List idCardDefinitionIdList = new ArrayList(); + for (IDCardDefinition idCardDefinition : idCardDefinitions) { + idCardDefinitionIdList.add(idCardDefinition.getId()); + } + StringBuffer sql = new StringBuffer(); + sql.append("select po.idCardDefinitionID, po.id from "); + sql.append(MedicalConsumables.class.getSimpleName()); + sql.append(" po where "); + sql.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("idCardDefinitionID", idCardDefinitionIdList)); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + Long idCardDefinitionID = rs.getLong("idCardDefinitionID"); + Long id = rs.getLong("id"); + medicalConsumablesIdMap.put(idCardDefinitionID, id); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return medicalConsumablesIdMap; + } + @Override public JSONArray getIDCardInstanceByIDCardDefinitionId(String id){ JSONArray array = new JSONArray(); @@ -465,7 +527,7 @@ } @Override - public JSONObject addIDCardDefinition_TRANS_REQUIRED(String tousseDefinitionId,String idNumber){ + public JSONObject addIDCardDefinition_TRANS_REQUIRED(String tousseDefinitionId,String idNumber, String medicalConsumablesBarcode){ JSONObject obj = new JSONObject(); IDCardDefinition idCardDefinition = new IDCardDefinition(); idCardDefinition.setTousseDefinitionID(Long.valueOf(tousseDefinitionId)); @@ -478,10 +540,52 @@ TousseDefinition tousseDefinition = tousseDefinitionManager.get(tousseDefinitionId); IDCardInstance idCardInstance = idCardInstanceManager.newIdCardInstance(idCardDefinition, tousseDefinition, IDCardInstance.STATUS_USING,false, true); + //启用回收时自动创建标识牌功能,保存医用材料SPD信息 SZSDSRMYY-176 + saveMedicalConsumables(medicalConsumablesBarcode, idCardDefinition); obj.put("idCardDefinition", idCardDefinition); obj.put("idCardInstance", idCardInstance); return obj; } + + /** + * 保存“SPD信息”(医用耗材信息)SZSDSRMYY-176 + * @param medicalConsumablesBarcode + * @param idCardDefinition + */ + private void saveMedicalConsumables(String medicalConsumablesBarcode, IDCardDefinition idCardDefinition) { + boolean enableRecyclingAutomaticallyCreatesIDCard = ConfigUtils.getSystemSetConfigByNameBool("enableRecyclingAutomaticallyCreatesIDCard"); + if(!enableRecyclingAutomaticallyCreatesIDCard){ + return; + } + if(StringUtils.isBlank(medicalConsumablesBarcode)){ + return; + } + if(medicalConsumablesDao == null){ + throw new SystemException("medicalConsumablesDao为空"); + } + String optNo = DateTools.getCurrentDayByFormat("yyyyMMddHHmmss"); + //01- ISC标签(标签管理类,前两位为*88*)(固定传“01”)SZSDSRMYY-175 + //02- 产品条码(跟台类,前两位为00、01、240、+H等) + String barcodeType = "01"; + List medicalConsumablesVos = medicalConsumablesDao.getMedicalConsumablesVos(optNo, barcodeType, medicalConsumablesBarcode); + if(CollectionUtils.isEmpty(medicalConsumablesVos)){ + throw new SystemException("标签号无效"); + } + if(medicalConsumablesVos.size() > 1){ + throw new SystemException("标签号关联多个物品"); + } + //检查当前标签号是否关联标识牌 + setMedicalConsumablesVoIDCardDefinitionInfo(medicalConsumablesVos); + if(StringUtils.isNotBlank(medicalConsumablesVos.get(0).getCurIdCardInstanceBarcode())){ + throw new SystemException("标签号已经关联标识牌:" + medicalConsumablesVos.get(0).getCurIdCardInstanceBarcode()); + } + //保存医用耗材信息 + MedicalConsumables medicalConsumables = new MedicalConsumables(); + BeanUtils.copyProperties(medicalConsumablesVos.get(0), medicalConsumables); + medicalConsumables.setIdCardDefinitionID(idCardDefinition.getId()); + objectDao.saveOrUpdate(medicalConsumables); + } + @Override public String addIDCardInstanceToThisDefinition_TRANS_REQUIRED( String tousseDefinitionID, String idCardDefinitionID) { @@ -1295,4 +1399,148 @@ } return obj; } + + @SuppressWarnings("unchecked") + @Override + public List loadIDCardDefinitionMedicalConsumablesSPDInfo(Long idCardDefinitionId) { + if(!DatabaseUtil.isPoIdValid(idCardDefinitionId)){ + throw new SystemException("标识牌定义id无效"); + } + return objectDao.findByProperty(MedicalConsumables.class.getSimpleName(), "idCardDefinitionID", idCardDefinitionId); + } + + @Override + public List loadMedicalConsumablesVos(String optNo, String barcodeType, String medicalConsumablesBarcode) { + if(StringUtils.isBlank(medicalConsumablesBarcode)){ + throw new SystemException("条码无效"); + } + if(StringUtils.isBlank(optNo)){ + throw new SystemException("操作记录号无效"); + } + if(StringUtils.isBlank(barcodeType)){ + throw new SystemException("条码类型无效"); + } + List vos = medicalConsumablesDao.getMedicalConsumablesVos(optNo, barcodeType, medicalConsumablesBarcode); + //查询医用耗材关联的标识牌定义信息 + setMedicalConsumablesVoIDCardDefinitionInfo(vos); + //查询医用耗材同名的器械包定义信息 + setMedicalConsumablesVoTousseDefinitionInfo(vos); + return vos; + } + + /** + * 查询医用耗材同名的器械包定义信息 + * @param vos + */ + private void setMedicalConsumablesVoTousseDefinitionInfo(List vos) { + if(CollectionUtils.isEmpty(vos)){ + return; + } + List tousseNameList = new ArrayList(); + for (MedicalConsumablesVo vo : vos) { + if(DatabaseUtil.isPoIdValid(vo.getTousseDefinitionId())){ + continue; + } + String goodsName = vo.getGoodsName(); + if(StringUtils.isNotBlank(goodsName) && !tousseNameList.contains(goodsName)){ + tousseNameList.add(goodsName); + } + } + if(CollectionUtils.isEmpty(tousseNameList)){ + return; + } + StringBuffer hql = new StringBuffer(); + hql.append("select po from "); + hql.append(TousseDefinition.class.getSimpleName()); + hql.append(" po where "); + hql.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.name", tousseNameList)); + hql.append(" and po.forDisplay = 1 "); + @SuppressWarnings("unchecked") + List tousseDefinitionList = objectDao.findByHql(hql.toString()); + if(CollectionUtils.isEmpty(tousseDefinitionList)){ + return; + } + for (MedicalConsumablesVo vo : vos) { + String goodsName = vo.getGoodsName(); + for (TousseDefinition tousseDefinition : tousseDefinitionList) { + if(StringUtils.equals(tousseDefinition.getName(), goodsName)){ + if(tousseDefinition.isInsideTousse() + || tousseDefinition.isDressing() + || tousseDefinition.isDisinfection() + || tousseDefinition.isForeignProxyTousse()){ + vo.setTousseDefinitionId(tousseDefinition.getId()); + }else{ + throw new SystemException("已经存在同名的" + tousseDefinition.getTousseType()); + } + break; + } + } + } + } + + /** + * 查询医用耗材关联的标识牌定义信息 + * @param vos + */ + @SuppressWarnings("unchecked") + private void setMedicalConsumablesVoIDCardDefinitionInfo(List vos) { + if(CollectionUtils.isEmpty(vos)){ + return; + } + List barcodeList = new ArrayList(); + for (MedicalConsumablesVo vo : vos) { + String barcode = vo.getBarcode(); + if(StringUtils.isNotBlank(barcode) && !barcodeList.contains(barcode)){ + barcodeList.add(barcode); + } + } + if(CollectionUtils.isEmpty(barcodeList)){ + return; + } + List medicalConsumablesList = objectDao.getCollection(MedicalConsumables.class.getSimpleName(), "barcode", barcodeList); + if(CollectionUtils.isEmpty(medicalConsumablesList)){ + return; + } + Map barcodeIDCardDefinitionIdMap = new HashMap(); + for (MedicalConsumables medicalConsumables : medicalConsumablesList) { + Long idCardDefinitionID = medicalConsumables.getIdCardDefinitionID(); + if(DatabaseUtil.isPoIdValid(idCardDefinitionID)){ + barcodeIDCardDefinitionIdMap.put(medicalConsumables.getBarcode(), idCardDefinitionID); + } + } + + if(MapUtils.isEmpty(barcodeIDCardDefinitionIdMap)){ + return; + } + + Map barcodeIDCardDefinitionMap = new HashMap(); + List IDCardDefinitionList = this.getCollection(barcodeIDCardDefinitionIdMap.values()); + if(CollectionUtils.isEmpty(IDCardDefinitionList)){ + return; + } + + for (Entry entry : barcodeIDCardDefinitionIdMap.entrySet()) { + String barcode = entry.getKey(); + Long IDCardDefinitionId = entry.getValue(); + for (IDCardDefinition idCardDefinition : IDCardDefinitionList) { + if(idCardDefinition.getId().equals(IDCardDefinitionId)){ + barcodeIDCardDefinitionMap.put(barcode, idCardDefinition); + break; + } + } + } + + for (MedicalConsumablesVo vo : vos) { + String barcode = vo.getBarcode(); + IDCardDefinition idCardDefinition = barcodeIDCardDefinitionMap.get(barcode); + if(idCardDefinition != null){ + IDCardInstance IDCardInstance = idCardInstanceManager.getIDCardInstanceByBarcode(idCardDefinition.getCurIdCardInstanceBarcode()); + if(IDCardInstance != null){ + vo.setIdCardInstanceID(IDCardInstance.getId()); + } + vo.setCurIdCardInstanceBarcode(idCardDefinition.getCurIdCardInstanceBarcode()); + vo.setTousseDefinitionId(idCardDefinition.getTousseDefinitionID()); + } + } + } } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java =================================================================== diff -u -r29594 -r39442 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 29594) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 39442) @@ -14,6 +14,9 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.Node; +import org.dom4j.XPath; import com.forgon.tools.date.DateTools; @@ -194,6 +197,25 @@ inputXmlSB.append(""); inputXmlSB.append(""); inputXml = inputXmlSB.toString(); + } else if(StringUtils.equals(methodName, DatasyncConstant.MethodName_GetMedicalConsumables)){ + StringBuffer inputXmlSB = new StringBuffer(); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append("" + arg[0] + ""); + inputXmlSB.append("" + arg[1] + ""); + inputXmlSB.append("" + arg[2] + ""); + inputXmlSB.append(" "); + inputXmlSB.append("]]>"); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXml = inputXmlSB.toString(); } else { throw new RuntimeException("不存在此方法:" + methodName); } @@ -240,5 +262,23 @@ } return retStr; } + + /** + * 根据document和Xpath表达式解析数据 + * @param document + * @param nameSpaceURIMap + * @param xpathExp + * @return + */ + public static String processDataByXpath(Document document, String xpathExp) { + if ((StringUtils.isNotBlank(xpathExp)) && (document != null)) { + XPath xpath = document.createXPath(xpathExp); + Node node = xpath.selectSingleNode(document); + if (node != null) { + return node.getStringValue(); + } + } + return null; + } }