Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java
===================================================================
diff -u -r20094 -r20183
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 20094)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 20183)
@@ -58,6 +58,7 @@
import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord;
import com.forgon.disinfectsystem.entity.tousseitem.TousseItem;
import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager;
+import com.forgon.disinfectsystem.inventorymanagement.constant.gdsy.ConstantDefinition;
import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao;
import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper;
import com.forgon.disinfectsystem.invoicemanager.service.InvoiceManager;
@@ -68,6 +69,8 @@
import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager;
import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager;
import com.forgon.disinfectsystem.vo.DisposableGoodsStorageAdjustVo;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
import com.forgon.serialnumber.model.SerialNum;
import com.forgon.serialnumber.service.SerialNumManager;
import com.forgon.tools.MathTools;
@@ -114,6 +117,8 @@
private WriteBackInventoryHelper writeBackInventoryHelper;
+ private LogManager appLogManager;
+
/**
* 省医回写dao
*/
@@ -219,6 +224,10 @@
this.invoiceManager = invoiceManager;
}
+ public void setAppLogManager(LogManager appLogManager) {
+ this.appLogManager = appLogManager;
+ }
+
@Override
public ReturnGoodsRecord getById(String id) {
return (ReturnGoodsRecord) objectDao
@@ -874,10 +883,12 @@
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoTotalList);
logger.debug("退货回写参数xmlParam="+xmlParam);
- String result = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
- JSONObject jsonReturn = JSONObject.fromObject(result);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "退货回写参数xmlParam="+xmlParam);
+ String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "退货回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult);
+ JSONObject jsonReturn = JSONObject.fromObject(writeBackResult);
if(!jsonReturn.optBoolean("success")){
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}catch(Exception e){
e.printStackTrace();
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/diposableGoods/diposableGoodsView.js
===================================================================
diff -u -r19822 -r20183
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/diposableGoods/diposableGoodsView.js (.../diposableGoodsView.js) (revision 19822)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/diposableGoods/diposableGoodsView.js (.../diposableGoodsView.js) (revision 20183)
@@ -47,6 +47,7 @@
{name : 'batchNumber'},
{name : 'cost'},
{name : 'expDate'},
+ {name : 'sterileBatchNumber'},
{name : 'hasPrinted'},
{name : 'printTime'},
{name : 'supplierName'},
@@ -540,10 +541,11 @@
sm : selectModel,
cm : new top.Ext.grid.ColumnModel([selectModel,
{header : "id",dataIndex : 'id',hidden : true},
- {header : "条码",width : 90,dataIndex : 'barcode',menuDisabled:true},
- {header : "批次",width : 90,dataIndex : 'batchNumber',menuDisabled:true},
+ {header : "条码",width : 80,dataIndex : 'barcode',menuDisabled:true},
+ {header : "批次",width : 80,dataIndex : 'batchNumber',menuDisabled:true},
{header : "价格",width : 50,dataIndex : 'cost',menuDisabled:true},
{header : "失效期",width : 90,dataIndex : 'expDate',renderer:myDateFormat,menuDisabled:true},
+ {header : "灭菌批号",width : 90,dataIndex : 'sterileBatchNumber'},
{header : "是否打印",width : 70,dataIndex : 'hasPrinted',menuDisabled:true},
{header : "打印时间",width : 90,dataIndex : 'printTime',renderer:myDateFormat,menuDisabled:true},
{id:'supplierName',header : "供应商",width : 130,dataIndex : 'supplierName',menuDisabled:true}
Index: forgon-core/src/main/java/com/forgon/log/model/Log.java
===================================================================
diff -u -r19341 -r20183
--- forgon-core/src/main/java/com/forgon/log/model/Log.java (.../Log.java) (revision 19341)
+++ forgon-core/src/main/java/com/forgon/log/model/Log.java (.../Log.java) (revision 20183)
@@ -44,6 +44,7 @@
public static final String MODEL_INTERFERE = "干预模块";
public static final String MODEL_DISPOSABLEGOODS_WRITEBACK = "一次性物品回写";
public static final String MODEL_DISPOSABLEGOODS = "一次性物品";
+ public static final String MODEL_INVENTORYSYCN = "物资同步";
public static final String MODEL_TOUSSEDEFINITION = "器械包定义";
public static final String MODEL_RECYCLINGERRORANDDAMAGE = "丢失报损模块";
public static final String MODEL_BORROW = "借物管理模块";
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java
===================================================================
diff -u -r20178 -r20183
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java (.../InventoryManagerImpl.java) (revision 20178)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java (.../InventoryManagerImpl.java) (revision 20183)
@@ -311,8 +311,9 @@
if(disposableGoods != null){
disposableGoods.setInventorySerialNumber(inventory.getSerialNumber());
- //设置his系统原始的id
+ //设置his系统原始的id及外部编码
disposableGoods.setIdFromHisSync(item.getSourceId());
+ disposableGoods.setExternalCode(inventory.getExternalCode());
inventory.setDisposableGoods(disposableGoods);
} else {
// 若不是一次性物品则查找器械材料定义
@@ -324,8 +325,9 @@
if(materialDefinition != null){
// 按物资编码没找到但按名称规格能匹配的,保存物资编码
materialDefinition.setInventorySerialNumber(inventory.getSerialNumber());
- //设置his系统原始的id
+ //设置his系统原始的id及外部编码
materialDefinition.setIdFromHisSync(item.getSourceId());
+ materialDefinition.setExternalCode(inventory.getExternalCode());
}
}
inventory.setMaterialDefinition(materialDefinition);
@@ -380,9 +382,9 @@
.getName()));
ds.setCertification(inventory.getCertification());
ds.setInventorySerialNumber(inventory.getSerialNumber());
- //设置his系统原始的id
+ //设置his系统原始的id及外部编码
ds.setIdFromHisSync(item.getSourceId());
-
+ ds.setExternalCode(inventory.getExternalCode());
} else {
MaterialDefinition md = new MaterialDefinition();
inventory.setMaterialDefinition(md);
@@ -397,8 +399,9 @@
md.setCost(inventory.getCost());
md.setIsTraceble("是");
md.setInventorySerialNumber(inventory.getSerialNumber());
- //设置his系统原始的id
+ //设置his系统原始的id及外部编码
md.setIdFromHisSync(item.getSourceId());
+ md.setExternalCode(inventory.getExternalCode());
}
break;
}
@@ -1124,6 +1127,7 @@
godownEntryOrgUnitCode = supplyRoomConfigManager.getFirstSupplyRoomConfig().getOrgUnitCoding();
}
+ Date now = new Date();
for (StorageEntry storageEntry : storageEntrys) {
if(StringUtils.isNotBlank(storageEntry.getOrgUnitCoding())){
godownEntryOrgUnitCode = storageEntry.getOrgUnitCoding();
@@ -1146,7 +1150,7 @@
godownEntry.setSubType(GodownEntry.SUBTYPE_SYNC_OUT);
}
godownEntry.setSerialNumber(storageEntry.getSerialNumber());
- godownEntry.setTime(new Date());
+ godownEntry.setTime(now);
godownEntry.setWarehouseID(WareHouse.getId());
godownEntry.setWarehouseName(WareHouse.getName());
@@ -1187,6 +1191,11 @@
godownEntryItem.setCost(item.getUnitPrice());
godownEntryItem.setDisposableGoodsID(disposableGoods.getId());
godownEntryItem.setExpDate(item.getExpDate());
+ //如果失效期为空,或失效期小于当前时间,则该单的数据状态设置为异常
+ if(godownEntryItem.getExpDate() == null || godownEntryItem.getExpDate().before(now)){
+ godownEntry.setDataStatus(GodownEntry.DATA_STASUS_ERROR);
+ }
+
godownEntryItem.setIdentification(item.getIdentification());// 标识号
godownEntryItem.setManufacturer(item.getManufacturer());
godownEntryItem.setSterileBatchNumber(item.getSterileBatchNumber());
@@ -1196,22 +1205,22 @@
godownEntryItem.setBatchIdFromHisSync(item.getBatchIdFromHisSync());
if(StringUtils.equals(type, GodownEntry.TYPE_OUT)){//若是一次性退库则需要批次,库存,批次库存id
- //批次
- DisposableGoodsBatch DisposableGoodsBatch =(DisposableGoodsBatch)objectDao.getBySql(
- DisposableGoodsBatch.class.getSimpleName(),
- "where po.batchNumber="+item.getBatchNumber() +" and po.diposableGoods.id=" + disposableGoods.getId());
- godownEntryItem.setDisposableGoodsBatchID(DisposableGoodsBatch.getId());
- //库存
- WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(AcegiHelper.getCurrentOrgUnitCode());
- DisposableGoodsStock DisposableGoodsStock = (DisposableGoodsStock)objectDao.getBySql(
- DisposableGoodsStock.class.getSimpleName(),
- "where po.warehouseID="+ wareHouse.getId() +" and po.disposableGoodsID=" + disposableGoods.getId());
- godownEntryItem.setDisposableGoodsStockID(DisposableGoodsStock.getId());
- //批次库存
- DisposableGoodsBatchStock disposableGoodsBatchStock =(DisposableGoodsBatchStock)objectDao.getBySql(
- DisposableGoodsBatchStock.class.getSimpleName(),
- "where po.warehouseID="+ wareHouse.getId() +" and po.disposableGoodsBatchId=" + DisposableGoodsBatch.getId());
- godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId());
+ //批次
+ DisposableGoodsBatch DisposableGoodsBatch =(DisposableGoodsBatch)objectDao.getBySql(
+ DisposableGoodsBatch.class.getSimpleName(),
+ "where po.batchNumber="+item.getBatchNumber() +" and po.diposableGoods.id=" + disposableGoods.getId());
+ godownEntryItem.setDisposableGoodsBatchID(DisposableGoodsBatch.getId());
+ //库存
+ WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(AcegiHelper.getCurrentOrgUnitCode());
+ DisposableGoodsStock DisposableGoodsStock = (DisposableGoodsStock)objectDao.getBySql(
+ DisposableGoodsStock.class.getSimpleName(),
+ "where po.warehouseID="+ wareHouse.getId() +" and po.disposableGoodsID=" + disposableGoods.getId());
+ godownEntryItem.setDisposableGoodsStockID(DisposableGoodsStock.getId());
+ //批次库存
+ DisposableGoodsBatchStock disposableGoodsBatchStock =(DisposableGoodsBatchStock)objectDao.getBySql(
+ DisposableGoodsBatchStock.class.getSimpleName(),
+ "where po.warehouseID="+ wareHouse.getId() +" and po.disposableGoodsBatchId=" + DisposableGoodsBatch.getId());
+ godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId());
}
godownEntryItem.setGodownEntry(godownEntry);// 和退库单关联
//godownEntryItem.setDisposableGoodsStockID(disposableGoods.getId());// 和一次性物品ID关联
Index: ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/webservice/server/InventoryStockWebServiceImpl.java
===================================================================
diff -u -r15927 -r20183
--- ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/webservice/server/InventoryStockWebServiceImpl.java (.../InventoryStockWebServiceImpl.java) (revision 15927)
+++ ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/webservice/server/InventoryStockWebServiceImpl.java (.../InventoryStockWebServiceImpl.java) (revision 20183)
@@ -13,12 +13,15 @@
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
+import com.forgon.directory.acegi.tools.AcegiHelper;
import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry;
import com.forgon.disinfectsystem.inventorymanagement.gdsy.dao.InventoryDao;
import com.forgon.disinfectsystem.inventorymanagement.gdsy.dao.WriteBackInventoryDao;
import com.forgon.disinfectsystem.inventorymanagement.model.StorageEntry;
import com.forgon.disinfectsystem.inventorymanagement.service.InventoryManager;
import com.forgon.disinfectsystem.webservice.helper.WebServiceClientHelper;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
@@ -37,6 +40,8 @@
private InventoryManager inventoryManager;
+ private LogManager appLogManager;
+
public void setInventoryDao(InventoryDao inventoryDao) {
this.inventoryDao = inventoryDao;
}
@@ -51,6 +56,10 @@
this.config = config;
}
+ public void setAppLogManager(LogManager appLogManager) {
+ this.appLogManager = appLogManager;
+ }
+
/**
* 日志信息
*/
@@ -87,10 +96,12 @@
*/
public String receiveInStorageData(String dataXml){
logger.debug("receiveInStorageData method invoking...dataXml="+dataXml);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "物资推送入库,dataXml="+dataXml);
String xmlResult = "";
if(running == true){
xmlResult += " 1 "+"接口正在运行处理中,请稍候再调用!"+" ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
return xmlResult;
}
running = true;
@@ -113,16 +124,20 @@
if(CollectionUtils.isNotEmpty(storageEntrys)){
inventoryManager.syncStorageEntry_TRANS_REQUIRED(storageEntrys, WebServiceClientHelper.OPERATOR_HIS, GodownEntry.TYPE_IN);
xmlResult += " 0 ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
}else{
xmlResult += " 1 未找到对应的入库单 ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
}
}else{
xmlResult += " 1 " + jsonObjectResult.get("error") + " ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
}
return xmlResult;
}catch (Exception e) {
e.printStackTrace();
xmlResult += " 1 服务器出错! ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
return xmlResult;
}finally{
running = false;
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/interfere/godownEntryView.js
===================================================================
diff -u -r17671 -r20183
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/interfere/godownEntryView.js (.../godownEntryView.js) (revision 17671)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/interfere/godownEntryView.js (.../godownEntryView.js) (revision 20183)
@@ -1600,7 +1600,7 @@
manufacturer : action.result.data.itemsList[i].manufacturer,
certification : action.result.data.itemsList[i].certification,
batchNumber : action.result.data.itemsList[i].batchNumber,
- expDate : new Date(action.result.data.itemsList[i].expDate.time),
+ expDate : new Date(action.result.data.itemsList[i].expDate.time).format('Y-m-d'),
supplierName : action.result.data.itemsList[i].supplierName,
identification : action.result.data.itemsList[i].identification,
totalPrice:parseFloat(Ext.util.Format.usMoney(amount*cost)),
Index: forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java
===================================================================
diff -u -r17795 -r20183
--- forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 17795)
+++ forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 20183)
@@ -17,11 +17,11 @@
public class DateTools {
- public static String COMMON_DATE_HMS = "yyyy-MM-dd HH:mm:ss";
- public static String COMMON_DATE_HM = "yyyy-MM-dd HH:mm";
- public static String COMMON_DATE_PATTEN = "yyyy-MM-dd ";
- private static String COMMON_DATE = "yyyy-MM-dd 12:00:00";
- private static SimpleDateFormat sdf = new SimpleDateFormat(COMMON_DATE_PATTEN);
+ public final static String COMMON_DATE_HMS = "yyyy-MM-dd HH:mm:ss";
+ public final static String COMMON_DATE_HM = "yyyy-MM-dd HH:mm";
+ public final static String COMMON_DATE_PATTEN = "yyyy-MM-dd ";
+ private final static String COMMON_DATE = "yyyy-MM-dd 12:00:00";
+ private final static SimpleDateFormat sdf = new SimpleDateFormat(COMMON_DATE_PATTEN);
private static final Logger logger = Logger.getLogger(DateTools.class);
public int getSpaceMonthAmountOfTwoDate(String startDate, String endDate) {
Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java
===================================================================
diff -u -r20095 -r20183
--- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 20095)
+++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 20183)
@@ -91,6 +91,7 @@
import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord;
import com.forgon.disinfectsystem.entity.tousseitem.TousseItem;
import com.forgon.disinfectsystem.idpredicate.IDOperators;
+import com.forgon.disinfectsystem.inventorymanagement.constant.gdsy.ConstantDefinition;
import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao;
import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper;
import com.forgon.disinfectsystem.invoice.service.SubmitInvoiceContext;
@@ -2001,6 +2002,10 @@
// 开始发货非紧急物品
submitInvoiceContext.setSendOnlyUrgentGoods(false);
+ //回写的发货单集合
+ List writeBackInvoiceList = new ArrayList();
+ //一次性物品库存变动记录(一次性物品标识表及高值耗材库存变动记录)
+ List disposableGoodsStorageAdjustVoTotalList = new ArrayList();
for (InvoicePlan invoicePlan : filteredList) {
if(invoicePlan.delivered() || invoicePlan.deliverEnd()){
continue;
@@ -2009,12 +2014,12 @@
if(isSendOutCompletely(submitInvoiceContext)){
break;
}
- //一次性物品库存变动记录(一次性物品标识表及高值耗材库存变动记录)
- List disposableGoodsStorageAdjustVoTotalList = new ArrayList();
Invoice invoice = invoice( invoicePlan, submitInvoiceContext , disposableGoodsStorageAdjustVoTotalList);
- //省医回写接口调用
- writebackForGDSY(invoice , disposableGoodsStorageAdjustVoTotalList);
+ writeBackInvoiceList.add(invoice);
}
+ //省医回写接口调用
+ writebackForGDSY(writeBackInvoiceList , disposableGoodsStorageAdjustVoTotalList);
+
List invoiceList = submitInvoiceContext.getInvoiceList();
Map> updateStockInfo = submitInvoiceContext.getUpdateStockInfo();// 用于更新库存的信息
// 更新仓库的库存
@@ -2153,11 +2158,18 @@
}
}
- private void writebackForGDSY(Invoice invoice , List disposableGoodsStorageAdjustVoTotalList) {
+ private void writebackForGDSY(List invoiceList , List disposableGoodsStorageAdjustVoTotalList) {
//省医回写接口调用
- if(CssdUtils.isProject("gdsy") && writeBackInventoryDao != null && invoice != null && CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoTotalList)){
+ if(CssdUtils.isProject("gdsy") && writeBackInventoryDao != null && CollectionUtils.isNotEmpty(invoiceList)
+ && CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoTotalList)){
/*4
*/
+ Invoice invoice = invoiceList.get(0);
+ //如果产生的发货单超过一张时,回写的单号为本次发货的开始单号-末尾单号
+ String writeBackSerialNo = "INVOICE_" + invoice.getSerialNumber();
+ if(invoiceList.size() > 1){
+ writeBackSerialNo += "-" + invoiceList.get(invoiceList.size() - 1).getSerialNumber();
+ }
//发货单的发货科室-供应室
OrgUnit invoiceCssdOrgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", invoice.getOrgUnitCoding());
//发货单接收科室-申请单的临床科室
@@ -2169,15 +2181,17 @@
}
String xmlParam = "4" + invoiceCssdOrgUnit.getIdFromHisSync() + ""
+ "" + invoiceClinicOrgUnit.getIdFromHisSync() + ""
- + "INVOICE_" + invoice.getSerialNumber() + "";
+ + "" + writeBackSerialNo + "";
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoTotalList);
logger.debug("发货回写参数xmlParam="+xmlParam);
- String result = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
- JSONObject jsonReturn = JSONObject.fromObject(result);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "发货回写参数xmlParam="+xmlParam);
+ String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "发货回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult);
+ JSONObject jsonReturn = JSONObject.fromObject(writeBackResult);
if(!jsonReturn.optBoolean("success")){
//将发货回写不成功的消息向上抛出
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}
}
@@ -2237,7 +2251,7 @@
writebackForZSLY(invoiceList);
//省医回写接口调用
- writebackForGDSY(invoice , disposableGoodsStorageAdjustVoTotalList);
+ writebackForGDSY(Collections.singletonList(invoice) , disposableGoodsStorageAdjustVoTotalList);
// throw new RuntimeException("发货速度测试!");
return submitInvoiceContext;
@@ -2339,16 +2353,19 @@
// 第一次循环发货紧急物品
submitInvoiceContext.setSendOnlyUrgentGoods(true);
+ //回写的发货单集合
+ List writeBackInvoiceList = new ArrayList();
+ //库存变动记录(一次性物品标识表及高值耗材库存变动记录)
+ List disposableGoodsStorageAdjustVoList = new ArrayList();
for (InvoicePlan invoicePlan : filteredList) {
// 判断如果扫描的物品已经发完货,那么剩下的单就不需要再遍历处理了
if(isSendOutCompletely(submitInvoiceContext)){
break;
}
- //库存变动记录(一次性物品标识表及高值耗材库存变动记录)
- List disposableGoodsStorageAdjustVoList = new ArrayList();
Invoice invoice = invoice( invoicePlan, submitInvoiceContext , disposableGoodsStorageAdjustVoList);
- writebackForGDSY(invoice , disposableGoodsStorageAdjustVoList);
+ writeBackInvoiceList.add(invoice);
}
+
// 开始发货非紧急物品
submitInvoiceContext.setSendOnlyUrgentGoods(false);
for (InvoicePlan invoicePlan : filteredList) {
@@ -2359,11 +2376,13 @@
if(isSendOutCompletely(submitInvoiceContext)){
break;
}
- //库存变动记录(一次性物品标识表及高值耗材库存变动记录)
- List disposableGoodsStorageAdjustVoTotalList = new ArrayList();
- Invoice invoice = invoice( invoicePlan, submitInvoiceContext , disposableGoodsStorageAdjustVoTotalList);
- writebackForGDSY(invoice , disposableGoodsStorageAdjustVoTotalList);
+
+ Invoice invoice = invoice( invoicePlan, submitInvoiceContext , disposableGoodsStorageAdjustVoList);
+ writeBackInvoiceList.add(invoice);
}
+ //不管紧急发货还是非紧急发货,统一汇总后回写
+ writebackForGDSY(writeBackInvoiceList , disposableGoodsStorageAdjustVoList);
+
List invoiceList = submitInvoiceContext.getInvoiceList();
Map> updateStockInfo = submitInvoiceContext.getUpdateStockInfo();// 用于更新库存的信息
// 更新器械包库存
Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java
===================================================================
diff -u -r18407 -r20183
--- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java (.../DisposableGoodsStockAction.java) (revision 18407)
+++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java (.../DisposableGoodsStockAction.java) (revision 20183)
@@ -1,9 +1,14 @@
package com.forgon.disinfectsystem.diposablegoods.action;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -14,15 +19,22 @@
import com.forgon.tools.StrutsResponseUtils;
import com.forgon.tools.util.PageUtil;
+
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
+import org.springframework.orm.hibernate4.SessionFactoryUtils;
import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager;
import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager;
@@ -33,6 +45,7 @@
import com.forgon.systemsetting.service.HttpOptionManager;
import com.forgon.tools.StrutsParamUtils;
import com.forgon.tools.db.DatabaseUtil;
+import com.forgon.tools.hibernate.ObjectDao;
import com.forgon.tools.json.JSONUtil;
import com.forgon.tools.json.JsonPropertyFilter;
import com.opensymphony.xwork2.ModelDriven;
@@ -43,6 +56,12 @@
@Action(value = "disposableGoodsStockAction")
public class DisposableGoodsStockAction implements ModelDriven,
Preparable {
+
+ private File[] uploadFiles;
+
+ private String[] uploadFilesFileName;
+
+ private String[] uploadFilesContentType;
private DisposableGoodsStock disposableGoodsStock;
@@ -56,6 +75,8 @@
private DiposableGoodBatchStockManager diposableGoodBatchStockManager;
+ private ObjectDao objectDao;
+
private final Pattern pat = Pattern.compile("[\\u4E00-\\u9FA5]+");
protected final Logger logger = Logger.getLogger(this.getClass());
@@ -83,6 +104,34 @@
this.httpOptionManager = httpOptionManager;
}
+ public void setObjectDao(ObjectDao objectDao) {
+ this.objectDao = objectDao;
+ }
+
+ public File[] getUploadFiles() {
+ return uploadFiles;
+ }
+
+ public void setUploadFiles(File[] uploadFiles) {
+ this.uploadFiles = uploadFiles;
+ }
+
+ public String[] getUploadFilesFileName() {
+ return uploadFilesFileName;
+ }
+
+ public void setUploadFilesFileName(String[] uploadFilesFileName) {
+ this.uploadFilesFileName = uploadFilesFileName;
+ }
+
+ public String[] getUploadFilesContentType() {
+ return uploadFilesContentType;
+ }
+
+ public void setUploadFilesContentType(String[] uploadFilesContentType) {
+ this.uploadFilesContentType = uploadFilesContentType;
+ }
+
/**
* 保存前检查是否重复
*
@@ -569,4 +618,194 @@
e.printStackTrace();
}
}
+
+ /**
+ * 上传物资数据文件(目前为省医专用功能)
+ * 上传完excel文件并进行解析校验、数据入库等处理
+ */
+ public void uploadInventoryStockFile(){
+ String columnNameSourceId = "SourceID";
+ String columnNameBatchId = "BatchID";
+ String columnNameQuantity = "Quantity";
+ String columnNameMaterialNo = "MaterialNo";
+ String columnNameMaterialName = "MaterialName";
+ String columnNameMaterialSpec = "MaterialSpec";
+ String columnNameProductNo = "ProductNo";
+ //所需要的列名
+ List columnNames = Arrays.asList(columnNameSourceId,columnNameBatchId,columnNameQuantity
+ ,columnNameMaterialNo,columnNameMaterialName,columnNameMaterialSpec,columnNameProductNo);
+
+ List columnIndexes = new ArrayList();
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put(JSONUtil.JSON_KEY_SUCCESS, false);
+ //检验上传的附件是否有
+ if(uploadFiles == null || uploadFiles.length == 0){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "请上传附件");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+ //检查上传的附件数量是否大于1
+ if(uploadFiles.length > 1){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "上传附件数量只能是1个");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+ FileInputStream inputStream = null;
+ Connection conn = null;
+ Statement stm = null;
+ try{
+ inputStream = new FileInputStream(uploadFiles[0]);
+ HSSFWorkbook wb = new HSSFWorkbook(inputStream);
+ //1.检验sheet存不存在,有没有超过一个,只有一个的话默认取第一个
+ HSSFSheet firstSheet = null;
+ try {
+ firstSheet = wb.getSheetAt(0);
+ if(firstSheet == null){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "未找到excel文件的sheet");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+ } catch (Exception e) {
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "未找到excel文件的sheet");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+
+ //1.检验sheet存不存在,有没有超过一个,只有一个的话默认取第一个
+/* HSSFSheet secondSheet = null;
+ try {
+ secondSheet = wb.getSheetAt(1);
+ if(secondSheet != null){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "excel文件的sheet数量超过1个");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+ } catch (Exception e) {
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "excel文件的sheet数量超过1个");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }*/
+
+ //2.检查是否有数据且列头命名是否正确
+ int rowCount = firstSheet.getLastRowNum();
+ if(rowCount < 2){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "excel文件的数据至少需要两行,一行列头和一行数据");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+
+ //3.循环校验数据,同时将数据
+ HSSFRow headRow = firstSheet.getRow(0);
+ int cellCount = headRow.getLastCellNum();
+ if(cellCount < columnNames.size()){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "excel文件的数据列数少于7列");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+
+ //循环所需要找到的列
+ for (int i = 0; i < columnNames.size(); i++) {
+ boolean found = false;
+ //循环数据表格中的每一列
+ for (int j = 0; j < cellCount; j++) {
+ HSSFCell cell = headRow.getCell(j);
+ String cellContent = cell.getStringCellValue();
+ if(StringUtils.isBlank(cellContent)){
+ continue;
+ }
+ if(columnNames.get(i).equalsIgnoreCase(cellContent)){
+ columnIndexes.add(j);
+ found = true;
+ break;
+ }
+ }
+ if(found == false){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "excel文件未找到"+ columnNames.get(i) +"列");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+ }
+
+ conn = SessionFactoryUtils.getDataSource(objectDao.getHibernateSessionFactory()).getConnection();
+ stm = conn.createStatement();
+ stm.addBatch("delete from JXINVENTORYSTOCK");
+ JSONObject dataJsonObject = null;
+ //4.没有异常时,执行导入入库的逻辑
+ for (int i = 1; i <= rowCount; i++) {
+ dataJsonObject = new JSONObject();
+ HSSFRow dataRow = firstSheet.getRow(i);
+ for (int j = 0; j < columnIndexes.size(); j++) {
+ String columnName = columnNames.get(j);
+ String cellValue = "";
+ HSSFCell dataCell = dataRow.getCell(columnIndexes.get(j));
+ if(dataCell != null){
+ cellValue = dataCell.getStringCellValue();
+ }
+ if(columnNameSourceId.equals(columnName) || columnNameBatchId.equals(columnName) || columnNameQuantity.equals(columnName)){
+ if(cellValue == null){
+ cellValue = "";
+ }
+ if(cellValue.indexOf(".") != -1){
+ cellValue = cellValue.substring(0 , cellValue.indexOf("."));
+ }
+ boolean isNegative = false;
+ if(cellValue.startsWith("-")){
+ isNegative = true;
+ cellValue = cellValue.substring(1);
+ }
+ if(!StringUtils.isNumeric(cellValue)){
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "第"+ i +"行,列名为"+ columnName +"的内容不为数字,只能为数字。");
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }
+ if(isNegative){
+ cellValue = "-" + cellValue;
+ }
+ }
+ dataJsonObject.put(columnNames.get(j), cellValue);
+ }
+ stm.addBatch("insert into JXINVENTORYSTOCK(SourceID,BatchID,Quantity,MaterialNo,MaterialName,MaterialSpec,ProductNo) "
+ + "values ("+ dataJsonObject.optString(columnNameSourceId) +","+ dataJsonObject.optString(columnNameBatchId) +","+
+ dataJsonObject.optString(columnNameQuantity) +",'"+ dataJsonObject.optString(columnNameMaterialNo) +"','"+
+ dataJsonObject.optString(columnNameMaterialName) +"','"+ dataJsonObject.optString(columnNameMaterialSpec) +"','"+
+ dataJsonObject.optString(columnNameProductNo) +"')");
+ }
+ stm.executeBatch();
+
+ //5.响应输出结果
+ jsonObject.put(JSONUtil.JSON_KEY_SUCCESS, true);
+ StrutsResponseUtils.output(jsonObject);
+ }catch(Exception e){
+ e.printStackTrace();
+ jsonObject.put(JSONUtil.JSON_KEY_MESSAGE, "出现异常:" + e);
+ StrutsResponseUtils.output(jsonObject);
+ return;
+ }finally{
+ if(stm != null){
+ try {
+ stm.close();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ if(conn != null){
+ try {
+ conn.close();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ if(inputStream != null){
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
}
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java
===================================================================
diff -u -r15603 -r20183
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java (.../GodownEntry.java) (revision 15603)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java (.../GodownEntry.java) (revision 20183)
@@ -113,6 +113,13 @@
*/
private Long sourceId;
+ /**
+ * 数据状态(有物品的失效期为空或小于当前时间时,状态为异常)
+ */
+ private Integer dataStatus = DATA_STASUS_SUCC;
+ public final static Integer DATA_STASUS_ERROR = 0;
+ public final static Integer DATA_STASUS_SUCC = 1;
+
@JsonIgnore
private List itemsList = new ArrayList();
@@ -305,6 +312,14 @@
this.targetOrgUnitName = targetOrgUnitName;
}
+ public Integer getDataStatus() {
+ return dataStatus;
+ }
+
+ public void setDataStatus(Integer dataStatus) {
+ this.dataStatus = dataStatus;
+ }
+
public boolean manualIn() {
if (StringUtils.equals(subType, SUBTYPE_MANUAL_IN)) {
return true;
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownEntryView.js
===================================================================
diff -u -r19757 -r20183
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownEntryView.js (.../godownEntryView.js) (revision 19757)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownEntryView.js (.../godownEntryView.js) (revision 20183)
@@ -288,6 +288,10 @@
}
function renderDeleteButton(v,p,record){
+ //如果为修改,则隐藏删除图标
+ if(commonEntry.isOpen()){
+ return "";
+ }
return "
";
}
/**
@@ -419,7 +423,8 @@
}
var selectModel = new top.Ext.grid.CheckboxSelectionModel();
-function addGodownEntry(type) {
+//从入库单列表点添加或点击列表中某一行的单都会调用此function
+function addGodownEntry() {
Ext.getCmp("formSubmitResult").setValue(formSubmitResultInit);
wareHouseStore.load();
var form = new top.Ext.FormPanel({
@@ -626,20 +631,44 @@
{header : "id",dataIndex : 'id',hidden : true},
{header : "disposableGoodsID",dataIndex : 'disposableGoodsID',hidden : true},
{header : "名称",dataIndex : 'name',width : 250,menuDisabled : true},
- {header : "数量",dataIndex : 'amount',width : 40,menuDisabled : true,
+ {header : "数量",dataIndex : 'amount',width : 50,menuDisabled : true,
editor : new top.Ext.form.TextField({
regex: /^\d+$/,
regexText:'只能输入数字',
allowBlank : false,
listeners:{
change :function(field,newVal,oldVal){
+ if(commonEntry.isOpen()){
+ field.setValue(oldVal);
+ return false;
+ }
var grid = top.Ext.getCmp('godownEntryItemGrid');
setTotalMoney(grid);
+ },focus:function(){
+ if(commonEntry.isOpen()){
+ alert('查看和编辑入库单时不能修改数量');
+ return false;
+ }
}
}
})
},
- {header : "批次",width : 80,dataIndex : 'batchNumber',menuDisabled : true},
+ {header : "批次",width : 70,dataIndex : 'batchNumber',menuDisabled : true,
+ editor : new top.Ext.form.TextField({
+ allowBlank : false,
+ listeners:{
+ change :function(field,newVal,oldVal){
+ var grid = top.Ext.getCmp('godownEntryItemGrid');
+ setTotalMoney(grid);
+ },focus:function(){
+ if(!commonEntry.isOpen()){
+ alert('添加入库单的时候不能修改批次号');
+ return false;
+ }
+ }
+ }
+ })
+ },
{header : "失效日期",width : 80,dataIndex : 'expDate',menuDisabled : true, renderer:top.Ext.util.Format.dateRenderer('Y-m-d'),
editor : new top.Ext.form.DateExtensiableField({
minWidth : 177,
@@ -655,8 +684,17 @@
allowBlank : false,
listeners:{
change :function(field,newVal,oldVal){
+ if(commonEntry.isOpen()){
+ field.setValue(oldVal);
+ return false;
+ }
var grid = top.Ext.getCmp('godownEntryItemGrid');
setTotalMoney(grid);
+ },focus:function(){
+ if(commonEntry.isOpen()){
+ alert('查看和编辑入库单时不能修改单价');
+ return false;
+ }
}
}
})
@@ -1207,6 +1245,7 @@
text : '添加',
iconCls : 'btn_ext_add',
id:'addBtn',
+ hidden : commonEntry.isOpen(),
handler : function() {
addGodown();
top.Ext.getCmp('name1').focus();
@@ -1219,7 +1258,51 @@
}
})],
buttons : [
- {
+ {
+ text : '修改物品',
+ hidden : !commonEntry.isOpen(),
+ handler : function() {
+ var store = top.Ext.getCmp('godownEntryItemGrid').getStore();
+ var modifyRecords = store.getModifiedRecords();
+ var len = modifyRecords.getCount();
+ var items = [];
+ for (var i = 0; i < len; i++) {
+ var record = modifyRecords[i];
+ items.push({
+ id : record.data.id,//入库明细id
+ disposableGoodsID : record.data.disposableGoodsID,//一次性物品定义id
+ batchID : record.data.batchID,//批次id
+ batchNumber : record.data.batchNumber,//批次号
+ expDate : record.data.expDate.format('Y-m-d'),//失效期
+ supplierName : record.data.supplierName,//供应商
+ sterileBatchNumber : record.data.sterileBatchNumber,//灭菌批号
+ manufacturer : record.data.manufacturer,//生产厂家
+ producingArea : record.data.producingArea,//产地
+ certification : record.data.certification,//注册证号
+ grade : record.data.grade//类别
+ });
+ }
+ top.Ext.getCmp("items").setValue(JSON.stringify(items));
+ form.form.submit({
+ url : WWWROOT + '/disinfectSystem/godownEntryAction!modifyGodownEntryItemBaseData.do',
+ method : 'POST',
+ waitMsg : '正在保存数据,请稍候',
+ waitTitle : '提交表单',
+ success : function(form, action) {
+ if(!isUndefinedOrNullOrEmpty(action.result.message)){
+ showResult(action.result.message);
+ return;
+ }
+ godownEntryWin.close();
+ grid.dwrReload();
+ },
+ failure : function(form, action) {
+ alert(action.result.message);
+ }
+ });
+ }
+ },
+ {
text : '选择打印',
handler : function() {
if(!form.getForm().isValid()){
@@ -1266,7 +1349,7 @@
}
},{
text : '保存并打印新标签',
- hidden:saveButton || (commonEntry.isOpen()?true:false),
+ hidden:saveButton || (commonEntry.isOpen() ? true:false),
handler : function() {
if(!form.getForm().isValid()){
showResult('请正确填写表单各值');
@@ -1751,7 +1834,13 @@
Ext.QuickTips.init();
commonEntry.setCurrentUserName(curUserName);
var columns = [
- {header : "单号",width : 200,dataIndex : 'serialNumber', renderer : modifyRecord},
+ {header : "单号",width : 200,dataIndex : 'serialNumber', renderer : function(v,p,record){
+ if(record.get('dataStatus') == 0 && record.get('subType') == '同步入库'){
+ return modifyRecord(v,p,record) + "【有物品异常】";
+ }
+ return modifyRecord(v,p,record);
+ }
+ },
{header : "操作员",width : 200,dataIndex : 'operator'},
{header : "入库时间",width : 200,dataIndex : 'time' , renderer : myDateFormatByMinute},
{header : "金额",width : 200,dataIndex : 'totalPrice'},
@@ -1766,7 +1855,9 @@
{name : 'time'},
{name : 'remark'},
{name : 'totalPrice'},
- {name : 'supplierName'}
+ {name : 'supplierName'},
+ {name : 'dataStatus'},
+ {name : 'subType'}
];
var filters = new Ext.grid.GridFilters({
@@ -1790,7 +1881,7 @@
iconCls : 'btn_ext_application_add',
handler : function() {
commonEntry.setId(null);
- addGodownEntry('insert');
+ addGodownEntry();
}
});
tbar.push('-');
@@ -1874,8 +1965,17 @@
null
);
+ //检查列表的每一行数据,判断是否有异常的数据(考虑背景色容易被鼠标移动或点击该行时改变颜色,所以暂不用背景色的方案)
+/* grid.getStore().on('load' , function(s){
+ //校验物品数量是否为数字
+ for ( var i = 0; i < grid.getStore().getCount(); i++) {
+ var record = grid.getStore().getAt(i);
+ if(record.get('dataStatus') == 0 && record.get('subType') == '同步入库'){
+ grid.getView().getRow(i).style.backgroundColor = '#FFB5B5';
+ }
+ }
+ });*/
-
function initQueryValueAndReload() {
var startDate = Ext.getCmp('startDate').getRawValue();
var endDate = Ext.getCmp('endDate').getRawValue();
Index: ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/webservice/helper/WebServiceClientHelper.java
===================================================================
diff -u -r15334 -r20183
--- ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/webservice/helper/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 15334)
+++ ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/webservice/helper/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 20183)
@@ -38,15 +38,15 @@
/**
* 接口系统代码(除了入库接口外)
*/
- public static String OPSYSTEM = "HIS";
+ public final static String OPSYSTEM = "HIS";
/**
* 科室信息接口代码
*/
- public static String OPTYPE_ORG = "1001";
+ public final static String OPTYPE_ORG = "1001";
/**
* 人员信息接口代码
*/
- public static String OPTYPE_USER = "1002";
+ public final static String OPTYPE_USER = "1002";
/**
* 材料/物资
*/
@@ -58,16 +58,16 @@
/**
* 门诊挂号
*/
- public static String OPTYPE_TREATMENTNUM = "1104";
+ public final static String OPTYPE_TREATMENTNUM = "1104";
/**
* 回写数据
*/
- public static String OPTYPE_WRITEBACK = "1210";
+ public final static String OPTYPE_WRITEBACK = "1210";
/**
* 调用接口的登录名
*/
- public static String LOGINNAME = "hissoft";
+ public final static String LOGINNAME = "hissoft";
/**
* 调用接口的密码
*/
@@ -76,19 +76,24 @@
/**
* 返回成功的结果码
*/
- public static final int CODE_STATE_SUCCESS = 0;
+ public final static int CODE_STATE_SUCCESS = 0;
/**
* his调用孚峻供应室系统入库单接口的操作人默认为his
*/
- public static String OPERATOR_HIS = "HIS";
+ public final static String OPERATOR_HIS = "HIS";
/**
* 同步科室时对编码为0的替换值
*/
- public static String OrgCoding0ReplaceValue = "0123456789";
+ public final static String OrgCoding0ReplaceValue = "0123456789";
/**
+ * 批次号为空的默认批次号
+ */
+ public final static String EMPTY_BATCHNO = "空批次";
+
+ /**
* 调用入库接口所传的xml参数
*/
public static String inStorageDataXml;
@@ -163,21 +168,26 @@
* @param jsonData
* @return
*/
- public static JSON testUserAndOrgQuery(JsonObject jsonData){
+ public static JSON testOrgQuery(JsonObject jsonData){
JSONObject resultJsonObject = new JSONObject();
JsonObject errorJsonObject = null;
try {
resultJsonObject.put("RETCODE", jsonData.get("RETCODE").getAsInt());
JSONArray newJsonArray = new JSONArray();
JsonArray deptJsonArray = jsonData.getAsJsonArray("Content");
for (int i = 0; i < deptJsonArray.size(); i++) {
- JsonObject deptJsonObject = deptJsonArray.get(i).getAsJsonObject();
- errorJsonObject = deptJsonObject;
- JSONObject newJsonObject = new JSONObject();
- newJsonObject.put("DEPARTMENTID", deptJsonObject.get("DEPARTMENTID").getAsString());//由于省医his返回的科室编码可能为空,所以用其id作为科室编码
- newJsonObject.put("DEPARTMENTNAME", deptJsonObject.get("DEPARTMENTNAME").getAsString());
- //newJsonObject.put("DEPARTMENTNO", deptJsonObject.get("DEPARTMENTID").getAsString());
- newJsonArray.add(newJsonObject);
+ try {
+ JsonObject deptJsonObject = deptJsonArray.get(i).getAsJsonObject();
+ errorJsonObject = deptJsonObject;
+ JSONObject newJsonObject = new JSONObject();
+ newJsonObject.put("DEPARTMENTID", deptJsonObject.get("DEPARTMENTID"));//由于省医his返回的科室编码可能为空,所以用其id作为科室编码
+ newJsonObject.put("DEPARTMENTNAME", deptJsonObject.get("DEPARTMENTNAME"));
+ newJsonObject.put("DEPARTMENTNO", deptJsonObject.get("DEPARTMENTID"));
+ newJsonArray.add(newJsonObject);
+ }catch(Exception e){
+ logger.error("errorJsonObject="+errorJsonObject);
+ e.printStackTrace();
+ }
}
resultJsonObject.put("Content", newJsonArray);
} catch (Exception e) {
@@ -187,7 +197,58 @@
return resultJsonObject;
}
+ //测试方法
/**
+ * {
+ "RETCODE": "0",
+ "Content": [
+ {
+ "DepartmentID": "246",
+ "EMPLOYEEID": "1",
+ "EMPLOYEENAME": "冯建章",
+ "EMPLOYEENO": "2019"
+ },
+ {
+ "DepartmentID": "216",
+ "EMPLOYEEID": "2",
+ "EMPLOYEENAME": "周伯康",
+ "EMPLOYEENO": "0767"
+ },....
+ }
+ * @param jsonData
+ * @return
+ */
+ public static JSON testUserQuery(JsonObject jsonData){
+ JSONObject resultJsonObject = new JSONObject();
+ JsonObject errorJsonObject = null;
+ try {
+ resultJsonObject.put("RETCODE", jsonData.get("RETCODE").getAsInt());
+ JSONArray newJsonArray = new JSONArray();
+ JsonArray deptJsonArray = jsonData.getAsJsonArray("Content");
+ for (int i = 0; i < deptJsonArray.size(); i++) {
+ try{
+ JsonObject deptJsonObject = deptJsonArray.get(i).getAsJsonObject();
+ errorJsonObject = deptJsonObject;
+ JSONObject newJsonObject = new JSONObject();
+ newJsonObject.put("DepartmentID", deptJsonObject.get("DepartmentID"));//由于省医his返回的科室编码可能为空,所以用其id作为科室编码
+ newJsonObject.put("EMPLOYEEID", deptJsonObject.get("EMPLOYEEID"));
+ newJsonObject.put("EMPLOYEENAME", deptJsonObject.get("EMPLOYEENAME"));
+ newJsonObject.put("EMPLOYEENO", deptJsonObject.get("EMPLOYEENO"));
+ newJsonArray.add(newJsonObject);
+ }catch(Exception e){
+ logger.error("errorJsonObject="+errorJsonObject);
+ e.printStackTrace();
+ }
+ }
+ resultJsonObject.put("Content", newJsonArray);
+ } catch (Exception e) {
+ logger.error("errorJsonObject="+errorJsonObject);
+ e.printStackTrace();
+ }
+ return resultJsonObject;
+ }
+
+ /**
* 根据住院号查询病人信息接口调用
* @param opsystem
* @param optype
Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java
===================================================================
diff -u -r19508 -r20183
--- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 19508)
+++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 20183)
@@ -51,13 +51,16 @@
import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryExpensiveGoodsItem;
import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryItem;
import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryRecord;
+import com.forgon.disinfectsystem.inventorymanagement.constant.gdsy.ConstantDefinition;
import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao;
import com.forgon.disinfectsystem.stocktakerecordmanager.service.StockTakeRecordManager;
import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager;
import com.forgon.disinfectsystem.tousse.materialmanager.service.MaterialCheckManager;
import com.forgon.disinfectsystem.tousse.materialmanager.service.MaterialEntryManager;
import com.forgon.disinfectsystem.vo.DisposableGoodsStorageAdjustVo;
import com.forgon.excel.service.ExcelUtils;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
import com.forgon.serialnumber.model.SerialNum;
import com.forgon.serialnumber.service.SerialNumManager;
import com.forgon.tools.MathTools;
@@ -94,6 +97,8 @@
private MaterialDefinitionManager materialDefinitionManager;
+ private LogManager appLogManager;
+
/**
* 省医回写dao
*/
@@ -142,6 +147,10 @@
this.writeBackInventoryDao = writeBackInventoryDao;
}
+ public void setAppLogManager(LogManager appLogManager) {
+ this.appLogManager = appLogManager;
+ }
+
@Override
public InventoryRecord getById(String id) {
return (InventoryRecord) objectDao.getByProperty(
@@ -195,55 +204,57 @@
Map returnMsg = new HashMap();
try {
- // 盘盈入库单
- if (in_array.size() > 0) {
+ // 盘亏退库单(考虑回写的成功情况,盘盈回写成功率高于盘亏回写成功率,所以将盘亏业务提前先处理然后再进行盘盈处理)
+ if (out_array.size() > 0) {
GodownEntry entry = newGodownEntry(inventoryRecord,
- MaterialEntry.TYPE_IN,MaterialEntry.SUBTYPE_STOCKTAKE_IN, in_array);
- List disposableGoodsStorageAdjustVoList = godownEntryManager.saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(entry,returnMsg);
+ GodownEntry.TYPE_OUT,GodownEntry.SUBTYPE_STOCKTAKE_OUT, out_array);
+ //是否需要回写,盘亏时是不用回写的,因为并不会退回到一级仓库增加一级仓库库存,只用扣减二级仓库的库存
+ boolean needWriteBack = false;
+ List disposableGoodsStorageAdjustVoList = godownEntryManager.saveGodownOutEntry_TRANS_REQUIRED(entry,returnMsg,needWriteBack);
- //省医回写
+ //回写
if(CssdUtils.isProject("gdsy") && writeBackInventoryDao != null && CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){
/*4
*/
- //盘盈供应室
+ //盘亏供应室
OrgUnit inventoryCssdOrgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", entry.getOrgUnitCode());
- String xmlParam = "4-1"
- + ""+ inventoryCssdOrgUnit.getIdFromHisSync() +""
- + "CHECKIN_" + entry.getSerialNumber() + "";
+ String xmlParam = "4" + inventoryCssdOrgUnit.getIdFromHisSync() + ""
+ + "-1"
+ + "CHECKOUT_" + entry.getSerialNumber() + "";
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoList);
- logger.debug("供应室盘盈入库回写参数xmlParam="+xmlParam);
- String result = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
- JSONObject jsonReturn = JSONObject.fromObject(result);
+ logger.debug("供应室盘亏退库回写参数xmlParam="+xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "供应室盘亏回写参数xmlParam="+xmlParam);
+ String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "供应室盘亏回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult);
+ JSONObject jsonReturn = JSONObject.fromObject(writeBackResult);
if(!jsonReturn.optBoolean("success")){
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}
}
- // 盘亏退库单
- if (out_array.size() > 0) {
+ // 盘盈入库单
+ if (in_array.size() > 0) {
GodownEntry entry = newGodownEntry(inventoryRecord,
- GodownEntry.TYPE_OUT,GodownEntry.SUBTYPE_STOCKTAKE_OUT, out_array);
- //是否需要回写,盘亏时是不用回写的,因为并不会退回到一级仓库增加一级仓库库存,只用扣减二级仓库的库存
- boolean needWriteBack = false;
- List disposableGoodsStorageAdjustVoList = godownEntryManager.saveGodownOutEntry_TRANS_REQUIRED(entry,returnMsg,needWriteBack);
+ MaterialEntry.TYPE_IN,MaterialEntry.SUBTYPE_STOCKTAKE_IN, in_array);
+ List disposableGoodsStorageAdjustVoList = godownEntryManager.saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(entry,returnMsg);
- //回写
+ //省医回写
if(CssdUtils.isProject("gdsy") && writeBackInventoryDao != null && CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){
/*4
*/
- //盘亏供应室
+ //盘盈供应室
OrgUnit inventoryCssdOrgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", entry.getOrgUnitCode());
- String xmlParam = "4" + inventoryCssdOrgUnit.getIdFromHisSync() + ""
- + "-1"
- + "CHECKOUT_" + entry.getSerialNumber() + "";
+ String xmlParam = "4-1"
+ + ""+ inventoryCssdOrgUnit.getIdFromHisSync() +""
+ + "CHECKIN_" + entry.getSerialNumber() + "";
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoList);
- logger.debug("供应室盘亏退库回写参数xmlParam="+xmlParam);
+ logger.debug("供应室盘盈入库回写参数xmlParam="+xmlParam);
String result = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
JSONObject jsonReturn = JSONObject.fromObject(result);
if(!jsonReturn.optBoolean("success")){
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}
}
Index: ssts-web/src/main/webapp/homepage/menuconfigure.js
===================================================================
diff -u -r19671 -r20183
--- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 19671)
+++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 20183)
@@ -305,6 +305,7 @@
{hidden :SSTS_DisposableGoods_Menu,text:"一次性物品管理",href:WWWROOT+'/disinfectsystem/assestManagement/diposableGoods/diposableGoodsView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_DisposableGoods_Menu,text:"高值耗材使用记录",href:WWWROOT+'/disinfectsystem/assestManagement/disposableGoods/expensiveDisposableGoodsUseRecordView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_DisposableGoodsStock_Manager,text:"一次性物品库存",href:WWWROOT+'/disinfectsystem/assestManagement/disposableGoods/disposableGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true},
+ {hidden :SSTS_DisposableGoodsStock_Manager || !sstsConfig.enableBatchStockCompare,text:"库存对比",href:WWWROOT+'/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_DisposableGoodsOutOfStorage_Manager,text:"一次性物品出入库记录",href:WWWROOT+'/disinfectsystem/assestManagement/disposableGoods/storageRecordView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_DisposableGoodsGodownEntry_Manager,text:"一次性物品入库单管理",href:WWWROOT+'/disinfectsystem/assestManagement/godownEntry/godownEntryView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_DisposableGoodsCancellingStocks_Manager,text:"一次性物品退库单管理",href:WWWROOT+'/disinfectsystem/assestManagement/godownEntry/godownOutView.jsp',hrefTarget:linkTarget,leaf:true},
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoods.java
===================================================================
diff -u -r19422 -r20183
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoods.java (.../DisposableGoods.java) (revision 19422)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoods.java (.../DisposableGoods.java) (revision 20183)
@@ -96,7 +96,7 @@
private String applicationSpecification; // 申领规格
private String orginalApplicationSpecification;// 不保存到数据库,用于判断是否做了修改
- private Integer transferScale; //中包装单位装换单位系数
+ private Integer transferScale; //中包装单位转换单位系数
private Integer minApplyAmount; //最小申请数量
Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManager.java
===================================================================
diff -u -r19508 -r20183
--- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManager.java (.../GodownEntryManager.java) (revision 19508)
+++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManager.java (.../GodownEntryManager.java) (revision 20183)
@@ -74,4 +74,26 @@
public void setGodownEntryDefaultWareHouse(GodownEntry entry,String orgUnitCoding);
public void printSomeGodownEntryItem(String items,JSONObject jsonObj);
+
+ /**
+ * 修改入库单的物品明细的各个属性(不支持修改单价、数量等字段)后,需要分别更新到入库明细表、一次n性物品定义、批次定义等表中
+ * @param items 物品明细的json数组格式,示例格式:
+ * [
+ * {
+ id : record.data.id,//入库明细id
+ disposableGoodsID : record.data.disposableGoodsID,//一次性物品定义id
+ batchID : record.data.batchID,//批次id
+ batchNumber : record.data.batchNumber,//批次号
+ expDate : record.data.expDate.format('Y-m-d'),//失效期
+ supplierName : record.data.supplierName,//供应商
+ sterileBatchNumber : record.data.sterileBatchNumber,//灭菌批号
+ manufacturer : record.data.manufacturer,//生产厂家
+ producingArea : record.data.producingArea,//产地
+ certification : record.data.certification,//注册证号
+ grade : record.data.grade//类别
+ }
+ * ]
+ * @param jsonObj 接收返回的参数
+ */
+ public void modifyGodownEntryItemBaseData(String items,JSONObject jsonObj);
}
Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java
===================================================================
diff -u -r20084 -r20183
--- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 20084)
+++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 20183)
@@ -946,6 +946,7 @@
temp.put("name", goodsName);
temp.put("spelling", disposableGoods.getSpelling());
temp.put("externalCode", externalCode);
+ temp.put("sourceId", disposableGoods.getIdFromHisSync());
temp.put("goodsType", disposableGoods.getGoodsType());
temp.put("minApplyAmount", disposableGoods.getMinApplyAmount());
temp.put("unit", StringTools.getDefaultString(disposableGoods.getUnit()));
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.jsp
===================================================================
diff -u
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.jsp (revision 0)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.jsp (revision 20183)
@@ -0,0 +1,42 @@
+<%@page import="com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem"%>
+<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier,com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry "%>
+<%@ page contentType="text/html; charset=UTF-8"%>
+<%@ include file="/common/taglibs.jsp"%>
+<%@ include file="/common/includeExtJsAndCss.jsp"%>
+<%@ include file="/common/include_Ext42_Css.jsp"%>
+<%@ page import="com.forgon.tools.SpringBeanManger" %>
+
+<%@ include file="/common/includeExtJs4_2.jsp"%>
+
+
+
+库存对比信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java
===================================================================
diff -u -r19508 -r20183
--- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 19508)
+++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 20183)
@@ -44,10 +44,13 @@
import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse;
import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem;
import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordDiposableGoodsItem;
+import com.forgon.disinfectsystem.inventorymanagement.constant.gdsy.ConstantDefinition;
import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao;
import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper;
import com.forgon.disinfectsystem.vo.DisposableGoodsStorageAdjustVo;
import com.forgon.disinfectsystem.vo.GodownEntryItemPrintVO;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
import com.forgon.serialnumber.model.SerialNum;
import com.forgon.serialnumber.service.SerialNumManager;
import com.forgon.tools.MathTools;
@@ -71,6 +74,8 @@
private WriteBackInventoryHelper writeBackInventoryHelper;
+ private LogManager appLogManager;
+
/**
* 回写dao
* 仅省医使用
@@ -140,6 +145,10 @@
this.barcodeManager = barcodeManager;
}
+ public void setAppLogManager(LogManager appLogManager) {
+ this.appLogManager = appLogManager;
+ }
+
@Override
public GodownEntry getGodownEntryById(String id) {
return (GodownEntry) objectDao.getByProperty(
@@ -1674,10 +1683,12 @@
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoList);
logger.debug("调拨回写参数xmlParam="+xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "调拨回写参数xmlParam="+xmlParam);
String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "调拨回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult);
JSONObject jsonReturn = JSONObject.fromObject(writeBackResult);
if(!jsonReturn.optBoolean("success")){
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}
}
@@ -2255,10 +2266,12 @@
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoList);
logger.debug("退库回写参数xmlParam="+xmlParam);
- String result = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
- JSONObject jsonReturn = JSONObject.fromObject(result);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "退库回写参数xmlParam="+xmlParam);
+ String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "退库回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult);
+ JSONObject jsonReturn = JSONObject.fromObject(writeBackResult);
if(!jsonReturn.optBoolean("success")){
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}catch(Exception e){
e.printStackTrace();
@@ -2655,4 +2668,118 @@
}
jsonObj.put("items", jsonArray);
}
+
+ @Override
+ public void modifyGodownEntryItemBaseData(String items, JSONObject jsonObj) {
+ jsonObj.put(JSONUtil.JSON_KEY_SUCCESS, false);
+
+ try {
+ if (StringUtils.isBlank(items)) {
+ throw new RuntimeException("参数非法,items不能为空!");
+ }
+ GodownEntry godownEntry = null;
+ Date now = new Date();
+ JSONArray itemsObj = JSONArray.fromObject(items);
+ for(int i=0;i> parameterMap){
+ JSONObject jsonObject = new JSONObject();
+ JSONArray dataJsonArray = new JSONArray();
+ String sql = "select * from ("+
+ //--1.以追溯系统数据为基准,查询出与物资系统库存不一致的数据(包括追溯系统有库存但物资系统却没有的库存数据)
+ "select dg.idFromHisSync sourceid,dgi.batchIdFromHisSync batchid, dg.externalCode externalCode,dg.name name,dg.specification specification,dgb.batchNumber batchNumber,dgi.amount cssdStock,js.quantity inventoryStock "+
+ "from DisposableGoodsIdentification dgi join DisposableGoods dg on dgi.disposableGoodsID=dg.id "+
+ "join DisposableGoodsBatch dgb on dgi.disposableGoodsBatchID=dgb.id "+
+ "left join JXINVENTORYSTOCK js on dgi.batchIdFromHisSync=js.batchid "+
+ "where dgi.amount > 0 and convert(decimal(20,4),js.quantity) > 0 and dgi.amount <> convert(decimal(20,4),js.quantity) "+
+
+ "union "+
+
+ //2.查询追溯系统有库存但物资系统没有库存的数据
+ "select dg.idFromHisSync sourceid,dgi.batchIdFromHisSync batchid,dg.externalCode externalCode,dg.name name,dg.specification specification,dgb.batchNumber batchNumber,dgi.amount cssdStock,null inventoryStock "+
+ "from DisposableGoodsIdentification dgi join DisposableGoods dg on dgi.disposableGoodsID=dg.id "+
+ "join DisposableGoodsBatch dgb on dgi.disposableGoodsBatchID=dgb.id "+
+ "where dgi.amount > 0 and dg.idFromHisSync not in (select SourceID from JXINVENTORYSTOCK where Quantity > 0 and SourceID is not null) "+
+
+ "union "+
+
+ //3.查询物资系统有库存但追溯系统没有库存的数据
+ "select js.sourceid sourceId,js.batchid batchId,js.materialno externalCode,js.MaterialName name,js.MaterialSpec specification,js.ProductNo batchNumber,null cssdStock,js.quantity inventoryStock "+
+ "from JXINVENTORYSTOCK js where convert(decimal(20,4),js.quantity) > 0 and batchid not in "+
+ "(select batchIdFromHisSync from DisposableGoodsIdentification where amount > 0 and batchIdFromHisSync is not null) "+
+ ") alias where 1=1 ";
+ List sourceIdCondition = parameterMap.get("parm_s_sourceId");
+ if(CollectionUtils.isNotEmpty(sourceIdCondition) && StringUtils.isNotBlank(sourceIdCondition.get(0))){
+ sql += " and sourceId in ("+ StringUtils.join(sourceIdCondition, ",") +")";
+ }
+ sql += " order by externalCode,batchid";
+ ResultSet rs = null;
+ try{
+ rs = objectDao.executeSql(sql);
+ while(rs.next()){
+ JSONObject dataJsonObject = new JSONObject();
+ dataJsonObject.put("sourceId", rs.getObject("sourceId"));
+ dataJsonObject.put("batchId", rs.getObject("batchId"));
+ dataJsonObject.put("externalCode", rs.getObject("externalCode"));
+ dataJsonObject.put("name", rs.getObject("name"));
+ dataJsonObject.put("specification", rs.getObject("specification"));
+ dataJsonObject.put("displayName", DisposableGoodsUtils.getDisposableGoodsFullName(dataJsonObject.optString("name"), dataJsonObject.optString("specification")));
+ dataJsonObject.put("batchNumber", rs.getObject("batchNumber"));
+ dataJsonObject.put("cssdStock", rs.getObject("cssdStock"));
+ dataJsonObject.put("inventoryStock", rs.getObject("inventoryStock"));
+ dataJsonArray.add(dataJsonObject);
+ }
+ }catch(Exception e){
+ e.printStackTrace();
+ }finally{
+ if(rs != null){
+ try {
+ rs.close();
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ jsonObject.put("totalResults", dataJsonArray.size());
+ jsonObject.put("rows", dataJsonArray);
+ jsonObject.put("selectSqlWhereCondition", "where 1=1");
+ return jsonObject.toString();
+ }
+
}
Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/model/Inventory.java
===================================================================
diff -u -r16365 -r20183
--- ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/model/Inventory.java (.../Inventory.java) (revision 16365)
+++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/model/Inventory.java (.../Inventory.java) (revision 20183)
@@ -17,6 +17,10 @@
private String unit;
private Double cost;
private String certification;
+ /**
+ * 外部编码
+ */
+ private String externalCode;
private DisposableGoods disposableGoods;
private MaterialDefinition materialDefinition;
@@ -98,6 +102,14 @@
this.certification = certification;
}
+ public String getExternalCode() {
+ return externalCode;
+ }
+
+ public void setExternalCode(String externalCode) {
+ this.externalCode = externalCode;
+ }
+
public String getOne() {
return one;
}
Index: ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js
===================================================================
diff -u -r20149 -r20183
--- ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 20149)
+++ ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 20183)
@@ -234,5 +234,7 @@
// 发货扫描后,重新排序申请物品
invoicePlanExtractedForm_resortRecyclingApplicationItems : true,
//禁用供应室领用记录删除(防止因删除导致回写结果不准确)
- disableReceiveRecordDelete : true
+ disableReceiveRecordDelete : true,
+ //启用库存对比功能菜单
+ enableBatchStockCompare : true
}
\ No newline at end of file
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.js
===================================================================
diff -u
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.js (revision 0)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/disposableGoods/batchStockCompare.js (revision 20183)
@@ -0,0 +1,224 @@
+var entityName = "库存对比";
+var grid;
+
+/*var wareHouseStore = new Ext.data.Store({
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/baseData/wareHouseAction!getWareHouseData.do',
+ method : 'POST'
+ }),
+ reader : new Ext.data.JsonReader({
+ totalProperty : 'totalCount',
+ root : 'data'
+ }, [
+ {name : 'id',mapping : 'id'},
+ {name : 'name',mapping : 'name'},
+ {name : 'orgUnitCode',mapping : 'orgUnitCode'},
+ ]),
+ listeners : {
+ load : function(store,records) {
+ if(records.length > 0 && (!commonEntry.isOpen())){
+ var combo = top.Ext.getCmp("wareHouse1");
+ // 触发选中事件
+ combo.fireEvent('select', combo,records[0],0);
+ }
+ top.Ext.getCmp("name1").enable();
+ }
+ }
+});*/
+
+// 全部一次性物品
+var allDiposableGoodsStore = new Ext.data.Store({
+ pageSize: 100,
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/diposableGoodsAction!getDiposableGoodsData.do?allItems=yes',
+ method : 'POST'
+ }),
+ reader : new Ext.data.JsonReader({
+ totalProperty : 'totalCount',
+ root : 'data'
+ }, [
+ {name : 'id',mapping : 'id'},
+ {name : 'sourceId',mapping : 'sourceId'},
+ {name : 'name',mapping : 'name'},
+ {name : 'displayName',mapping : 'displayName'}
+ ])
+});
+
+function openFileImportWindow(){
+ var dialog = new top.Ext.ux.UploadDialog.Dialog({
+ title: "导入数据(只能上传一个文件)",
+ url:WWWROOT + '/disinfectSystem/disposableGoodsStockAction!uploadInventoryStockFile.do', //这里我用struts2做后台处理
+ post_var_name:'uploadFiles',//这里是自己定义的,默认的名字叫file
+ width : 450,
+ height : 300,
+ minWidth : 450,
+ minHeight : 300,
+ draggable : true ,
+ resizable : true ,
+ constraintoviewport: true ,
+ permitted_extensions:['xls'],
+ modal: true ,
+ reset_on_hide: false ,
+ allow_close_on_upload: false , //关闭上传窗口是否仍然上传文件
+ upload_autostart: false
+ });
+
+ dialog.show();
+ dialog.on('uploadsuccess',function(dialog){debugger;
+ showResult("文件导入成功!");
+
+ //刷新外面的窗体表格数据
+ grid.dwrReload();
+
+ dialog.hide();
+ }); //定义上传完成回调函数
+ dialog.on('uploadfailed',function(dialog){debugger;
+ showResult("文件上传失败!");
+ //dialog.hide();
+ }); //定义上传完成回调函数
+}
+
+Ext.onReady(function() {
+ Ext.QuickTips.init();
+ var columns = [
+ {header : "sourceId",width : 200,dataIndex : 'sourceId',sortable:false},
+ {header : "batchId",width : 200,dataIndex : 'batchId',sortable:false},
+ {header : "外部编码",width : 200,dataIndex : 'externalCode',sortable:false},
+ {header : "名称",width : 200,dataIndex : 'displayName',sortable:false},
+ {header : "批次号",width : 200,dataIndex : 'batchNumber',sortable:false},
+ {header : "追溯系统库存",width : 200,dataIndex : 'cssdStock',sortable:false},
+ {header : "物资系统库存",width : 200,dataIndex : 'inventoryStock',sortable:false}
+ ];
+
+ var readerDetail = [
+ {name : 'sourceId'},
+ {name : 'batchId'},
+ {name : 'externalCode'},
+ {name : 'displayName'},
+ {name : 'batchNumber'},
+ {name : 'cssdStock'},
+ {name : 'inventoryStock'}
+ ];
+
+
+
+ grid = new Ext.ux.ForgonPageGrid( {
+ pageSize : 10000,
+ //defaultSortField : 'externalCode',
+ title : '库存对比差异数据',
+ //defaultSortDirection : '',
+ isCheckboxSelectionModel : true,
+ rememberSelected : false,
+ isShowSearchField : false,
+ columns : columns,
+ renderTo : 'gridDiv',
+ frame : false
+ }, readerDetail,
+ DiposableGoodsTableManager.findBatchStockCompareList,
+ null
+ );
+
+ function initQueryValueAndReload() {
+ var sourceId = Ext.getCmp('comboDisposableGoods').getValue();
+ $Id('parm_s_sourceId').value = sourceId;
+ grid.dwrReload();
+ }
+ var form = new Ext.Panel({
+ id : 'northPanel',
+ layout : 'table',
+ frame : true,
+ region : 'north',
+ border : false,
+ bodyBorder : false,
+ layoutConfig : {columns : 2},
+ height : 63,
+ items : [{
+ width :500,
+ layout : 'column',
+ items:[{
+ columnWidth : .99,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ fieldLabel : '关键字',
+ xtype : 'combo',
+ id : 'comboDisposableGoods',
+ name : 'code',
+ queryParam : 'spell',
+ minChars : 0,
+ valueField : 'sourceId',
+ displayField : 'displayName',
+ store : allDiposableGoodsStore,
+ pageSize : 100,
+ width : 500,
+ listConfig: {width: 300},
+ forceSelection : true,
+ lazyInit : true,
+ triggerAction : 'all',
+ hideTrigger : true,
+ typeAhead : false,
+ allowBlank : true,
+ anchor : '97%',
+ listeners : {
+ select : function(combo, record, index) {
+ Ext.getCmp('comboDisposableGoods').setRawValue(record.data.name);
+ initQueryValueAndReload();
+ }
+ }
+ }]
+ }]
+ },{
+ width :300,
+ layout : 'column',
+ items : [{
+ columnWidth : .32,
+ layout :'form',
+ items : [{
+ xtype : 'button',
+ text : '查询',
+ minWidth : 70,
+ iconCls : 'icon_search',
+ handler : function() {
+ initQueryValueAndReload();
+ }
+ }]
+ },{
+ columnWidth : .32,
+ layout :'form',
+ items : [{
+ xtype : 'button',
+ text : '重置',
+ minWidth : 70,
+ iconCls : 'icon_set',
+ handler : function() {
+ Ext.getCmp('comboDisposableGoods').setValue("");
+ initQueryValueAndReload();
+ }
+ }]
+ },{
+ columnWidth : .36,
+ layout :'form',
+ items : [{
+ xtype : 'button',
+ text : '导入物资库存',
+ minWidth : 100,
+ iconCls : 'icon_set',
+ handler : function() {
+ //构造文件上传的widnow及formPanel
+ openFileImportWindow();
+ }
+ }]
+ }]
+ }]
+ });
+
+ var viewport = new Ext.Viewport( {
+ layout : 'border',
+ items : [form,{
+ region : 'center',
+ margins : '0 0 0 0',
+ layout : 'fit',
+ items : grid
+ }]
+ });
+});
\ No newline at end of file
Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GodownEntryAction.java
===================================================================
diff -u -r19154 -r20183
--- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GodownEntryAction.java (.../GodownEntryAction.java) (revision 19154)
+++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GodownEntryAction.java (.../GodownEntryAction.java) (revision 20183)
@@ -512,6 +512,18 @@
godownEntryManager.printSomeGodownEntryItem(items, jsonObj);
StrutsResponseUtils.output(jsonObj);
}
+
+ /**
+ * 仅修改入库明细的物品及批次相关的基础数据,不涉及单价、金额及修改
+ */
+ public void modifyGodownEntryItemBaseData(){
+ String items = StrutsParamUtils.getPraramValue("items", "");
+ JSONObject jsonObj = new JSONObject();
+ if(StringUtils.isNotBlank(items)){
+ godownEntryManager.modifyGodownEntryItemBaseData(items , jsonObj);
+ }
+ StrutsResponseUtils.output(jsonObj);
+ }
public String loadGodownEntry() {
String id = StrutsParamUtils.getPraramValue("id", "");
Index: ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/ReceiveRecordManagerImpl.java
===================================================================
diff -u -r19508 -r20183
--- ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/ReceiveRecordManagerImpl.java (.../ReceiveRecordManagerImpl.java) (revision 19508)
+++ ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/ReceiveRecordManagerImpl.java (.../ReceiveRecordManagerImpl.java) (revision 20183)
@@ -56,10 +56,13 @@
import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordItemWB;
import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordWB;
import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryRecord;
+import com.forgon.disinfectsystem.inventorymanagement.constant.gdsy.ConstantDefinition;
import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao;
import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper;
import com.forgon.disinfectsystem.receiverecord.util.ReceiveRecordUtils;
import com.forgon.disinfectsystem.vo.DisposableGoodsStorageAdjustVo;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
import com.forgon.tools.Path;
import com.forgon.tools.db.DatabaseUtil;
import com.forgon.tools.excel.ExcelCellStyle;
@@ -91,6 +94,8 @@
private WareHouseManager wareHouseManager;
+ private LogManager appLogManager;
+
private Logger logger = Logger.getLogger(ReceiveRecordManagerImpl.class);
public void setGoodsStockManager(GoodsStockManager goodsStockManager) {
@@ -123,6 +128,10 @@
this.objectDao = objectDao;
}
+ public void setAppLogManager(LogManager appLogManager) {
+ this.appLogManager = appLogManager;
+ }
+
@Override
public ReceiveRecord getReceiveRecordById(String id) {
return (ReceiveRecord) objectDao.getBySql(
@@ -456,10 +465,12 @@
+ "RECEIVE_ID_" + record.getId() + "";
xmlParam += writeBackInventoryDao.getXmlStringOfWriteBackDataDetailList(disposableGoodsStorageAdjustVoTotalList);
logger.debug("供应室领用回写参数xmlParam="+xmlParam);
- String result = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
- JSONObject jsonReturn = JSONObject.fromObject(result);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "供应室领用回写参数xmlParam="+xmlParam);
+ String writeBackResult = writeBackInventoryDao.insertWriteBackForCommon(xmlParam);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DISPOSABLEGOODS_WRITEBACK, Log.TYPE_ADD, "供应室领用回写参数xmlParam="+xmlParam+",对应的回写结果=" + writeBackResult);
+ JSONObject jsonReturn = JSONObject.fromObject(writeBackResult);
if(!jsonReturn.optBoolean("success")){
- throw new RuntimeException(jsonReturn.optString("message"));
+ throw new RuntimeException(ConstantDefinition.WRITEBACK_RESULTMESSAGE_PREFIX + jsonReturn.optString("message"));
}
}catch(Exception e){
e.printStackTrace();
Index: ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/inventorymanagement/gdsy/dao/InventoryDaoImpl.java
===================================================================
diff -u -r19508 -r20183
--- ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/inventorymanagement/gdsy/dao/InventoryDaoImpl.java (.../InventoryDaoImpl.java) (revision 19508)
+++ ssts-gdsy-misc/src/main/java/com/forgon/disinfectsystem/inventorymanagement/gdsy/dao/InventoryDaoImpl.java (.../InventoryDaoImpl.java) (revision 20183)
@@ -287,6 +287,7 @@
}
Long batchId = transfersetJsonObject.optLong("BATCHID");
+ //批次号
Object batchNumber = transfersetJsonObject.opt("ProductNo");
Object expDate = transfersetJsonObject.opt("ExpiredDate");
Object amount = transfersetJsonObject.opt("QUANTITY");
@@ -300,6 +301,10 @@
StorageEntryItem entryItem = new StorageEntryItem();
entryItem.setBatchNumber(batchNumber instanceof String ? (String)batchNumber : null);
+ //如果批次号为空,则默认为系统定义的空批次
+ if(StringUtils.isEmpty(entryItem.getBatchNumber())){
+ entryItem.setBatchNumber(WebServiceClientHelper.EMPTY_BATCHNO);
+ }
try {
entryItem.setExpDate(expDate instanceof String ? new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse((String)expDate).getTime()) : null);
//生产日期对应灭菌批号
@@ -348,22 +353,26 @@
JSONArray contentJsonArray = returnInfo.optJSONArray("Content");
if(contentJsonArray != null && contentJsonArray.size() > 0){
JSONObject contentJson = contentJsonArray.getJSONObject(0);
- String name = contentJson.optString("MATERIALNAME");
- String specification = contentJson.optString("MATERIALSPEC");
- String materialId = contentJson.optString("MATERIALID");
- String unit = contentJson.optString("UNIT");
+ Object name = contentJson.opt("MATERIALNAME");
+ Object specification = contentJson.opt("MATERIALSPEC");
+ Object materialId = contentJson.opt("MATERIALID");
+ Object unit = contentJson.opt("UNIT");
+ Object category = contentJson.opt("MaterialTypeFlag");
+ Object externalCode = contentJson.opt("MATERIALNO");//外部编码
Inventory vo = new Inventory();
- vo.setName(name);
- if(StringUtils.isNotBlank(specification)){
+ vo.setName(name != null && name instanceof String ? (String)name : null);
+ vo.setSpecification(specification != null && specification instanceof String ? (String)specification : null);
+ /*if(StringUtils.isNotBlank(vo.getSpecification())){
//防止规格为空返回的规格值为xml:space="preserve"
- if(!specification.startsWith("xml:space")){
+ if(!vo.getSpecification().startsWith("xml:space")){
vo.setSpecification(specification);
}
- }
- vo.setUnit(unit);
+ }*/
+ vo.setUnit(unit != null && unit instanceof String ? (String)unit : null);
//vo.setCost();//暂时为空
- vo.setSerialNumber(materialId);
- vo.setCategory(contentJson.optString("MaterialTypeFlag"));
+ vo.setSerialNumber(materialId != null && materialId instanceof String ? (String)materialId : null);
+ vo.setCategory(category != null && category instanceof String ? (String)category : null);
+ vo.setExternalCode(externalCode != null && externalCode instanceof String ? (String)externalCode : null);
return vo;
}
}
Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/constant/gdsy/ConstantDefinition.java
===================================================================
diff -u
--- ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/constant/gdsy/ConstantDefinition.java (revision 0)
+++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/inventorymanagement/constant/gdsy/ConstantDefinition.java (revision 20183)
@@ -0,0 +1,14 @@
+package com.forgon.disinfectsystem.inventorymanagement.constant.gdsy;
+
+/**
+ * 广东省医项目的常量,其它项目的常量可以创建对应的package
+ * @author shuyongfu
+ * @since 2017-09-28
+ *
+ */
+public class ConstantDefinition {
+ /**
+ * 回写返回消息的前缀
+ */
+ public final static String WRITEBACK_RESULTMESSAGE_PREFIX = "物资系统:";
+}