Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java =================================================================== diff -u -r21034 -r21044 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java (.../ExpensiveGoodsInstance.java) (revision 21034) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsInstance.java (.../ExpensiveGoodsInstance.java) (revision 21044) @@ -120,9 +120,13 @@ private Date expDate; /** - * 发票id + * 高值耗材发票单id */ private Long expensiveGoodsBillId; + /** + * 高值耗材发票明细id + */ + private Long expensiveGoodsBillItemId; /** * 位于使用记录的顺序号 @@ -136,7 +140,14 @@ public static final String ENTRY_TYPE_PURCHASE = "自购入库"; public static final String ENTRY_TYPE_PREPARE = "预入库"; - + public Long getExpensiveGoodsBillItemId() { + return expensiveGoodsBillItemId; + } + + public void setExpensiveGoodsBillItemId(Long expensiveGoodsBillItemId) { + this.expensiveGoodsBillItemId = expensiveGoodsBillItemId; + } + public Long getExpensiveGoodsBillId() { return expensiveGoodsBillId; } Index: forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java =================================================================== diff -u -r20814 -r21044 --- forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 20814) +++ forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 21044) @@ -18,6 +18,7 @@ public class DateTools { public final static String COMMON_DATE_HMS = "yyyy-MM-dd HH:mm:ss"; + public final static String COMMON_DATE_T = "yyyy-MM-dd'T'HH:mm:ss"; public final static String COMMON_DATE_HM = "yyyy-MM-dd HH:mm"; public final static String COMMON_TIME_HM = "HH:mm"; public final static String COMMON_DATE_PATTEN = "yyyy-MM-dd "; Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManagerImpl.java =================================================================== diff -u -r21038 -r21044 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManagerImpl.java (.../ExpensiveGoodsBillManagerImpl.java) (revision 21038) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManagerImpl.java (.../ExpensiveGoodsBillManagerImpl.java) (revision 21044) @@ -12,6 +12,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import net.sf.json.JSONObject; @@ -39,6 +40,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchaseItem; import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan; +import com.forgon.disinfectsystem.expensivegoods.ExpensiveGoodsServiceContext; import com.forgon.disinfectsystem.vo.GodownEntryItemPrintVO; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; @@ -61,7 +63,6 @@ @Service("expensiveGoodsBillManagerTarget") public class ExpensiveGoodsBillManagerImpl extends BasePoManagerImplimplements ExpensiveGoodsBillManager { - private ObjectDao objectDao; private SerialNumManager serialNumManager; @@ -71,9 +72,6 @@ this.expensiveGoodsManager = expensiveGoodsManager; } - public void setObjectDao(ObjectDao objectDao) { - this.objectDao = objectDao; - } public void setSerialNumManager(SerialNumManager serialNumManager) { this.serialNumManager = serialNumManager; @@ -153,7 +151,7 @@ ExpensiveGoodsBill bill, Map returnMsg) { // 锁定并获取发票单 - ExpensiveGoodsBill curExpensiveGoodsBill = getExpensiveGoodsBillById_ForUpdate(original.getId().toString()); +/* ExpensiveGoodsBill curExpensiveGoodsBill = getExpensiveGoodsBillById_ForUpdate(original.getId().toString()); if(curExpensiveGoodsBill == null){ // 发票单已被删除 throw new RuntimeException("高值耗材发票单已被删除!"); @@ -269,84 +267,110 @@ if(originalSettledTime != null && !originalSettledTime.equals(settledTime)){ curExpensiveGoodsBill.setTime(settledTime); } - // 供应商 - String originalSupplierId = original.getSupplierId(); - String SupplierId = bill.getSupplierId(); - if(originalSupplierId != null && !originalSupplierId.equals(SupplierId)){ - //是否可以修改供应商? - } +// // 供应商 +// String originalSupplierId = original.getSupplierId(); +// String SupplierId = bill.getSupplierId(); +// if(originalSupplierId != null && !originalSupplierId.equals(SupplierId)){ +// } + */ } + + /** + * 保存发票 + */ @Override public void saveExpensiveGoodsBill(ExpensiveGoodsBill expensiveGoodsBill, Map result) { - //核对发票单 - List expensiveGoodsBillItemList = expensiveGoodsBill.getItems(); - List expensiveGoodsInstanceList = new ArrayList(); - for (ExpensiveGoodsBillItem expensiveGoodsBillItem : expensiveGoodsBillItemList) { - + //用于汇总各发票细单中高值耗材的实例对象 + Map> idToExpensiveGoodsInstanceMap = new HashMap>(); + //核对发票单并汇总高值耗材实例 + checkExpensiveGoodsBill(expensiveGoodsBill,idToExpensiveGoodsInstanceMap); + //保存发票单 + this.save(expensiveGoodsBill); + //修改高值耗材实例 + List itemList = expensiveGoodsBill.getItems(); + for (int i = 0; i < itemList.size(); ++i) { + ExpensiveGoodsBillItem billItem = itemList.get(i); + Long expensiveGoodsId = billItem.getExpensiveGoodsId(); + Long expensiveGoodsBillItemId = billItem.getId(); + //根据高值耗材id获得汇总的高值耗材实例对象 + List GoodsInstanceList = idToExpensiveGoodsInstanceMap.get(expensiveGoodsId); + for (ExpensiveGoodsInstance expensiveGoodsInstance : GoodsInstanceList) { + //高值耗材实例状态改为以结算 + expensiveGoodsInstance.setStatus(ExpensiveGoodsInstance.STATUS_SETTLED); + //高值耗材实例的发票单id赋值 + expensiveGoodsInstance.setExpensiveGoodsBillId(expensiveGoodsBill.getId()); + //高值耗材实例的发票明细id赋值 + expensiveGoodsInstance.setExpensiveGoodsBillItemId(expensiveGoodsBillItemId); + objectDao.update(expensiveGoodsInstance); + } + } + } + //核对发票单并汇总高值耗材实例 + private void checkExpensiveGoodsBill( + ExpensiveGoodsBill expensiveGoodsBill,Map> idToExpensiveGoodsInstanceMap){ + List billItemList = expensiveGoodsBill.getItems(); + for (ExpensiveGoodsBillItem expensiveGoodsBillItem : billItemList){ String goodName = expensiveGoodsBillItem.getGoodsName();//拼接后的名字 Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId();//高值耗材物品定义id Long amount = expensiveGoodsBillItem.getAmount();//数量 - //根据高值耗材id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例 String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'", expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE); - expensiveGoodsInstanceList = objectDao.findBySql( + List instanceList = objectDao.findBySql( ExpensiveGoodsInstance.class.getSimpleName(),sql); - Long usedAmount = (long) expensiveGoodsInstanceList.size(); + if(CollectionUtils.isNotEmpty(instanceList)){ + //若查到的为空则默认数量为0 + Long usedAmount = (long)0; + } + Long usedAmount = (long) instanceList.size(); //判断已使用的预入库高值耗材实例数量是否大于等于结算数量 if( MathTools.sub(usedAmount,amount).intValue()<0){ throw new IllegalArgumentException("物品:"+goodName+"预入库已使用数量为:"+usedAmount+" 小于结算数量:"+amount+"!"); } - } - //保存发票单 - objectDao.saveOrUpdate(expensiveGoodsBill); - //修改高值耗材实例 - for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) { - expensiveGoodsInstance.setStatus(ExpensiveGoodsInstance.STATUS_SETTLED);//状态改为以结算 - expensiveGoodsInstance.setExpensiveGoodsBillId(expensiveGoodsBill.getId());//高值耗材实例的发票单id赋值 - } + //汇总高值耗材实例 + List expensiveGoodsInstanceList = new ArrayList(); + for (int i = 0; i < amount; i++) { + ExpensiveGoodsInstance expensiveGoodsInstance = instanceList.get(i); + expensiveGoodsInstanceList.add(expensiveGoodsInstance); + } + //根据发票明细的高值耗材定义id汇总高值耗材实例集合 + idToExpensiveGoodsInstanceMap.put(expensiveGoodsId, expensiveGoodsInstanceList); + } } - //核对发票单 - private void checkExpensiveGoodsBill(ExpensiveGoodsBill expensiveGoodsBill){ - List expensiveGoodsBillItemList = expensiveGoodsBill.getItems(); - for (ExpensiveGoodsBillItem expensiveGoodsBillItem : expensiveGoodsBillItemList) { - checkExpensiveGoodsBillItem(expensiveGoodsBillItem); - } - } - //核对发票明细 - private void checkExpensiveGoodsBillItem(ExpensiveGoodsBillItem expensiveGoodsBillItem){ - String goodName = expensiveGoodsBillItem.getGoodsName(); - Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId(); - Long amount = expensiveGoodsBillItem.getAmount(); - //根据高值耗材id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例 - String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'", - expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE); - List expensiveGoodsInstanceList = objectDao.findBySql( - ExpensiveGoodsInstance.class.getSimpleName(),sql); - Long usedAmount = (long) expensiveGoodsInstanceList.size(); - //判断已使用的预入库高值耗材实例数量是否大于等于结算数量 - if( MathTools.sub(usedAmount,amount).intValue()<0){ - throw new IllegalArgumentException("物品:"+goodName+"预入库已使用数量为:"+usedAmount+" 小于结算数量:"+amount+"!"); - } - } - //通过发票明细修改高值耗材实例 - private void changeExpensiveGoodsInstance( - ExpensiveGoodsBillItem expensiveGoodsBillItem, - Long expensiveGoodsBillId){ - Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId(); - //根据高值耗材物品id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例 - String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'", - expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE); - List expensiveGoodsInstanceList = objectDao.findBySql( - ExpensiveGoodsInstance.class.getSimpleName(),sql); - - for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) { - expensiveGoodsInstance.setStatus(ExpensiveGoodsInstance.STATUS_SETTLED);//状态改为以结算 - expensiveGoodsInstance.setExpensiveGoodsBillId(expensiveGoodsBillId);//高值耗材实例的发票单id赋值 - } - } +// //核对发票明细 +// private void checkExpensiveGoodsBillItem(ExpensiveGoodsBillItem expensiveGoodsBillItem){ +// String goodName = expensiveGoodsBillItem.getGoodsName(); +// Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId(); +// Long amount = expensiveGoodsBillItem.getAmount(); +// //根据高值耗材id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例 +// String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'", +// expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE); +// List expensiveGoodsInstanceList = objectDao.findBySql( +// ExpensiveGoodsInstance.class.getSimpleName(),sql); +// Long usedAmount = (long) expensiveGoodsInstanceList.size(); +// //判断已使用的预入库高值耗材实例数量是否大于等于结算数量 +// if( MathTools.sub(usedAmount,amount).intValue()<0){ +// throw new IllegalArgumentException("物品:"+goodName+"预入库已使用数量为:"+usedAmount+" 小于结算数量:"+amount+"!"); +// } +// } +// //通过发票明细修改高值耗材实例 +// private void changeExpensiveGoodsInstance( +// ExpensiveGoodsBillItem expensiveGoodsBillItem, +// Long expensiveGoodsBillId){ +// Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId(); +// //根据高值耗材物品id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例 +// String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'", +// expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE); +// List expensiveGoodsInstanceList = objectDao.findBySql( +// ExpensiveGoodsInstance.class.getSimpleName(),sql); +//// +//// for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) { +//// expensiveGoodsInstance.setStatus(ExpensiveGoodsInstance.STATUS_SETTLED);//状态改为以结算 +//// expensiveGoodsInstance.setExpensiveGoodsBillId(expensiveGoodsBillId);//高值耗材实例的发票单id赋值 +//// } +// } @Override public void updateBillInfo(ExpensiveGoodsBill bill,JSONObject billInfo) { @@ -374,8 +398,8 @@ Date time; Date settledTime; try { - time = new SimpleDateFormat(DateTools.COMMON_DATE_ONLY).parse(timeStr); - settledTime = new SimpleDateFormat(DateTools.COMMON_DATE_ONLY).parse(settledTimeStr); + time = new SimpleDateFormat(DateTools.COMMON_DATE_T).parse(timeStr); + settledTime = new SimpleDateFormat(DateTools.COMMON_DATE_T).parse(settledTimeStr); } catch (ParseException e) { e.printStackTrace(); throw new RuntimeException("日期格式错误!"); Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBillView.js =================================================================== diff -u -r21038 -r21044 --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBillView.js (.../expensiveGoodsBillView.js) (revision 21038) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBillView.js (.../expensiveGoodsBillView.js) (revision 21044) @@ -267,9 +267,9 @@ top.Ext.getCmp("totalPrice").setValue(Ext.util.Format.usMoney(totalMoney)); } function renderTotalPrice(val,p,record){ - var amount = Ext.num(parseFloat(record.data.scheduleAmount),0.0); - var cost = Ext.num(parseFloat(record.data.price),0.0); - var total = Ext.util.Format.usMoney(cost*amount); + var amount = Ext.num(parseFloat(record.data.amount),0.0); + var price = Ext.num(parseFloat(record.data.price),0.0); + var total = Ext.util.Format.usMoney(price*amount); return total; } @@ -531,21 +531,20 @@ {header : "名称",dataIndex : 'name',width : 200,menuDisabled : true}, {header : "供应商",dataIndex : 'supplierName',width : 150,menuDisabled : true}, {header : "单价",dataIndex : 'price',width : 150,menuDisabled : true}, - {header : "数量",width : 120,dataIndex : 'amount',menuDisabled : true, + {header : "数量",dataIndex : 'amount',width : 140,menuDisabled : true, editor : new top.Ext.form.TextField({ - regex: /^\d+$/, + regex: /^\d+$/, regexText:'只能输入数字', allowBlank : false, listeners:{ change :function(field,newVal,oldVal){ -// alert(newVal) // var grid = top.Ext.getCmp('goodBillItemGrid'); // setTotalMoney(grid); } } - }) + }) }, - {header : "金额",dataIndex : 'totalPrice',width : 120,menuDisabled : true}, + {header : "金额",width : 70,menuDisabled : true,dataIndex : 'totalPrice', renderer:renderTotalPrice}, {header : "删除",width : 70,menuDisabled : true,dataIndex : 'deleteButton', renderer:renderDeleteButton , hidden: (id == ""?false:true)} ]), width :983, @@ -956,16 +955,17 @@ } }, '-', { text : '打印', - hidden : false, + hidden : true, + //hidden : false, iconCls : 'icon_print', handler : function() { var records = grid.getSelectionModel().getSelections(); if (records.length == 0) { - showResult("请选择要打印的采购计划单!"); + showResult("请选择要打印的高值耗材发票单!"); return; } if (records.length != 1) { - showResult("一次只能打印1个采购计划单!"); + showResult("一次只能打印1个高值耗材发票单!"); return; } var ids = null; @@ -976,7 +976,7 @@ ids = ids + ',' + records[i].data['id']; } } - top.Ext.MessageBox.confirm("请确认", "要打印选择的采购计划单吗?", + top.Ext.MessageBox.confirm("请确认", "要打印选择的高值耗材发票单吗?", function(btn) { if (btn == 'yes') { printGoodPurchasePlan(ids,0); @@ -990,11 +990,11 @@ handler : function() { var records = grid.getSelectionModel().getSelections(); if (records.length == 0) { - showResult("请选择要导出的采购计划单!"); + showResult("请选择要导出的高值耗材发票单!"); return; } if (records.length != 1) { - showResult("一次只能导出1个采购计划单!"); + showResult("一次只能导出1个高值耗材发票单!"); return; } var ids = null;