list = objectDao.getBySql_ForUpdate2(GoodsStock.class.getSimpleName(), sql);
return list;
}
- /**
- * 根据仓库下的包定义的id或者是材料定义的id获取库存信息。此方法可能会多返回一些记录,但这是些记录并不是你想要的。
- * 如要获取仓库1下的张三和仓库2下的李四,应该只会有两条记录返回。但是此方法的实现,可能还会返回仓库1下的李四和仓库2下的张三
- * @param wareHouseIds
- * @param goodsDefId 器械包定义或者是材料定义的id
- * @param toussedefIdOrMaterialDefId true为包定义id,false为材料定义id
- * @return
- */
@SuppressWarnings("unchecked")
- private List getGoodsStock(Collection wareHouseIds,Collection goodsDefId,boolean toussedefIdOrMaterialDefId){
+ public List getGoodsStock(Collection wareHouseIds,Collection goodsDefId,boolean toussedefIdOrMaterialDefId){
String wareHouseIdPredicate = SqlUtils.getNonStringFieldInCollectionsPredicate("wareHouseId", wareHouseIds);
String goodsDefIdPredicate = "";
String amountPredicate = " 1=1 ";
Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialItemManagerImpl.java
===================================================================
diff -u
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialItemManagerImpl.java (revision 0)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialItemManagerImpl.java (revision 14590)
@@ -0,0 +1,27 @@
+package com.forgon.disinfectsystem.returnmaterialrecord.service;
+
+import net.sf.json.JSONObject;
+
+import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialItem;
+
+public class ReturnMaterialItemManagerImpl implements ReturnMaterialItemManager {
+
+ @Override
+ public ReturnMaterialItem fromJson(JSONObject json) {
+ if(json == null){
+ return null;
+ }
+ ReturnMaterialItem item = new ReturnMaterialItem();
+ String tousseName = json.optString("materialName");
+ Long materialDefinitionId = json.optLong("materialDefinitionId");
+ Long amount = json.optLong("amount");
+ Double price = json.optDouble("price");
+
+ item.setMaterialDefinitionId(materialDefinitionId);
+ item.setMaterialName(tousseName);
+ item.setAmount(amount.intValue());
+ item.setPrice(price);
+ return item;
+ }
+
+}
Index: ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js
===================================================================
diff -u -r13953 -r14590
--- ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js (.../inventoryrecordView.js) (revision 13953)
+++ ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js (.../inventoryrecordView.js) (revision 14590)
@@ -25,12 +25,13 @@
};
InventoryRecordTableManager.addInventoryRecord(JSON.stringify(params),function(result){
+ var json = top.Ext.decode(result);
hideMessageBox(true);
grid.dwrReload();
- if(result){
+ if(json.success){
showResult("保存成功");
}else{
- showResult("保存失败!");
+ showResult(json.message);
}
});
}
Index: ssts-web/src/main/webapp/WEB-INF/dwr.xml
===================================================================
diff -u -r14297 -r14590
--- ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 14297)
+++ ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 14590)
@@ -283,6 +283,12 @@
+
+
+
+
+
+
Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/model/MaterialItemData.java
===================================================================
diff -u
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/model/MaterialItemData.java (revision 0)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/model/MaterialItemData.java (revision 14590)
@@ -0,0 +1,75 @@
+package com.forgon.disinfectsystem.returnmaterialrecord.model;
+
+import com.forgon.tools.MathTools;
+
+/**
+ * 从数据库中查找MaterialItem返回的数据记录
+ * @author kzh
+ *
+ */
+public class MaterialItemData {
+ private String name;
+ private Integer amount;
+ private Long materialDefinitionId;
+ private Double price;
+ private Long materialItemId;
+ private Integer returnedAmount; //materialItem的退货数量
+ private Integer newReturnedAmount; //materialItem新的退货数量,用于处理数据后更新数据库
+ private Long materialInvoiceItemId; //材料发货明细的id MaterialInvoiceItem的id
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public Integer getAmount() {
+ return amount;
+ }
+ public void setAmount(Integer amount) {
+ this.amount = amount;
+ }
+ public Long getMaterialDefinitionId() {
+ return materialDefinitionId;
+ }
+ public void setMaterialDefinitionId(Long materialDefinitionId) {
+ this.materialDefinitionId = materialDefinitionId;
+ }
+ public Double getPrice() {
+ return price;
+ }
+ public void setPrice(Double price) {
+ this.price = price;
+ }
+
+ public Long getMaterialItemId() {
+ return materialItemId;
+ }
+ public void setMaterialItemId(Long materialItemId) {
+ this.materialItemId = materialItemId;
+ }
+ public Integer getReturnedAmount() {
+ return returnedAmount;
+ }
+ public void setReturnedAmount(Integer returnedAmount) {
+ this.returnedAmount = returnedAmount;
+ }
+ public Integer getNewReturnedAmount() {
+ return newReturnedAmount;
+ }
+ public void setNewReturnedAmount(Integer newReturnedAmount) {
+ this.newReturnedAmount = newReturnedAmount;
+ }
+ public Long getMaterialInvoiceItemId() {
+ return materialInvoiceItemId;
+ }
+ public void setMaterialInvoiceItemId(Long materialInvoiceItemId) {
+ this.materialInvoiceItemId = materialInvoiceItemId;
+ }
+ /**
+ * 获取可以退货的数量
+ * @return
+ */
+ public int canReturnNum(){
+ return MathTools.sub(amount, newReturnedAmount).intValue();
+ }
+}
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java
===================================================================
diff -u -r13395 -r14590
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java (.../GoodsStockManager.java) (revision 13395)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java (.../GoodsStockManager.java) (revision 14590)
@@ -1,5 +1,6 @@
package com.forgon.disinfectsystem.basedatamanager.goodsstock.service;
+import java.util.Collection;
import java.util.List;
import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock;
@@ -34,5 +35,15 @@
* @return
*/
public List getGoodsStockList(GoodsStock goodsStock);
+ /**
+ * 根据仓库下的包定义的id或者是材料定义的id获取库存信息。此方法可能会多返回一些记录,但这是些记录并不是你想要的。
+ * 如要获取仓库1下的张三和仓库2下的李四,应该只会有两条记录返回。但是此方法的实现,可能还会返回仓库1下的李四和仓库2下的张三
+ * @param wareHouseIds
+ * @param goodsDefId 器械包定义或者是材料定义的id
+ * @param toussedefIdOrMaterialDefId true为包定义id,false为材料定义id
+ * @return
+ */
+ public List getGoodsStock(Collection wareHouseIds,
+ Collection goodsDefId,boolean toussedefIdOrMaterialDefId);
}
Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/action/ReturnMaterialRecordAction.java
===================================================================
diff -u
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/action/ReturnMaterialRecordAction.java (revision 0)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/action/ReturnMaterialRecordAction.java (revision 14590)
@@ -0,0 +1,140 @@
+package com.forgon.disinfectsystem.returnmaterialrecord.action;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Namespace;
+import org.apache.struts2.convention.annotation.ParentPackage;
+
+import com.forgon.directory.acegi.tools.AcegiHelper;
+import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsItem;
+import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialItem;
+import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialRecord;
+import com.forgon.disinfectsystem.returnmaterialrecord.service.ReturnMaterialItemManager;
+import com.forgon.disinfectsystem.returnmaterialrecord.service.ReturnMaterialRecordManager;
+import com.forgon.tools.StrutsParamUtils;
+import com.forgon.tools.StrutsResponseUtils;
+import com.forgon.tools.json.JSONUtil;
+import com.opensymphony.xwork2.ModelDriven;
+import com.opensymphony.xwork2.Preparable;
+
+/**
+ * 材料退货
+ * @author kzh
+ *
+ */
+@ParentPackage(value = "default")
+@Namespace(value = "/disinfectSystem")
+@Action(value = "returnMaterialRecordAction")
+public class ReturnMaterialRecordAction implements ModelDriven,Preparable{
+ private ReturnMaterialRecord returnMaterialRecord;
+ private ReturnMaterialRecordManager returnMaterialRecordManager;
+ private ReturnMaterialItemManager returnMaterialItemManager;
+
+ public void setReturnMaterialRecordManager(
+ ReturnMaterialRecordManager returnMaterialRecordManager) {
+ this.returnMaterialRecordManager = returnMaterialRecordManager;
+ }
+
+ public void setReturnMaterialItemManager(
+ ReturnMaterialItemManager returnMaterialItemManager) {
+ this.returnMaterialItemManager = returnMaterialItemManager;
+ }
+
+ /**
+ * 保存材料退货记录
+ */
+ public void save(){
+ JSONObject json = JSONUtil.buildJsonObject(false, "保存失败");
+ try {
+ // 设置退货时间
+ Date returnTime = null;
+ try {
+ SimpleDateFormat dateFormat = new SimpleDateFormat(
+ "yyyy-MM-dd HH:mm");
+ String returnTimeStr = StrutsParamUtils.getPraramValue(
+ "returnTime", null);
+ returnTime = dateFormat.parse(returnTimeStr);
+ } catch (ParseException e1) {
+ }
+ if (returnTime == null)
+ returnTime = new Date();
+ returnMaterialRecord.setReturnTime(returnTime);
+ String handleDepartCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig();
+ returnMaterialRecord.setHandleDepartCode(handleDepartCode);
+
+ List returnGoodsItems = new ArrayList();
+ returnMaterialRecord.setReturnMaterialItems(returnGoodsItems);
+
+ // 拿到页面的退货明细
+ String returnGoodsDetails = StrutsParamUtils.getRequest().getParameter("returnMaterialItems");
+
+ if (StringUtils.isBlank(returnGoodsDetails)) {
+ throw new RuntimeException("退货明细不能为空!");
+ }
+ //
+ JSONArray itemsArray = JSONArray.fromObject(returnGoodsDetails);
+ int size = itemsArray.size();
+ for (int i = 0; i < size; ++i) {
+ JSONObject obj = itemsArray.getJSONObject(i);
+ if(obj == null){
+ throw new RuntimeException("退货明细参数错误!");
+ }
+ ReturnMaterialItem item = returnMaterialItemManager.fromJson(obj);
+ item.setReturnMaterialRecord(returnMaterialRecord);
+
+ returnGoodsItems.add(item);
+
+ }
+ returnMaterialRecordManager
+ .save_TRANS_REQUIRED(returnMaterialRecord);
+ JSONUtil.addSuccess(json, true);
+ JSONUtil.addMessage(json, "保存成功");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ JSONUtil.addMessage(json, ex.getMessage());
+ }
+ StrutsResponseUtils.output(json);
+ }
+
+ public void loadReturnMaterialItem(){
+ String id = StrutsParamUtils.getPraramValue("id", "");
+ JSONArray array = new JSONArray();
+ if (StringUtils.isNotBlank(id)) {// 初始化加载的数据
+ returnMaterialRecord = returnMaterialRecordManager.get(id);
+ List returnGoodsItems = returnMaterialRecord.getReturnMaterialItems();
+ for (ReturnMaterialItem returnGoodsItem : returnGoodsItems) {
+ try {
+ JSONObject json = new JSONObject();
+ json.put("id", returnGoodsItem.getId());
+ json.put("materialName", returnGoodsItem.getMaterialName());
+ json.put("amount", returnGoodsItem.getAmount());
+ json.put("price", returnGoodsItem.getPrice());
+ json.put("materialDefinitionId", returnGoodsItem.getMaterialDefinitionId());
+ json.put("settlementPrice", returnGoodsItem.getSettlementPrice());
+ array.add(json);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ StrutsResponseUtils.output(array);
+ }
+ @Override
+ public ReturnMaterialRecord getModel() {
+ return returnMaterialRecord;
+ }
+
+ @Override
+ public void prepare() throws Exception {
+ returnMaterialRecord = new ReturnMaterialRecord();
+ }
+}
Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialItemManager.java
===================================================================
diff -u
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialItemManager.java (revision 0)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialItemManager.java (revision 14590)
@@ -0,0 +1,9 @@
+package com.forgon.disinfectsystem.returnmaterialrecord.service;
+
+import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialItem;
+
+import net.sf.json.JSONObject;
+
+public interface ReturnMaterialItemManager {
+ public ReturnMaterialItem fromJson(JSONObject json);
+}
Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/dwr/table/InventoryRecordTableManager.java
===================================================================
diff -u -r13387 -r14590
--- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/dwr/table/InventoryRecordTableManager.java (.../InventoryRecordTableManager.java) (revision 13387)
+++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/dwr/table/InventoryRecordTableManager.java (.../InventoryRecordTableManager.java) (revision 14590)
@@ -13,6 +13,7 @@
import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse;
import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryRecord;
import com.forgon.disinfectsystem.inventoryrecord.service.InventoryRecordManager;
+import com.forgon.tools.json.JSONUtil;
import com.forgon.tools.util.SqlUtils;
/**
@@ -71,12 +72,15 @@
}
// 创建盘点记录
- public boolean addInventoryRecord(String params) {
+ public String addInventoryRecord(String params) {
+ boolean success = false;
+ String message = null;
try {
inventoryRecordManager.addInventoryRecord(params);
+ success = true;
} catch (Exception e) {
- return false;
+ message = e.getMessage();
}
- return true;
+ return JSONUtil.buildJsonObject(success, message).toString();
}
}
Index: ssts-web/src/main/webapp/disinfectsystem/returnMaterialRecord/returnMaterialRecordForm.js
===================================================================
diff -u
--- ssts-web/src/main/webapp/disinfectsystem/returnMaterialRecord/returnMaterialRecordForm.js (revision 0)
+++ ssts-web/src/main/webapp/disinfectsystem/returnMaterialRecord/returnMaterialRecordForm.js (revision 14590)
@@ -0,0 +1,776 @@
+
+function setReturnMaterialRecordForm(result){
+ var returnGoodsRecord = top.Ext.decode(result);
+ if(returnGoodsRecord.success){
+ top.Ext.getCmp("id").setValue(returnGoodsRecord.id);
+ top.Ext.getCmp("operator").setValue(returnGoodsRecord.operator);
+ top.Ext.getCmp("depart").setValue(returnGoodsRecord.depart);
+ top.Ext.getCmp("returnTime").setValue(returnGoodsRecord.returnTime);
+// Ext.getCmp("signStatus").setValue(returnGoodsRecord.signStatus);
+ top.Ext.getCmp("remark").setValue(returnGoodsRecord.remark);
+ top.Ext.getCmp("returnOfPeople").setValue(returnGoodsRecord.returnOfPeople);
+ top.Ext.getCmp("departCoding").setValue(returnGoodsRecord.departCoding);
+// top.Ext.getCmp("totalMoney").setValue(returnGoodsRecord.settlementPrice);
+// var warehouse = top.Ext.getCmp("warehouse");
+// if(warehouse != null){
+// warehouse.setValue(returnGoodsRecord.warehouseName);
+// }
+ }
+}
+
+function removeGridItem(){
+ var totalMoney = 0.0;
+ var rows = top.Ext.getCmp('returnGoodsItemGrid').getSelectionModel().getSelections();// 返回值为
+ if (rows) {
+ for ( var i = 0; i < rows.length; i++) {
+ returnGoodsItemStore.remove(rows[i]);
+ }
+ }
+ setTotalMoney();
+}
+
+function addAndEditReturnMaterialRecord(id, enableBtn){
+ function setTotalMoney() {
+ var totalMoney = 0.0;
+ returnGoodsItemStore.each(function(record){
+ totalMoney = accAdd(totalMoney,accMul(record.data.price,record.data.amount));
+ totalMoney = (totalMoney).toFixed(2);
+ top.Ext.getCmp("totalMoney").setValue(totalMoney);
+ });
+ }
+
+ function checkAmount(amount,canReturnAmout){
+ if(parseInt(amount) > parseInt(canReturnAmout)){
+ showResult('退货数量不能大于可退货数量');
+ return false;
+ }
+ return true;
+ }
+ // 添加材料
+ function onAddMaterialClick(){
+ var count = top.Ext.getCmp("count1").getValue();
+ var materialDefId = top.Ext.getCmp('selectedMaterialDefId').getValue();
+ var index = materialStore.find("id",materialDefId);
+ if(index == -1){
+ showResult('请选择材料');
+ return;
+ }
+ var price = top.Ext.getCmp("combo_price").getValue();
+ if(price+'' == ''){
+ showResult('请选择价格!');
+ return;
+ }
+ var priceAmount = null;
+ var index = priceStore.find('price', price);
+ if(index == -1){
+ showResult('请选择价格!');
+ return;
+ }
+ priceAmount = priceStore.getAt(index).data;
+
+ var amountCanReturn = priceAmount.sentAmount - priceAmount.returnedAmount;
+ var material = materialStore.getAt(index);
+ if(!checkAmount(count,amountCanReturn)){
+ return;
+ }
+ var materialItem = new addReturnMaterialItem({
+ id:0,
+ materialName:material.data.name,
+ amount:count,
+ price:price,
+ amountCanReturn:amountCanReturn,
+ materialDefinitionId:materialDefId
+ });
+
+ returnGoodsItemStore.add(materialItem);
+ setTotalMoney();
+ }
+
+ var editableConfig = {editable:false};
+ editableConfig.editable = enableBtn;
+ //材料store
+ var materialStore = new Ext.data.Store({
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/baseData/materialDefinitionAction!getMaterialDataForReturnMaterial.do',
+ method : 'POST'
+ }),
+ reader : new Ext.data.JsonReader({
+ totalProperty : 'totalCount',
+ root : 'data'
+ }, [
+ {name : 'id',mapping : 'id'},
+ {name : 'name',mapping : 'name'},
+ {name : 'displayName',mapping : 'displayName'},
+ {name : 'spelling',mapping : 'spelling'},
+ {name : 'storage',mapping : 'storage'}
+ ]),
+ listeners : {
+ beforeload : function(store,option) {
+ store.baseParams['departCoding'] = getCurrentDepartCoding();
+ }
+ }
+ });
+
+ var departJsonStore = new Ext.data.Store({
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!getAllOrgUnitName.do',
+ method : 'POST'
+ }),
+ reader : new Ext.data.JsonReader({
+ root : 'data'
+ },[
+ {name : 'id',mapping : 'id'},
+ {name : 'name',mapping : 'name'}
+ ]
+ )
+ });
+
+ var addReturnMaterialItem = Ext.data.Record.create([{name : 'id'},
+ {name : 'materialName'},
+ {name : 'amount'},
+ {name : 'price'},
+ {name : 'amountCanReturn'},
+ {name : 'materialDefinitionId'},
+ {name : 'settlementPrice'}]);
+
+ //该退货记录已经录入的退货详细信息
+ var dataReader = new Ext.data.JsonReader({
+ fields : [
+ {name : 'id'},
+ {name : 'materialName'},
+ {name : 'price'},
+ {name : 'amount'},
+ {name : 'materialDefinitionId'},
+ {name : 'settlementPrice'}
+ ]
+ });
+
+ //初始化加载器械包
+ returnGoodsItemStore = new Ext.data.Store({
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/returnMaterialRecordAction!loadReturnMaterialItem.do',
+ method : 'POST'
+ }),
+ reader : dataReader,
+ listeners : {
+ load : function() {
+ setTotalMoney();
+ }
+ }
+ });
+
+ var wareHouseStore = new Ext.data.Store({
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/baseData/wareHouseAction!getCSSDWareHouseData.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) {
+ var id = top.Ext.getCmp('warehouseId').getValue();
+ var name = top.Ext.getCmp('warehouseName').getValue();
+ if(records.length > 0 && (id == null || id == '')){
+ id=records[0].data.id;
+ name = records[0].data.name;
+ }
+ top.Ext.getCmp('warehouse').setValue(id);
+ top.Ext.getCmp('warehouseId').setValue(id);
+ top.Ext.getCmp('warehouseName').setValue(name);
+ }
+ }
+ });
+
+ var priceStore = new Ext.data.Store({
+ reader : new Ext.data.JsonReader({
+ fields : [
+ {name : 'price'},
+ {name : 'sentAmount'},
+ {name : 'returnedAmount'}
+ ]
+ })
+ });
+ var PriceRecord = Ext.data.Record.create([
+ {name : 'price'},
+ {name : 'sentAmount'},
+ {name : 'returnedAmount'}
+ ]);
+
+ //清空价格
+ function clearPrice() {
+ priceStore.removeAll();
+ top.Ext.getCmp("combo_price").setValue('');
+ }
+
+ // 设置价格
+ function setPrices(prices) {
+ priceStore.removeAll();
+ top.Ext.getCmp("combo_price").setValue('');
+ if(typeof(prices) == 'undefined' || prices == null){
+ return;
+ }
+ for(var i = 0;i 0){
+ top.Ext.getCmp("combo_price").setValue(prices[0].price);
+ }
+ }
+
+ // 获取当前部门编码
+ function getCurrentDepartCoding(){
+ return top.Ext.getCmp('departCoding').getValue();
+ }
+ //获取当前部门
+ function getCurrentDepart(){
+ return top.Ext.getCmp('depart').getValue();
+ }
+ // 器械包,科室退货人为空时才能更改退货人科室
+ function loadPeopleByStaffNum(staffNumField){
+ var staffNum = staffNumField.getValue();
+ if(staffNum){
+ UserTableManager.getUserObjByName(staffNum,function(user){
+ if(user){
+ var fullName = user.split(",")[0];
+ var orgUnitNames = user.split(",")[1];
+ var orgUnitCodes = user.split(",")[2];
+ top.Ext.getCmp('returnOfPeople').setValue(fullName);//设置退货人
+ var currentDepart = getCurrentDepart();
+ var currentDepartCoding = getCurrentDepartCoding();
+ var resetDepart = true;
+ if(currentDepart != '' || currentDepartCoding != ''){
+ resetDepart = false;
+ }
+ if(resetDepart){
+ if(orgUnitNames){
+ var orgUnitName = orgUnitNames.split(';')[0];//如果有多个,默认拿第一个,当前系统只有一个;
+ top.Ext.getCmp('depart').setValue(orgUnitName.substring(orgUnitName.lastIndexOf("-")+1));//设置科室
+ }
+ if(orgUnitCodes){
+ var orgUnitCode = orgUnitCodes.split(';')[0];
+ top.Ext.getCmp('departCoding').setValue(orgUnitCode);//科室代码
+ }
+ }
+
+ }else{
+ showResult('找不到该员工号所对应的人员信息');
+ top.Ext.getCmp('returnOfPeople').setValue();
+ top.Ext.getCmp('depart').setValue();
+ top.Ext.getCmp('departCoding').setValue();
+ }
+ updateGoodsComboStatus();
+ });
+ }
+ staffNumField.setValue();
+ }
+
+ function updateGoodsComboStatus(){
+ var departcoding = getCurrentDepartCoding();
+ var disable = false;
+ if(isUndefinedOrNullOrEmpty(departcoding)){
+ disable = true;
+ }
+ top.Ext.getCmp('package1').setDisabled(disable);
+ }
+
+ //获取grid的数据
+ function getReturnGoodsDetailGridData() {
+ var returnGoodsDetails = buildJSONStringFromStore(returnGoodsItemStore);
+ //alert(returnGoodsDetails);
+ top.Ext.getCmp('returnMaterialItems').setValue(returnGoodsDetails);
+ }
+ /**
+ * 精确计算arg1和arg2的和
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ function accAdd(arg1,arg2){
+ var r1,r2,m;
+ try{r1=arg1.toString().split(".")[1].length;}catch(e){r1=0;}
+ try{r2=arg2.toString().split(".")[1].length;}catch(e){r2=0;}
+ m=Math.pow(10,Math.max(r1,r2));
+ return (arg1*m+arg2*m)/m;
+ }
+ /**
+ * 精确计算arg1和arg2的乘积
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ function accMul(arg1,arg2) {
+ arg1 = arg1+'';
+ arg2 = arg2+'';
+// alert('arg1='+arg1+',arg2='+arg2)
+ var m=0,s1=arg1.toString(),s2=arg2.toString();
+ try{m+=s1.split(".")[1].length;}catch(e){}
+ try{m+=s2.split(".")[1].length;}catch(e){}
+ return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
+ }
+ //计算行总价
+ function rowTotalRender(value, cellmeta, record, rowIndex, columnIndex, store) {
+ return accMul(record.data.price,record.data.amount);
+ }
+ var cmArr = new Array(new Ext.grid.RowNumberer(),
+ {id : 'autoWidth',header : "物品",dataIndex : 'materialName',width : 180,menuDisabled:true},
+ {header : "数量",width : 50,dataIndex : 'amount',menuDisabled:true,
+ editor : new top.Ext.form.NumberField({
+ allowBlank : false,
+ disabled:!enableBtn,
+ allowNegative : false,
+ style : 'text-align: left',
+ allowDecimals : false
+ })
+ },
+ {header : "可退货数量",width : 120,dataIndex : 'amountCanReturn',menuDisabled:true},
+ {header : "单价",width : 120,dataIndex : 'price',menuDisabled:true},
+ {header : "金额",width : 60,dataIndex : 'rowTotal',renderer:rowTotalRender,menuDisabled:true},
+ {header : '删除',dataIndex:'button',width:60,menuDisabled:true,
+ renderer: function(v,p,record){
+ var str = '';
+ if(editableConfig.editable){
+ str = "
";
+ }
+
+ return str;
+ }
+ });
+
+ var cm = new top.Ext.grid.ColumnModel(cmArr);
+
+ if(id == 0){//添加
+ returnGoodsItemStore.removeAll();
+ }else{//修改
+ returnGoodsItemStore.on("beforeload", function(thiz, options) {
+ thiz.baseParams["id"] = id;
+ });
+ returnGoodsItemStore.load();
+ }
+
+ /*var deptStore = new Ext.data.SimpleStore({
+ fields : [ 'departName','departCoding' ],
+ url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!getAllOrgUnitName.do'
+ });*/
+
+ form = new top.Ext.FormPanel({
+ id : 'returnGoodsRecordForm',
+ frame : true,
+ border : 0,
+ labelSeparator : ':',
+ bodyStyle : 'padding:5px 5px 0px 5px',
+ width : 600,
+ labelAlign:'right',
+ autoHeight : true,
+ autoScroll : true,
+ items : [{
+ xtype:"fieldset",
+ layout:'column',
+ title :'退货记录信息',
+ autoHeight:true,
+ items:[{
+ layout : 'column',
+ items : [{
+ xtype : 'hidden',
+ name : 'id',
+ id : 'id'
+ },{
+ xtype : 'hidden',
+ name : 'returnMaterialItems',
+ id : 'returnMaterialItems'
+ },{
+ xtype : 'hidden',
+ name : 'departCoding',
+ id : 'departCoding'
+ },{
+ xtype : 'hidden',
+ name : 'warehouseId',
+ id : 'warehouseId'
+ },{
+ xtype : 'hidden',
+ name : 'warehouseName',
+ id : 'warehouseName'
+ },{
+ xtype:'hidden',
+ name:'selectedMaterialDefId',
+ id:'selectedMaterialDefId'
+ },{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 80,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '操作人',
+ maxLength : '16',
+ id : 'operator',
+ name : 'operator',
+ allowBlank : false,
+ value : $Id('userName').value,
+ anchor : '80%',
+ readOnly : true,
+ cls:'fieldReadOnlyNoRemove'
+ }]
+ }, {
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 70,
+ items : [{
+ xtype : 'datefieldWithMin',
+ fieldLabel : '时间',
+ id : 'returnTime',
+ name : 'returnTime',
+ editable:false,
+ disabled:!editableConfig.editable,
+ allowBlank: false,
+ format:'Y-m-d H:i',
+ value: new Date(),
+ anchor : '80%'
+ }]
+ }, {
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 80,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '退货人员工号',
+ id : 'returnOfPeopleBarcode',
+ name : 'returnOfPeopleBarcode',
+ disabled:!editableConfig.editable,
+ allowBlank : true,
+ listeners : {
+ specialkey : function(field,e){
+ if(e.getKey() == 13){
+ loadPeopleByStaffNum(field);
+ }
+ }
+ },
+ anchor : '80%'
+ }]
+ } ,{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 70,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '退货人',
+ id : 'returnOfPeople',
+ name : 'returnOfPeople',
+ allowBlank : true,
+ anchor : '80%',
+ readOnly : true,
+ cls:'x-item-disabled'
+ }]
+ } , {
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 80,
+ items : [{
+ xtype : 'combo',
+ id : 'depart',
+ name : 'depart',
+ disabled:!editableConfig.editable,
+ queryParam : 'spell',
+ fieldLabel : '退货人科室',
+ queryParam : 'spell',
+ minChars : 0,
+ valueField : 'name',
+ displayField : 'name',
+ anchor : '80%',
+ store : departJsonStore,
+ forceSelection : true,
+ lazyInit : true,
+ triggerAction : 'all',
+ hideTrigger : true,
+ typeAhead : false,
+ allowBlank : false,
+ listeners :{
+ select:function(combo, record, index ){
+ var tem = record.data.id;
+ top.Ext.getCmp('departCoding').setValue(tem);
+ updateGoodsComboStatus();
+ }
+ }
+ }]
+ } ,{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 70,
+ items:[{
+ xtype : 'combo',
+ fieldLabel : '退货仓库',
+ id : 'warehouse',
+ name : 'warehouse',
+ minChars : 0,
+ valueField : 'id',
+ displayField : 'name',
+ store : wareHouseStore,
+ forceSelection : true,
+ lazyInit : false,
+ triggerAction : 'all',
+ hideTrigger : true,
+ typeAhead : false,
+ allowBlank : false,
+ width : 100,
+ listeners : {
+ select : function(combo, record, index) {
+ top.Ext.getCmp('warehouse').setValue(record.data.name);
+ top.Ext.getCmp('warehouseId').setValue(record.data.id);
+ top.Ext.getCmp('warehouseName').setValue(record.data.name);
+ top.Ext.getCmp('remark').focus();
+ },
+ specialkey : function(field, ee) {
+ if (ee.getKey() == Ext.EventObject.ENTER) {
+ top.Ext.getCmp('remark').focus();
+ }
+ }
+ }
+ }]
+ },{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 80,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '总金额',
+ maxLength : '16',
+ id : 'totalMoney',
+ name : 'totalMoney',
+ anchor : '80%',
+ readOnly : true,
+ cls:'x-item-disabled'
+ }]
+ },{
+ columnWidth : 1,
+ layout : 'form',
+ labelWidth : 80,
+ items : [{
+ xtype : 'textarea',
+ height : 45,
+ fieldLabel : '备注',
+ id : 'remark',
+ name : 'remark',
+ disabled:!editableConfig.editable,
+ allowBlank : true,
+ anchor : '90%'
+ }]
+ }]
+ }]
+ },{
+ xtype:"fieldset",
+ layout:'column',
+ title :'退货记录明细',
+ autoHeight:true,
+ items:[{
+ layout : 'form',
+ columnWidth : 1,
+ items :[new top.Ext.grid.EditorGridPanel({
+ id : 'returnGoodsItemGrid',
+ store : returnGoodsItemStore,
+ bodyStyle : 'border:1px solid #afd7af',
+ cm : cm,
+ width :720,
+ height : 270,
+ autoExpandColumn : 'autoWidth',
+ border : true,
+ frame : false,
+ viewConfig: {
+ forceFit:true
+ },
+ clicksToEdit : 1,// 设置点击几次才可编辑
+ selModel : new top.Ext.grid.RowSelectionModel({
+ singleSelect : false
+ }),
+ tbar : new top.Ext.Panel({
+ border: false,
+ items:[{
+ xtype: 'toolbar',
+ items: [{
+ text : '物品名称 :'
+ },{
+ disabled:!enableBtn,
+ xtype : 'combo',
+ id : 'package1',
+ name : 'package1',
+ queryParam : 'spell',
+ minChars : 0,
+ valueField : 'id',
+ displayField : 'displayName',
+ width : 200,
+ store : materialStore,
+ forceSelection : true,
+ lazyInit : true,
+ triggerAction : 'all',
+ hideTrigger : true,
+ emptyText : '材料的拼音码、五笔码或者名称',
+ typeAhead : false,
+ allowBlank : true,
+ disabled:true,
+ anchor : '97%',
+ listeners : {
+ select : function(combo, record, index) {
+ top.Ext.getCmp('package1').setValue();
+ var depart = getCurrentDepart();
+ if(depart == ''){
+ showResult("必须先填写部门!");
+ return ;
+ }
+ var warehouseId = top.Ext.getCmp("warehouseId").getValue();
+ if(isUndefinedOrNullOrEmpty(warehouseId)){
+ showResult('请先选择仓库!');
+ return ;
+ }
+ ReturnMaterialRecordTableManager.loadMaterialPriceAmountInfoCanReturned(
+ getCurrentDepartCoding(),record.data.id,warehouseId,function(priceAmountList){
+ if(priceAmountList != null){
+ setPrices(priceAmountList);
+ }
+ });
+ top.Ext.getCmp('package1').setValue(record.data.name);
+ top.Ext.getCmp('selectedMaterialDefId').setValue(record.data.id);
+ },
+ specialkey : function(field, ee) {
+ if (ee.getKey() == Ext.EventObject.ENTER) {
+ top.Ext.getCmp('count1').focus();
+ }
+ }
+ }
+ },{
+ text : '单价 :'
+ },{
+ xtype : 'combo',
+ id : 'combo_price',
+ name : 'combo_price',
+ valueField : 'price',
+ displayField : 'price',
+ store : priceStore,
+ editable : false,
+ forceSelection : true,
+ mode : 'local',
+ triggerAction : 'all',
+ typeAhead : false,
+ allowBlank : false,
+ width : 150,
+ anchor : '95%',
+ disabled:!enableBtn
+ },{
+ text : '数量 :'
+ },{
+ xtype : 'numberfield',
+ id : 'count1',
+ name : 'count1',
+ style : 'text-align: left',
+ anchor : '95%',
+ width : 50,
+ disabled:!enableBtn,
+ allowNegative : false,
+ allowDecimals : false,
+ listeners : {
+ specialkey : function(field, ee) {
+ if (ee.getKey() == Ext.EventObject.ENTER) {
+ onAddMaterialClick();
+ }
+ }
+ }
+ },
+ {
+ text : '添加',
+ iconCls : 'btn_ext_add',
+ disabled:!enableBtn,
+ handler : function() {
+ onAddMaterialClick();
+ }
+ }]
+ }]
+ }),
+ listeners:{
+ afteredit : function(e) {
+ if(!checkAmount(e.value,e.record.data.amountCanReturn)){
+ var col = e.field;//获取被修改的列
+ var originalValue = e.originalValue;//获取原始值
+ e.record.set(col,originalValue); //将单元格数据返回以前值,record为当前行数据集
+ }else{
+ setTotalMoney();
+ }
+ }
+ }
+ })]
+ }]
+ }],
+ buttonAlign :'center',
+ buttons : [{
+ text : '保存',
+ id : 'saveBtn',
+ hidden:SSTS_ReturnGoodsRecord_Create && SSTS_ReturnGoodsRecord_Update,
+ disabled:!enableBtn,
+ handler : function(){
+ top.Ext.MessageBox.confirm("请确认","是否保存"+ entityName + "信息?",function(btn) {
+ if(btn=='yes') {
+ if(!form.getForm().isValid()){
+ showResult('请正确填写表单各值');
+ return false;
+ }
+// if(top.Ext.getCmp('returnOfPeople').getValue().length<1){
+// showResult('退货人信息不能为空');
+// return false;
+// }
+
+ if(returnGoodsItemStore.getCount()<1){
+ showResult('退货详细信息列表不能为空');
+ return false;
+ }
+
+ //获取grid数据
+ getReturnGoodsDetailGridData();
+ top.Ext.getCmp("depart").enable();
+ /*top.Ext.getCmp('returnOfPeople').setDisabled(false);
+ top.Ext.getCmp('depart').setDisabled(false);*/
+// return false;
+ form.form.submit({
+ url : WWWROOT + '/disinfectSystem/returnMaterialRecordAction!save.do',
+ method : 'POST',
+ waitMsg : '正在保存数据,请稍候',
+ waitTitle : '提交表单',
+ success : function(form, action) {
+ showResult(action.result.message);
+ if(action.result.success){
+ top.Ext.getCmp('returnGoodsRecordWin').close();
+ grid.dwrReload();
+ }
+ },
+ failure : function(form, action) {
+ top.Ext.getCmp("depart").disable();// 禁止修改科室
+ showResult(action.result.message);
+ }
+ });
+ }
+ });
+ }
+ },{
+ text : '取消',
+ handler : function() {
+ top.Ext.getCmp('returnGoodsRecordWin').close();
+ }
+ }]
+ });
+
+ var win = new top.Ext.Window({
+ id : 'returnGoodsRecordWin',
+ layout : 'fit',
+ title : entityName + '信息',
+ width : 780,
+ modal : true,
+// autoHeight : true,
+ border : false,
+ height:580,
+ plain : true,
+ items : [ form ]
+ });
+ win.show();
+}
\ No newline at end of file
Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialRecordManagerImpl.java
===================================================================
diff -u
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialRecordManagerImpl.java (revision 0)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returnmaterialrecord/service/ReturnMaterialRecordManagerImpl.java (revision 14590)
@@ -0,0 +1,360 @@
+package com.forgon.disinfectsystem.returnmaterialrecord.service;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import com.forgon.directory.acegi.tools.AcegiHelper;
+import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager;
+import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager;
+import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse;
+import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock;
+import com.forgon.disinfectsystem.entity.invoicemanager.MaterialInvoice;
+import com.forgon.disinfectsystem.entity.invoicemanager.MaterialInvoiceItem;
+import com.forgon.disinfectsystem.entity.invoicemanager.MaterialItem;
+import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialItem;
+import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialRecord;
+import com.forgon.disinfectsystem.returngoodsrecord.service.ReturnGoodsItemVO;
+import com.forgon.disinfectsystem.returnmaterialrecord.model.MaterialItemData;
+import com.forgon.tools.MathTools;
+import com.forgon.tools.SqlBuilder;
+import com.forgon.tools.db.DatabaseUtil;
+import com.forgon.tools.db.InitDbConnection;
+import com.forgon.tools.hibernate.ObjectDao;
+import com.forgon.tools.string.StringTools;
+
+public class ReturnMaterialRecordManagerImpl implements
+ ReturnMaterialRecordManager {
+
+ private ObjectDao objectDao;
+ private GoodsStockManager goodsStockManager;
+ private WareHouseManager wareHouseManager;
+ private InitDbConnection dbConnection;
+ public void setObjectDao(ObjectDao objectDao) {
+ this.objectDao = objectDao;
+ }
+ public void setGoodsStockManager(GoodsStockManager goodsStockManager) {
+ this.goodsStockManager = goodsStockManager;
+ }
+ public void setWareHouseManager(WareHouseManager wareHouseManager) {
+ this.wareHouseManager = wareHouseManager;
+ }
+ public void setDbConnection(InitDbConnection dbConnection) {
+ this.dbConnection = dbConnection;
+ }
+ @Override
+ public ReturnMaterialRecord get(String returnMaterialRecordId) {
+ if(DatabaseUtil.isPoIdValid(returnMaterialRecordId)){
+ return (ReturnMaterialRecord) objectDao
+ .getByProperty(ReturnMaterialRecord.class.getSimpleName(), "id",
+ Long.valueOf(returnMaterialRecordId));
+ }
+ return null;
+ }
+ @SuppressWarnings("unchecked")
+ @Override
+ public void save_TRANS_REQUIRED(
+ ReturnMaterialRecord returnMaterialRecord) {
+ if(returnMaterialRecord == null){
+ throw new RuntimeException("退货单不能为空");
+ }
+ if(CollectionUtils.isEmpty(returnMaterialRecord.getReturnMaterialItems())){
+ throw new RuntimeException("请选择退货物品");
+ }
+ objectDao.saveOrUpdate(returnMaterialRecord);
+
+ Set materialDefIds = new HashSet();
+ List clinicwareHouseIds = wareHouseManager.getWareHouseIdsByUnitCode(returnMaterialRecord.getDepartCoding());
+ List handleDepartWareHoouseIds = new ArrayList();//wareHouseManager.getWareHouseIdsByUnitCode(returnMaterialRecord.getHandleDepartCode());
+ handleDepartWareHoouseIds.add(returnMaterialRecord.getWarehouseId());
+ for(ReturnMaterialItem item : returnMaterialRecord.getReturnMaterialItems()){
+ if(DatabaseUtil.isPoIdValid(item.getMaterialDefinitionId())){
+ materialDefIds.add(item.getMaterialDefinitionId());
+ }
+ }
+ //临床的库存数据
+ List clinicGoodsStocks = goodsStockManager.getGoodsStock(clinicwareHouseIds, materialDefIds, false);
+ //供应室库存数据
+ List cssdGoodsStocks = goodsStockManager.getGoodsStock(handleDepartWareHoouseIds, materialDefIds, false);
+ List invoiceMaterialItems = getInvoiceMaterialItem(materialDefIds, clinicwareHouseIds,
+ handleDepartWareHoouseIds);
+ if(CollectionUtils.isEmpty(invoiceMaterialItems)){
+ throw new RuntimeException("没有找到当前科室的发货数据");
+ }
+ Set materialItemIds = new HashSet();
+ if(CollectionUtils.isNotEmpty(invoiceMaterialItems)){
+ for(MaterialItemData item : invoiceMaterialItems){
+ if(DatabaseUtil.isPoIdValid(item.getMaterialItemId())){
+ materialItemIds.add(item.getMaterialItemId());
+ }
+ }
+ }
+ String sql = " where id in ( " + StringTools.join(materialItemIds, ",") + " ) ";
+ System.out.println(sql);
+ List materialItemInDB = objectDao.getBySql_ForUpdate2(MaterialItem.class.getSimpleName(), sql );
+
+ returnMaterialRecord.setSettlementPrice(0.0);
+ for(ReturnMaterialItem rmi : returnMaterialRecord.getReturnMaterialItems()){
+ Integer returnAmount = rmi.getAmount();
+ List curInvoiceMaterialItems = findMaterialItem(invoiceMaterialItems, rmi.getMaterialDefinitionId(),rmi.getPrice());
+ if(CollectionUtils.isEmpty(curInvoiceMaterialItems)){
+ throw new RuntimeException(String.format("未找到材料%s(单价:%f)的发货数据",rmi.getMaterialName(),rmi.getPrice()));
+ }
+ BigDecimal settlementPrice = null;
+ while(returnAmount > 0){
+ for(MaterialItemData mItem : curInvoiceMaterialItems){
+ int canReturnAmount = mItem.canReturnNum();
+ if(canReturnAmount <= 0){
+ continue;
+ }
+ int curReturnAmount = Math.min(returnAmount, canReturnAmount);
+ mItem.setNewReturnedAmount(MathTools.add(mItem.getNewReturnedAmount(),curReturnAmount).intValue());
+
+ subClinicGoodsStock(returnMaterialRecord,
+ clinicGoodsStocks, rmi, mItem, curReturnAmount);
+
+ addCssdGoodsStock(returnMaterialRecord,cssdGoodsStocks,mItem,curReturnAmount);
+ addMaterialItemReturnAmout(materialItemInDB,mItem.getMaterialItemId(),curReturnAmount);
+ returnAmount = MathTools.sub(returnAmount, curReturnAmount).intValue();
+ settlementPrice = MathTools.add(settlementPrice, MathTools.mul(mItem.getPrice(), curReturnAmount));
+ }
+ }
+ rmi.setSettlementPrice(settlementPrice);
+ rmi.setWarehouseId(returnMaterialRecord.getWarehouseId());
+ rmi.setWarehouseName(returnMaterialRecord.getWarehouseName());
+ returnMaterialRecord.setSettlementPrice(MathTools.add(returnMaterialRecord.getSettlementPrice(), settlementPrice).doubleValue());
+ objectDao.saveOrUpdate(rmi);
+ }
+ objectDao.saveOrUpdate(returnMaterialRecord);
+ }
+ private void addMaterialItemReturnAmout(List materialItemInDB,Long materialItemId,int curReturnAmount){
+ MaterialItem mi = CollectionUtils.find(materialItemInDB, new Predicate(){
+ @Override
+ public boolean evaluate(MaterialItem object) {
+ if(materialItemId.equals(object.getId())){
+ return true;
+ }
+ return false;
+ }
+ });
+ if(mi != null){
+ mi.setReturnedAmount(MathTools.add(mi.getReturnedAmount(), curReturnAmount).intValue());
+ objectDao.saveOrUpdate(mi);
+ }
+ }
+ private void addCssdGoodsStock(ReturnMaterialRecord returnMaterialRecord,List cssdGoodsStocks,
+ MaterialItemData mItem,int curReturnAmount){
+ GoodsStock gs = CollectionUtils.find(cssdGoodsStocks, new Predicate(){
+ @Override
+ public boolean evaluate(GoodsStock object) {
+ if(mItem.getMaterialDefinitionId().equals(object.getMaterialDefinitionId())
+ && mItem.getPrice().equals(object.getPrice())){
+ return true;
+ }
+ return false;
+ }
+
+ });
+ if(gs== null){
+ gs = new GoodsStock();
+ WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(returnMaterialRecord.getHandleDepartCode());
+ gs.setMaterialDefinitionId(mItem.getMaterialDefinitionId());
+ gs.setGoodsType(GoodsStock.TYPE_MATERIAL);
+ gs.setName(mItem.getName());
+ gs.setOrgUnitCode(wareHouse.getOrgUnitCode());
+ gs.setOrgUnitName(wareHouse.getOrgUnitName());
+ gs.setPrice(mItem.getPrice());
+ gs.setWareHouseId(wareHouse.getId());
+ gs.setWareHouseName(wareHouse.getName());
+ }
+ gs.setAmount(MathTools.add(gs.getAmount(), curReturnAmount).intValue());
+ objectDao.saveOrUpdate(gs);
+ }
+ /**
+ * 材料退货时扣减临床的库存
+ * @param returnMaterialRecord
+ * @param clinicGoodsStocks
+ * @param rmi
+ * @param mItem
+ * @param curReturnAmount
+ */
+ private void subClinicGoodsStock(ReturnMaterialRecord returnMaterialRecord,
+ List clinicGoodsStocks, ReturnMaterialItem rmi,
+ MaterialItemData mItem, int curReturnAmount) {
+ int goodsStockAmountForModify = curReturnAmount;
+ while(goodsStockAmountForModify > 0){
+ int amountModified = 0;
+ GoodsStock gs = CollectionUtils.find(clinicGoodsStocks, new Predicate(){
+ @Override
+ public boolean evaluate(GoodsStock object) {
+ if(rmi.getMaterialDefinitionId().equals(object.getMaterialDefinitionId())
+ && object.getAmount() > 0
+ && mItem.getPrice().equals(object.getPrice())){
+ return true;
+ }
+ return false;
+ }
+
+ });
+ if(gs== null){
+ throw new RuntimeException(rmi.getMaterialName() + "的库存不足");
+ }
+ if(gs.getAmount() < goodsStockAmountForModify){
+ goodsStockAmountForModify -= gs.getAmount();
+ amountModified = gs.getAmount();
+ gs.setAmount(0);
+ }else{
+ amountModified = goodsStockAmountForModify;
+ gs.setAmount(gs.getAmount() - goodsStockAmountForModify);
+ goodsStockAmountForModify = 0;
+ }
+ objectDao.saveOrUpdate(gs);
+
+ MaterialItem mi = new MaterialItem();
+ mi.setAmount(amountModified);
+ mi.setGoodsStockId(gs.getId());
+ mi.setMaterialDefinitionId(mItem.getMaterialDefinitionId());
+ mi.setName(mItem.getName());
+ mi.setPrice(mItem.getPrice());
+ mi.setReturnMaterialItemID(rmi.getId());
+ mi.setMaterialInvoiceItemID(mItem.getMaterialInvoiceItemId());
+ mi.setReturnMaterialRecordID(returnMaterialRecord.getId());
+ objectDao.saveOrUpdate(mi);
+ }
+ }
+ private List findMaterialItem(List sourceList,Long materialDefId,Double price){
+ List retList = new ArrayList();
+ if(CollectionUtils.isNotEmpty(sourceList) && materialDefId != null && price != null){
+ for(MaterialItemData mi:sourceList){
+ if(materialDefId.equals(mi.getMaterialDefinitionId()) && price.equals(mi.getPrice())){
+ retList.add(mi);
+ }
+ }
+ }
+ return retList;
+ }
+ /**
+ * 获取发货单关联的MaterialItem
+ * @param materialDefIds
+ * @param clinicwareHouseIds
+ * @param handleDepartWareHoouseIds
+ * @return
+ */
+ private List getInvoiceMaterialItem(Set materialDefIds,
+ List clinicwareHouseIds, List handleDepartWareHoouseIds) {
+ String materialDefIdsSql = StringTools.join(materialDefIds, ",");
+ String handleDepartWareHoouseIdsSql = StringTools.join(handleDepartWareHoouseIds, ",");
+ String clinicwareHouseIdsSql = StringTools.join(clinicwareHouseIds, ",");
+ String sql = "select mii.id materialInvoiceItemId, mi.id materialItemId,mi.returnedAmount, mi.name,mi.materialDefinitionId,mi.price,mi.amount"
+ + " from " + MaterialItem.class.getSimpleName() + " mi "
+ + " inner join " + MaterialInvoice.class.getSimpleName() + " invoice "
+ + " on invoice.id = mi.materialInvoice_id "
+ + " inner join " + MaterialInvoiceItem.class.getSimpleName() + " mii "
+ + " on mii.id = mi.materialInvoiceItemID "
+ + " where mi.materialDefinitionId in (" + materialDefIdsSql + ")"
+ + " and invoice.sourceWarehouseId in (" + handleDepartWareHoouseIdsSql + ")"
+ + " and invoice.warehouseId in (" + clinicwareHouseIdsSql + ")"
+ + " and (mi.amount > mi.returnedAmount or mi.returnedAmount is null)"
+ + " order by invoice.sendTime desc";
+
+
+ ResultSet rs = objectDao.executeSql(sql);
+ List invoiceMaterialItems = new ArrayList(); //查询到的数据库中发货单的MaterialItem数据
+ try {
+ while(rs.next()){
+ long materialDefinitionId = rs.getLong("materialDefinitionId");
+ long materialItemId = rs.getLong("materialItemId");
+ long materialInvoiceItemId = rs.getLong("materialInvoiceItemId");
+ double price = rs.getDouble("price");
+ int amount = rs.getInt("amount");
+ String name = rs.getString("name");
+ Integer returnedAmount = rs.getInt("returnedAmount");
+ //按材料定义id及价格及发货项的id查询
+ MaterialItemData find = CollectionUtils.find(invoiceMaterialItems, new Predicate(){
+ @Override
+ public boolean evaluate(MaterialItemData mi) {
+ if(mi.getMaterialDefinitionId().equals(materialDefinitionId)
+ && mi.getPrice().equals(price)
+ && mi.getMaterialItemId().equals(materialItemId)){
+ return true;
+ }
+ return false;
+ }
+ });
+ if(find == null){
+ find = new MaterialItemData();
+ invoiceMaterialItems.add(find);
+ find.setMaterialDefinitionId(materialDefinitionId);
+ find.setName(name);
+ find.setPrice(price);
+ find.setMaterialItemId(materialItemId);
+ find.setMaterialInvoiceItemId(materialInvoiceItemId);
+ find.setReturnedAmount(returnedAmount);
+ find.setNewReturnedAmount(returnedAmount);
+ }
+ find.setAmount(MathTools.add(find.getAmount(), amount).intValue());
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }finally {
+ DatabaseUtil.closeResultSetAndStatement(rs);
+ }
+ return invoiceMaterialItems;
+ }
+
+ public List loadMaterialPriceAmountInfoCanReturned(
+ String departCoding,String materialDefId,String sourceWareHouseId){
+ StringBuilder sql = new StringBuilder();
+ List priceAmountList = new LinkedList();
+
+ String isNullFunction = DatabaseUtil.getSqlIsNullFunctionName(dbConnection);
+
+ sql.append(String
+ .format("select m.price, sum(%s(m.amount,0)) as sumAmount, sum(%s(m.returnedAmount,0)) as sumReturnedAmount from "
+ + MaterialInvoice.class.getSimpleName() + " i inner join "
+ + MaterialItem.class.getSimpleName() + " m on i.id = m.materialInvoice_id "
+ + " where m.materialDefinitionId=%s and %s(m.amount,0)>%s(m.returnedAmount,0) and m.goodsStockId is not null ",
+ isNullFunction,
+ isNullFunction,materialDefId,isNullFunction,isNullFunction));
+ sql.append(" and i.departCoding = '" + departCoding + "'");// 限定部门
+// sql.append(" and i.orgUnitCoding='" + AcegiHelper.getCurrentOrgUnitCode() + "'");
+ sql.append(" and i.sourceWarehouseId=" + sourceWareHouseId );
+ sql.append(" group by m.price");
+ System.out.println(sql);
+ ResultSet resultSet = objectDao.executeSql(sql.toString());
+ try {
+ while (resultSet.next()) {
+ Long sumAmount = resultSet.getLong("sumAmount");
+ Long sumReturnedAmount = resultSet.getLong("sumReturnedAmount");
+ Double price = resultSet.getDouble("price");
+
+ if(sumAmount <= sumReturnedAmount){
+ continue;
+ }
+ ReturnGoodsItemVO.PriceAmount priceAmount = new ReturnGoodsItemVO.PriceAmount();
+ priceAmount.setPrice(price);
+ priceAmount.setFluctuationPrice(price);
+ priceAmount.setReturnedAmount(sumReturnedAmount);
+ priceAmount.setSentAmount(sumAmount);
+ priceAmountList.add(priceAmount);
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }finally {
+ DatabaseUtil.closeResultSetAndStatement(resultSet);
+ }
+
+ return priceAmountList;
+ }
+}
Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java
===================================================================
diff -u -r14422 -r14590
--- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 14422)
+++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 14590)
@@ -220,7 +220,7 @@
public String loadReturnGoodsItemById() {
String id = StrutsParamUtils.getPraramValue("id", "");
- String jsonStr = null;
+ JSONArray array = new JSONArray();
if (StringUtils.isNotBlank(id)) {// 初始化加载的数据
returnGoodsRecord = returnGoodsRecordManager.getById(id);
List returnGoodsItems = returnGoodsRecord
@@ -234,45 +234,23 @@
.getBatchNumber();
}
try {
- if (StringUtils.isBlank(jsonStr)) {
- jsonStr = "{id : '" + returnGoodsItem.getId()
- + "',tousseName : '"
- + returnGoodsItem.getTousseName()
- + "',amount :'" + returnGoodsItem.getAmount()
- + "',barcode : '" + barcode
- + "',isDelivery : '"
- + returnGoodsItem.getIsDelivery()
- + "',batchNumber : '" + batchNumber
- + "',price : " + returnGoodsItem.getPrice()
- + ",expDate : '" + returnGoodsItem.getExpDate()
- + "',fluctuationPrice : '"
- + returnGoodsItem.getFluctuationPrice() + "'}";
- } else {
- jsonStr = jsonStr + "," + "{id : '"
- + returnGoodsItem.getId() + "',tousseName : '"
- + returnGoodsItem.getTousseName()
- + "',amount :'" + returnGoodsItem.getAmount()
- + "',barcode : '" + barcode
- + "',isDelivery : '"
- + returnGoodsItem.getIsDelivery()
- + "',batchNumber:'" + batchNumber
- + "',price : " + returnGoodsItem.getPrice()
- + ",expDate : '" + returnGoodsItem.getExpDate()
- + "',fluctuationPrice : '"
- + returnGoodsItem.getFluctuationPrice() + "'}";
- }
+ JSONObject json = new JSONObject();
+ json.put("id", returnGoodsItem.getId());
+ json.put("tousseName", returnGoodsItem.getTousseName());
+ json.put("amount", returnGoodsItem.getAmount());
+ json.put("barcode", barcode);
+ json.put("isDelivery", returnGoodsItem.getIsDelivery());
+ json.put("batchNumber", batchNumber);
+ json.put("price", returnGoodsItem.getPrice());
+ json.put("expDate", returnGoodsItem.getExpDate());
+ json.put("fluctuationPrice", returnGoodsItem.getFluctuationPrice());
+ array.add(json);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- try {
- StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8");
- StrutsParamUtils.getResponse().getWriter()
- .println("[" + jsonStr + "]");
- } catch (IOException e) {
- e.printStackTrace();
- }
+ StrutsResponseUtils.output(array);
return null;
}
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/returnmaterialrecord/ReturnMaterialRecord.java
===================================================================
diff -u -r13070 -r14590
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/returnmaterialrecord/ReturnMaterialRecord.java (.../ReturnMaterialRecord.java) (revision 13070)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/returnmaterialrecord/ReturnMaterialRecord.java (.../ReturnMaterialRecord.java) (revision 14590)
@@ -17,13 +17,15 @@
import javax.persistence.Table;
import javax.persistence.Transient;
+import org.apache.commons.collections4.CollectionUtils;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Cascade;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.forgon.disinfectsystem.entity.invoicemanager.Invoice;
import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication;
+import com.forgon.tools.MathTools;
/**
* @author shuyongfu
@@ -51,13 +53,15 @@
private String handleDepartCode;//退回科室编码(一二级供应室编码)
+ private Double settlementPrice;
+
/**
- * 仓库ID
+ * 供应室仓库ID
*/
private Long warehouseId;
/**
- * 仓库名称
+ * 供应室仓库名称
*/
private String warehouseName;
@@ -184,4 +188,23 @@
this.srcWarehouseName = srcWarehouseName;
}
+ public Double getSettlementPrice() {
+ if(settlementPrice == null){
+ calculateSettlementPrice();
+ }
+ return settlementPrice;
+ }
+
+ public void setSettlementPrice(Double settlementPrice) {
+ this.settlementPrice = settlementPrice;
+ }
+
+ public void calculateSettlementPrice(){
+ if(CollectionUtils.isNotEmpty(returnMaterialItems)){
+ settlementPrice = 0.0;
+ for(ReturnMaterialItem item:returnMaterialItems){
+ settlementPrice = MathTools.add(item.getSettlementPrice(),settlementPrice).doubleValue();
+ }
+ }
+ }
}
Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml
===================================================================
diff -u -r14297 -r14590
--- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 14297)
+++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 14590)
@@ -1074,6 +1074,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
wareHouseIds = new ArrayList();
+ if(DatabaseUtil.isPoIdValid(warehouseId)){
+ wareHouseIds.add(warehouseId);
+ }
List