Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GoodPurchaseAction.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GoodPurchaseAction.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/GoodPurchaseAction.java (revision 12562) @@ -0,0 +1,553 @@ +package com.forgon.disinfectsystem.diposablegoods.action; + +import java.io.IOException; +import java.io.PrintWriter; +import java.text.ParseException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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.Constants; +import com.forgon.component.grid.GridManager; +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.service.OrgUnitManager; +import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; +import com.forgon.disinfectsystem.diposablegoods.service.GoodPurchasePlanManager; +import com.forgon.disinfectsystem.diposablegoods.service.IdentificationOfDiposableGoodsManager; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodBatchStock; +import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; +import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchaseItem; +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan; +import com.forgon.tools.MapTools; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.json.JSONUtil; +import com.opensymphony.xwork2.ModelDriven; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "goodPurchaseAction") +public class GoodPurchaseAction implements ModelDriven { + + private GridManager gridManager; + private OrgUnitManager orgUnitManager; + private GoodPurchasePlan goodPurchasePlan = new GoodPurchasePlan(); + + private GoodPurchasePlanManager goodPurchasePlanManager; + + private DiposableGoodBatchStockManager diposableGoodBatchStockManager; + + private DateQueryAdapter dateQueryAdapter; + private IdentificationOfDiposableGoodsManager identificationOfDiposableGoodsManager; + + public IdentificationOfDiposableGoodsManager getIdentificationOfDiposableGoodsManager() { + return identificationOfDiposableGoodsManager; + } + + public void setIdentificationOfDiposableGoodsManager( + IdentificationOfDiposableGoodsManager identificationOfDiposableGoodsManager) { + this.identificationOfDiposableGoodsManager = identificationOfDiposableGoodsManager; + } + + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + + + public void setGoodPurchasePlan(GoodPurchasePlan goodPurchasePlan) { + this.goodPurchasePlan = goodPurchasePlan; + } + + public void setDiposableGoodBatchStockManager( + DiposableGoodBatchStockManager diposableGoodBatchStockManager) { + this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; + } + + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + + public void setGoodPurchasePlanManager( + GoodPurchasePlanManager goodPurchasePlanManager) { + this.goodPurchasePlanManager = goodPurchasePlanManager; + } + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + + /*@SuppressWarnings("unchecked") + public String viewGodownEntryList() { + HttpServletRequest request = StrutsParamUtils.getRequest(); + Map map = MapTools.convertRequestParamMap(request + .getParameterMap()); + + String sql = "where 1=1"; + + String json = gridManager.renderGrid2(map, + GodownEntry.class.getSimpleName(), sql, null); + + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setCharacterEncoding("UTF-8"); + PrintWriter out; + try { + out = response.getWriter(); + out.print(json); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + }*/ + + /** + * 保存退库单 页面上的item只会记批次和价格,但是后台会记对应的标识号对象。这样方便以后的价格同步与删除出库单等操作 + */ + /*public void saveGodownOutEntry() { + + HttpServletResponse response = StrutsParamUtils.getResponse(); + PrintWriter out = null; + String result = "保存成功"; + response.setCharacterEncoding("UTF-8"); + Map returnMsg = new HashMap(); + returnMsg.put("success", false); + returnMsg.put("errMsg", "保存失败"); + try { + out = response.getWriter(); + } catch (IOException e) { + e.printStackTrace(); + } + boolean saveResult = false; + try { + String id = StrutsParamUtils.getPraramValue("id", ""); + + GoodPurchasePlan original = new GoodPurchasePlan(); + GoodPurchasePlan entry = goodPurchasePlan; + + if (StringUtils.isNotBlank(id)) { + // 更新入库单,里面的item有可能会更新,新建,删除标识号。 + buildGodownEntryParamsForUpdate(original, entry); + + goodPurchasePlanManager.updateGodownOutEntry_TRANS_REQUIRED(original, entry, returnMsg); + } else { + // 保存入库单,里面的item一定都是新建标识号对象,并且需要更新批次属性。 + entry = godownEntry; + buildGodownEntryParamsForSave(entry); + + godownEntryManager.saveGodownOutEntry_TRANS_REQUIRED(entry, returnMsg); + } + saveResult = true; + } catch (Exception e) { + e.printStackTrace(); + saveResult = false; + result = e.getMessage(); + } + printMsgToClient(saveResult, out, result.toString(), null); + }*/ + + + + /** + * @param out + * :输出流 + * @param result + * :显示的文本信息 + */ + private void printMsgToClient(boolean success, PrintWriter out, + String result, String printResult) { + String printValue = null; + if (printResult != null && printResult.length() > 0) { + String str = printResult.toString(); + printValue = str.substring(0, str.length() - 1); + } + out.print("{success:" + success + ",message:'" + result + "',barcode:'" + + printValue + "'}"); + out.close(); + } + + private void setGoodPurchasePlanPropertiesFromParams(GoodPurchasePlan entry,String formParams,String items){ + JSONObject formParamsObj = JSONObject.fromObject(formParams); + // 表单参数 + if(StringUtils.isNotBlank(formParams)){ + Long id = formParamsObj.optLong("id"); + String remark = formParamsObj.optString("remark"); + String timeStr = formParamsObj.optString("time"); + entry.setId(id); + entry.setRemark(remark); + Date time; + try { + time = GoodPurchasePlan.DATE_FORMAT.parse(timeStr); + } catch (ParseException e) { + e.printStackTrace(); + throw new RuntimeException("日期格式错误!"); + } + entry.setTime(time); + } + + // items列表 + setGoodPurchasePlanItemsFromParams(entry, items); + } + // 设置items参数 + private void setGoodPurchasePlanItemsFromParams(GoodPurchasePlan goodPurchasePlan,String items){ + // items列表 + List GoodPurchaseItems = goodPurchasePlan.getItemsList(); + JSONArray itemsArray = JSONArray.fromObject(items); + int size = itemsArray.size(); + for (int i = 0; i < size; ++i) { + JSONObject obj = itemsArray.getJSONObject(i); + if (obj != null) { + GoodPurchaseItem goodPurchaseItem = new GoodPurchaseItem(); + Long itemId = JSONUtil.optLong(obj,"id",null); + goodPurchaseItem.setId(itemId); + + int scheduleAmount = Integer.valueOf(obj.optString("scheduleAmount"));// 数量 + String departCoding = obj.optString("departCoding"); + OrgUnit orgUnit = (OrgUnit)orgUnitManager.getOrgUnitByCode(departCoding); + String name = obj.optString("name"); + String unit = obj.optString("unit"); + String specification = obj.optString("specification"); + Integer lastConsuption = null; + String lastConsuptionStr = obj.optString("lastConsuption"); + if(!StringUtils.isBlank(lastConsuptionStr) && !lastConsuptionStr.equals("null")){ + lastConsuption = Integer.valueOf(lastConsuptionStr); + } + Integer stockQuantity = null; + String stockQuantityStr = obj.optString("stockQuantity"); + if(!StringUtils.isBlank(stockQuantityStr) && !stockQuantityStr.equals("null")){ + stockQuantity = Integer.valueOf(stockQuantityStr); + } + double purchase = Double.valueOf(obj.optString("purchase"));// 价格 + String supplierName = obj.optString("supplierName");// 供应商 + String manufacturer = obj.optString("manufacturer");// 生产厂家 + + goodPurchaseItem.setGoodPurchasePlan(goodPurchasePlan); + goodPurchaseItem.setOrgUnit(orgUnit); + goodPurchaseItem.setName(name); + goodPurchaseItem.setUnit(unit); + goodPurchaseItem.setSpecification(specification); + goodPurchaseItem.setLastConsumption(lastConsuption); + goodPurchaseItem.setStockQuantity(stockQuantity); + goodPurchaseItem.setScheduleAmout(scheduleAmount); + goodPurchaseItem.setPurchase(purchase); + goodPurchaseItem.setTotalPrice(purchase * scheduleAmount); + goodPurchaseItem.setManufacturer(manufacturer); + goodPurchaseItem.setSupplierName(supplierName); + + GoodPurchaseItems.add(goodPurchaseItem); + } + } + } + + private void buildGoodPurchasePlanParamsForUpdate(GoodPurchasePlan original, + GoodPurchasePlan entry) { +// String formParams = StrutsParamUtils.getPraramValue("formParams", ""); + String originalFormParams = StrutsParamUtils.getPraramValue("originalFormParams", ""); + + String items = StrutsParamUtils.getPraramValue("items", ""); + String originalItems = StrutsParamUtils.getPraramValue("originalItems", ""); + + setGoodPurchasePlanPropertiesFromParams(original,originalFormParams,originalItems); + setGoodPurchasePlanPropertiesFromParams(entry,null,items); + } + + private void buildGoodPurchasePlanParamsForSave(GoodPurchasePlan goodPurchasePlan) { + String items = StrutsParamUtils.getPraramValue("items", ""); + setGoodPurchasePlanItemsFromParams(goodPurchasePlan, items); + } + + public String saveGoodPurchasePlan() { + HttpServletResponse response = StrutsParamUtils.getResponse(); + PrintWriter out = null; + String result = "保存成功"; + response.setCharacterEncoding("UTF-8"); + Map returnMsg = new HashMap(); + returnMsg.put("success", false); + returnMsg.put("errMsg", "保存失败"); + try { + out = response.getWriter(); + } catch (IOException e) { + e.printStackTrace(); + } + boolean saveResult = false; + try { + String id = StrutsParamUtils.getPraramValue("id", ""); + + GoodPurchasePlan original = new GoodPurchasePlan(); + GoodPurchasePlan entry = goodPurchasePlan; + + if (StringUtils.isNotBlank(id)) { + // 更新入库单,里面的item有可能会更新,新建,删除标识号。 + buildGoodPurchasePlanParamsForUpdate(original, entry); + + goodPurchasePlanManager.updateGoodPurchasePlan(original, entry, returnMsg); + } else { + // 保存入库单,里面的item一定都是新建标识号对象,并且需要更新批次属性。 + entry = goodPurchasePlan; + buildGoodPurchasePlanParamsForSave(entry); + + goodPurchasePlanManager.saveGoodPurchasePlan(entry, returnMsg); + } + saveResult = true; + } catch (Exception e) { + e.printStackTrace(); + saveResult = false; + result = e.getMessage(); + } + String itemsDetails = (String)returnMsg.get("itemsDetails"); + + printMsgToClient(saveResult, out, result.toString(), itemsDetails); + return null; + } + + /*public String loadGodownEntryItemByid() { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id) && id.equals("0") == false) {// 初始化加载的数据 + goodPurchasePlan = goodPurchasePlanManager.getGoodPurchasePlanById(id); + List items = goodPurchasePlan.getItemsList(); + Map map = new HashMap(); + map.put("success", true); + map.put("data", items); + JSONObject jsonObject = JSONObject.fromObject(map); + try { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + StrutsParamUtils.getResponse().getWriter() + .println("[" + jsonObject.toString() + "]"); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + }*/ + + /*public void printSomeGodownEntryItem() { + String items = StrutsParamUtils.getPraramValue("items", ""); + StringBuffer buffer = new StringBuffer(); + if (StringUtils.isNotBlank(items)) { + for (String item : items.split(";")) { + if (StringUtils.isNotBlank(item)) { + String[] itemArray = item.split(","); + String itemId = itemArray[0]; + String diposableGoodsId = itemArray[1]; + String batchNumber = itemArray[4]; + String expDate = itemArray[5]; + + String supplierName = ""; + if (itemArray.length >= 7){ + supplierName = itemArray[6]; + } + + DiposableGoodBatchStock diposableGoodBatchStock = diposableGoodBatchStockManager + .getDiposableGoodBatchStock(diposableGoodsId, + batchNumber); + GoodPurchaseItem godownEntryItem = (GoodPurchaseItem) goodPurchasePlanManager + .getGoodPurchaseItemById(itemId); + + buffer.append(godownEntryItem.getName() + + "#&" + diposableGoodBatchStock.getBarcode() + + "#&" + expDate + "#&" + supplierName + "#&" + + batchNumber + "#&" + " " + ";"); + } + } + String printValue = ""; + if (buffer.length() > 0) { + String str = buffer.toString(); + printValue = str.substring(0, str.length() - 1); + } + + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setCharacterEncoding("UTF-8"); + + try { + PrintWriter out = response.getWriter(); + out.print("{success:true,barcode:'" + printValue + "'}"); + } catch (Exception e) { + e.printStackTrace(); + } + } + }*/ + + public String loadGoodPurchasePlan() { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id) && StringUtils.isNumeric(id)) { + goodPurchasePlan = goodPurchasePlanManager.getGoodPurchasePlanById(id); + } + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + + JSONArray jsonArray = new JSONArray(); + for(GoodPurchaseItem item : goodPurchasePlan.getItemsList()){ + JSONObject obj = new JSONObject(); + obj.put("id", item.getId()); + obj.put("lastConsumption", item.getLastConsumption()); + obj.put("manufacturer", item.getManufacturer()); + obj.put("name", item.getName()); + obj.put("departCoding", item.getOrgUnit().getOrgUnitCoding()); + obj.put("departName", item.getOrgUnit().getName()); + obj.put("purchase", item.getPurchase()); + obj.put("scheduleAmout", item.getScheduleAmout()); + obj.put("specification", item.getSpecification()); + obj.put("stockQuantity", item.getStockQuantity()); + obj.put("supplierName", item.getSupplierName()); + obj.put("unit", item.getUnit()); + obj.put("totalPrice", item.getTotalPrice()); + + jsonArray.add(obj); + } + + JSONObject dataObj = new JSONObject(); + dataObj.put("id", goodPurchasePlan.getId()); + dataObj.put("operator", goodPurchasePlan.getOperator()); + dataObj.put("remark", goodPurchasePlan.getRemark()); + dataObj.put("serialNumber",goodPurchasePlan.getSerialNumber()); + dataObj.put("time", goodPurchasePlan.getTime()); + dataObj.put("itemsList", jsonArray); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("success", true); + jsonObject.put("data", dataObj); + + + String jsonStr = jsonObject.toString(); + try { + StrutsParamUtils.getResponse().getWriter().println(jsonStr); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public void deleteGoodPurchasePlan() { + String idStr = StrutsParamUtils.getPraramValue("ids", ""); + String message = ""; + try { + if (StringUtils.isNotBlank(idStr)) { + Map result = new HashMap(); + int deletedCount = 0; + int totalCount = 0; + result.put("deletedCount", deletedCount); + result.put("totalCount", totalCount); + result.put("failureCount", totalCount - deletedCount); + try { + String[] idsArray = idStr.split(Constants.IDS_SEPARATOR); + totalCount = idsArray.length; + for (String id : idsArray) { + // 每一个入库单作为一个单独的事务 + try { + goodPurchasePlanManager.deleteGoodPurchasePlan(id); + deletedCount++; + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + int failureCount = totalCount-deletedCount; + message = "成功删除"+deletedCount+"条采购计划单信息,失败"+failureCount+"条"; + } + } catch (Exception e) { + message = "删除失败!"; + e.printStackTrace(); + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + try { + httpServletResponse.getWriter().print( + "{success:true,message:'" + message + "'}"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + + /*@SuppressWarnings("unchecked") + public String viewGodownEntryItemList() { + HttpServletRequest request = StrutsParamUtils.getRequest(); + Map map = MapTools.convertRequestParamMap(request + .getParameterMap()); + map.put("sort", "godownEntry.time;asc"); + String batchNumber = map.get("batchNumber"), name = map.get("name") + .trim(), startDate = map.get("startDate"), endDate = map + .get("endDate"); + String specification = null, diposableGoodsName = name; + if (StringUtils.isNotBlank(diposableGoodsName) + && diposableGoodsName.lastIndexOf("[") != -1) { + specification = diposableGoodsName.substring( + diposableGoodsName.lastIndexOf("[") + 1, + diposableGoodsName.length() - 1); + diposableGoodsName = diposableGoodsName.substring(0, + diposableGoodsName.lastIndexOf("[")).trim(); + } + if (StringUtils.isNotBlank(startDate)) { + startDate = dateQueryAdapter.dateAdapter(startDate.substring(0, 10) + + " 00:00:00"); + } + if (StringUtils.isNotBlank(endDate)) { + endDate = dateQueryAdapter.dateAdapter(endDate.substring(0, 10) + + " 23:59:59"); + } + String sql = "where po.batchNumber = '" + batchNumber + + "' and po.diposableGoods.name = '" + diposableGoodsName + "'"; + if (StringUtils.isNotBlank(specification)) { + sql += " and po.diposableGoods.specification = '" + specification + + "'"; + } else { + sql += " and po.diposableGoods.specification is null"; + } + + sql += " and po.godownEntry.time between " + startDate + " and " + + endDate; + String json = gridManager.renderGrid2(map, + GodownEntryItem.class.getSimpleName(), sql, + new String[] { "itemsList" }); + + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setCharacterEncoding("UTF-8"); + PrintWriter out; + try { + out = response.getWriter(); + out.print(json); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + }*/ + + // 合并打印 + /*public void mergeLoadToussePrintData() { + try { + String idsStr = StrutsParamUtils.getPraramValue("ids", ""); + String[] idStrs = StringUtils.split(idsStr, ','); + + JSONObject jsonObject = new JSONObject(); + //goodPurchasePlanManager.loadGodownEntryPrintData(idStrs, jsonObject); + jsonObject.put("success", true); + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + StrutsParamUtils.getResponse().getWriter() + .println(jsonObject.toString()); + } catch (Exception e) { + e.printStackTrace(); + } + }*/ + @Override + public GoodPurchasePlan getModel() { + return goodPurchasePlan; + } + +} Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java =================================================================== diff -u -r12331 -r12562 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java (.../DiposableGoodsTableManager.java) (revision 12331) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/DiposableGoodsTableManager.java (.../DiposableGoodsTableManager.java) (revision 12562) @@ -288,22 +288,39 @@ return ""; } + public String getDiposableGoodsInfoForGoodPurchase(String diposableGoodsId){ + DiposableGoods goods = diposableGoodsManager + .getDiposableGoodsById(diposableGoodsId); + if(goods != null){ + DiposableGoodBatchStock lastBatchStock = getDiposableGoodLastBatchStock(goods); + String manufacturer = ""; + String supplierName = ""; + if (lastBatchStock != null) { + manufacturer = StringUtils.isBlank(lastBatchStock + .getManufacturer()) ? "" : lastBatchStock + .getManufacturer(); + supplierName = StringUtils.isBlank(lastBatchStock + .getSupplierName()) ? "" : lastBatchStock + .getSupplierName(); + } + Long amout = goods.getAmount(); //库存 + String specificaton = goods.getSpecification(); //规格 + String unit = goods.getUnit(); //单位 + amout = amout == null ? 0 : amout; + specificaton = StringUtils.isBlank(specificaton) ? "" : specificaton; + unit = StringUtils.isBlank(unit) ? "" : unit; + + return amout + "#;" + specificaton + "#;" + + unit + "#;" + supplierName + "#;" + manufacturer; + } + return ""; + } public String getDiposableGoodsCertification(String diposableGoodsId) { DiposableGoods goods = diposableGoodsManager .getDiposableGoodsById(diposableGoodsId); if (goods != null) { String certification = goods.getCertification(); - // 获取最后一次入库的批次 - DiposableGoodBatchStock lastBatchStock = null; - for (DiposableGoodBatchStock batchStock : goods.getGoodsBatchs()) { - if (lastBatchStock == null) { - lastBatchStock = batchStock; - } else { - if (batchStock.getId() > lastBatchStock.getId()) { - lastBatchStock = batchStock; - } - } - } + DiposableGoodBatchStock lastBatchStock = getDiposableGoodLastBatchStock(goods); certification = StringUtils.isBlank(certification) ? "" : certification; String manufacturer = ""; @@ -326,6 +343,26 @@ } return ""; } + /** + * 获取最后一次入库的批次 + * @param goods + * @return + */ + private DiposableGoodBatchStock getDiposableGoodLastBatchStock( + DiposableGoods goods) { + + DiposableGoodBatchStock lastBatchStock = null; + for (DiposableGoodBatchStock batchStock : goods.getGoodsBatchs()) { + if (lastBatchStock == null) { + lastBatchStock = batchStock; + } else { + if (batchStock.getId() > lastBatchStock.getId()) { + lastBatchStock = batchStock; + } + } + } + return lastBatchStock; + } public String getDiposableGoodBatchProperty(String goodsId, String batchNumber) { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GoodPurchaseItem.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GoodPurchaseItem.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GoodPurchaseItem.java (revision 12562) @@ -0,0 +1,182 @@ +package com.forgon.disinfectsystem.entity.assestmanagement; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +import com.forgon.directory.model.OrgUnit; + +/** + * 采购计划物品项 + * @author kzh + * + */ +@Entity +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class GoodPurchaseItem { + + private Long id; + /** + * 采购的科室 + */ + private OrgUnit orgUnit; + /** + * 采购计划单 + */ + private GoodPurchasePlan goodPurchasePlan; + /** + * 物品名称 + */ + private String name; + /** + * 数量单位(个/支/条) + */ + private String unit; + /** + * 规格 + */ + private String specification; + /** + * 上期消耗量 + */ + private Integer lastConsumption; + /** + * 库存数量 + */ + private Integer stockQuantity; + + /** + * 计划采购数量 + */ + private Integer scheduleAmout; + /** + * 进价 + */ + private Double purchase; + /** + * 总金额,由purchase * scheduleAmout计算而得,存入数据库中 + */ + private Double totalPrice; + /** + * 生产厂家 + */ + private String manufacturer ; + /** + * 供应商 + */ + private String supplierName ; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @ManyToOne + @JoinColumn(name = "orgUnit_id") + public OrgUnit getOrgUnit() { + return orgUnit; + } + + public void setOrgUnit(OrgUnit orgUnit) { + this.orgUnit = orgUnit; + } + @ManyToOne + @JoinColumn(name = "goodPurchasePlan_id") + public GoodPurchasePlan getGoodPurchasePlan() { + return goodPurchasePlan; + } + + public void setGoodPurchasePlan(GoodPurchasePlan goodPurchasePlan) { + this.goodPurchasePlan = goodPurchasePlan; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + + public Integer getLastConsumption() { + return lastConsumption; + } + + public void setLastConsumption(Integer lastConsumption) { + this.lastConsumption = lastConsumption; + } + + public Integer getStockQuantity() { + return stockQuantity; + } + + public void setStockQuantity(Integer stockQuantity) { + this.stockQuantity = stockQuantity; + } + + public Integer getScheduleAmout() { + return scheduleAmout; + } + + public void setScheduleAmout(Integer scheduleAmout) { + this.scheduleAmout = scheduleAmout; + } + + public Double getPurchase() { + return purchase; + } + + public void setPurchase(Double purchase) { + this.purchase = purchase; + } + + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + + public String getManufacturer() { + return manufacturer; + } + + public void setManufacturer(String manufacturer) { + this.manufacturer = manufacturer; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } +} Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GoodPurchasePlanManagerImpl.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GoodPurchasePlanManagerImpl.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GoodPurchasePlanManagerImpl.java (revision 12562) @@ -0,0 +1,357 @@ +package com.forgon.disinfectsystem.diposablegoods.service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +import com.forgon.Constants; +import com.forgon.directory.service.OrgUnitManager; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.diposablegoods.util.DiposableGoodsUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodBatchStock; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; +import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryDiposableGoodsItem; +import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchaseItem; +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan; +import com.forgon.disinfectsystem.entity.assestmanagement.IdentificationOfDiposableGoods; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; +import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsItem; +import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; +import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper; +import com.forgon.disinfectsystem.vo.GodownEntryItemPrintVO; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.serialnumber.service.SerialNumManager; +import com.forgon.tools.MathTools; +import com.forgon.tools.SqlBuilder; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.util.SqlUtils; + +public class GoodPurchasePlanManagerImpl implements GoodPurchasePlanManager { + + private ObjectDao objectDao; + + private DiposableGoodsManager diposableGoodsManager; + + private DiposableGoodBatchStockManager diposableGoodBatchStockManager; + + private WriteBackInventoryHelper writeBackInventoryHelper; + + private SerialNumManager serialNumManager; + + private OrgUnitManager orgUnitManager; + + private IdentificationOfDiposableGoodsManager identificationOfDiposableGoodsManager; + + private SupplyRoomConfigManager supplyRoomConfigManager; + + public void setWriteBackInventoryHelper( + WriteBackInventoryHelper writeBackInventoryHelper) { + this.writeBackInventoryHelper = writeBackInventoryHelper; + } + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + public void setDiposableGoodsManager( + DiposableGoodsManager diposableGoodsManager) { + this.diposableGoodsManager = diposableGoodsManager; + } + + public void setDiposableGoodBatchStockManager( + DiposableGoodBatchStockManager diposableGoodBatchStockManager) { + this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; + } + + public void setSerialNumManager(SerialNumManager serialNumManager) { + this.serialNumManager = serialNumManager; + } + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + + public void setIdentificationOfDiposableGoodsManager( + IdentificationOfDiposableGoodsManager identificationOfDiposableGoodsManager) { + this.identificationOfDiposableGoodsManager = identificationOfDiposableGoodsManager; + } + + public void setSupplyRoomConfigManager( + SupplyRoomConfigManager supplyRoomConfigManager) { + this.supplyRoomConfigManager = supplyRoomConfigManager; + } + + public void saveOrUpdate(GodownEntry godownEntry) { + objectDao.saveOrUpdate(godownEntry); + } + + /** + * @param original + * @param entry + * @param curGodownEntry + */ + private void updateGodownEntryProperties(GodownEntry original, + GodownEntry entry, GodownEntry curGodownEntry) { + // 备注 + String originalRemark = original.getRemark(); + String remark = entry.getRemark(); + if(!StringUtils.equals(originalRemark, remark)){ + curGodownEntry.setRemark(remark); + } + // 时间 + Date originalTime = original.getTime(); + Date time = entry.getTime(); + if(!originalTime.equals(time)){ + curGodownEntry.setTime(time); + } + } + @Override + public void saveGoodPurchasePlan(GoodPurchasePlan goodPurchasePlan, + Map result) { + if(StringUtils.isBlank(goodPurchasePlan.getSerialNumber())){ + goodPurchasePlan.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_GOOD_PURCHASE)); + } + objectDao.saveOrUpdate(goodPurchasePlan); + } + + @Override + public GoodPurchasePlan getGoodPurchasePlanById(String id) { + return (GoodPurchasePlan) objectDao.getByProperty( + GoodPurchasePlan.class.getSimpleName(), "id", Long.valueOf(id)); + } + + @Override + public GoodPurchaseItem getGoodPurchaseItemById(String itemId) { + return (GoodPurchaseItem) objectDao.getByProperty( + GoodPurchaseItem.class.getSimpleName(), "id", Long.valueOf(itemId)); + } + + private GoodPurchasePlan getGoodPurchasePlanById_ForUpdate(String id){ + return (GoodPurchasePlan) objectDao.getByProperty_ForUpdate( + GoodPurchasePlan.class.getSimpleName(), "id", Long.valueOf(id)); + } + private void deleteGoodPurchaseItem(GoodPurchaseItem goodPurchaseItem) { + // 删除goodPurchaseItem + goodPurchaseItem.getGoodPurchasePlan().getItemsList().remove(goodPurchaseItem); + objectDao.delete(goodPurchaseItem); + } + @Override + public Map deleteGoodPurchasePlan(String id) { + Map result = new HashMap(); + result.put("success", false); + try { + // 锁定并获取采购计划单 + GoodPurchasePlan goodPurchasePlan = getGoodPurchasePlanById_ForUpdate(id); + if (goodPurchasePlan == null) { + // 采购计划单已被删除 + throw new RuntimeException("采购计划单已被删除!"); + } + + List itemList = new ArrayList(goodPurchasePlan.getItemsList()); + for (GoodPurchaseItem goodPurchaseItem : itemList) { + deleteGoodPurchaseItem(goodPurchaseItem); + } + //删除 + objectDao.delete(goodPurchasePlan); + result.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + result.put("errMsg", e.getMessage()); + throw e; + } + + return result; + } + + private static GoodPurchaseItem getGoodPurchaseItemByItemId( + List items, Long id) { + if (id == null) { + return null; + } + for (GoodPurchaseItem item : items) { + Long itemID = item.getId(); + if (itemID != null && itemID.equals(id)) { + return item; + } + } + return null; + } + + @Override + public void updateGoodPurchasePlan(GoodPurchasePlan original, + GoodPurchasePlan entry, Map returnMsg) { + + // 锁定并获取入库单 + GoodPurchasePlan curGoodPurchasePlan = getGoodPurchasePlanById_ForUpdate(original.getId().toString()); + if(curGoodPurchasePlan == null){ + // 入库单已被删除 + throw new RuntimeException("入库单已被删除!"); + } + + + List originalItemList = original.getItemsList(); + List itemList = entry.getItemsList(); + List curItemList = curGoodPurchasePlan.getItemsList(); + + // 处理修改 + for (int i = 0; i < itemList.size(); ++i) { + GoodPurchaseItem goodPurchaseItem = itemList.get(i); + Long itemID = goodPurchaseItem.getId(); + if(itemID == null){ + continue; + } + GoodPurchaseItem originalGodownEntryItem = getGoodPurchaseItemByItemId(originalItemList, itemID); + if(originalGodownEntryItem == null){ + // 在页面上被删除了。 + //continue; + throw new RuntimeException("参数错误!"); + } + GoodPurchaseItem curGodownEntryItem = getGoodPurchaseItemByItemId(curItemList, itemID); + if(curGodownEntryItem == null){ + // 被并发删除了,也不需要处理 + continue; + } + + + // 保存时,每一项都是新建标识号对象 + + boolean updateBatchStock = false; + boolean updateDiposableGoods = false; + // 供应商 + String originalSupplierName = originalGodownEntryItem.getSupplierName(); + String supplierName = goodPurchaseItem.getSupplierName(); + if(!StringUtils.equals(originalSupplierName, supplierName)){ + curGodownEntryItem.setSupplierName(supplierName); + updateBatchStock = true; + } + + // 生产厂家 + String originalManufacturer = originalGodownEntryItem.getManufacturer(); + String manufacturer = goodPurchaseItem.getManufacturer(); + if(!StringUtils.equals(originalManufacturer, manufacturer)){ + curGodownEntryItem.setManufacturer(manufacturer); + updateBatchStock = true; + } + // 修改计划数 + Integer originalAmount = originalGodownEntryItem.getScheduleAmout(); + Integer amount = goodPurchaseItem.getScheduleAmout(); + Integer curAmount = curGodownEntryItem.getScheduleAmout(); + if(originalAmount == null || !originalAmount.equals(amount)){ + if(curAmount != null && !curAmount.equals(originalAmount)){// 有可能被并发修改了库存 + throw new RuntimeException("计划数已被修改!"); + } + Integer amountChange = amount - originalAmount; + + curGodownEntryItem.setScheduleAmout(amount); + } + // 修改价格 + Double originalPrice = originalGodownEntryItem.getPurchase(); + Double price = goodPurchaseItem.getPurchase(); + Double curPrice = curGodownEntryItem.getPurchase(); + if(originalPrice == null || !originalPrice.equals(price)){ + if(price != null && !price.equals(curPrice)){// 这个判断是有必要的,有可能价格已经被并发修改过了。所以就不需要再修改。 + curGodownEntryItem.setPurchase(price); + } + } + // 修改上期消耗数 + Integer originalLastConsumption = originalGodownEntryItem.getLastConsumption(); + Integer lastConsumption = goodPurchaseItem.getLastConsumption(); + Integer curgetLastConsumption = curGodownEntryItem.getLastConsumption(); + if(originalLastConsumption == null || !originalLastConsumption.equals(lastConsumption)){ + if(lastConsumption != null && !lastConsumption.equals(curgetLastConsumption)){// 这个判断是有必要的,有可能价格已经被并发修改过了。所以就不需要再修改。 + curGodownEntryItem.setLastConsumption(lastConsumption); + } + } + + } + // 处理新增 + for (int i = 0; i < itemList.size(); ++i) { + GoodPurchaseItem godownEntryItem = itemList.get(i); + Long itemID = godownEntryItem.getId(); + if(itemID != null){// 有id就不是新增项 + continue; + } + + + // 保存godownEntryItem + godownEntryItem.setGoodPurchasePlan(curGoodPurchasePlan); + curItemList.add(godownEntryItem); + objectDao.save(godownEntryItem); + } + // 处理删除项 + for (int i = 0; i < originalItemList.size(); ++i) { + GoodPurchaseItem originalGodownEntryItem = originalItemList.get(i); + Long itemID = originalGodownEntryItem.getId(); + if(itemID == null){ + continue; + } + GoodPurchaseItem godownEntryItem = getGoodPurchaseItemByItemId(itemList, itemID); + if(godownEntryItem != null){// 现在还存在,就不是删除项 + // 在页面上被删除了。 + continue; + } + GoodPurchaseItem curGodownEntryItem = getGoodPurchaseItemByItemId(curItemList, itemID); + if(curGodownEntryItem == null){ + // 被并发删除了。也不需要处理 + continue; + } + + // 删除godownEntryItem + curItemList.remove(curGodownEntryItem); + objectDao.delete(curGodownEntryItem); + } + + // 更新入库单属性 + updateGoodPurchasePlanProperties(original, entry, curGoodPurchasePlan); + // 更新入库单对象 + saveOrUpdate(curGoodPurchasePlan); + // 设置GodownEntryItem详细列表 + //setReturnDetails(curGoodPurchasePlan, idToBatchStockMap,result); + + } + + private void updateGoodPurchasePlanProperties(GoodPurchasePlan original, + GoodPurchasePlan entry, GoodPurchasePlan curGodownEntry) { + // 备注 + String originalRemark = original.getRemark(); + String remark = entry.getRemark(); + if(!StringUtils.equals(originalRemark, remark)){ + curGodownEntry.setRemark(remark); + } + // 时间 + Date originalTime = original.getTime(); + Date time = entry.getTime(); + if(!originalTime.equals(time)){ + curGodownEntry.setTime(time); + } + } + + private void saveOrUpdate(GoodPurchasePlan godownEntry) { + objectDao.saveOrUpdate(godownEntry); + } +} Index: forgon-tools/src/main/java/com/forgon/tools/Path.java =================================================================== diff -u -r12335 -r12562 --- forgon-tools/src/main/java/com/forgon/tools/Path.java (.../Path.java) (revision 12335) +++ forgon-tools/src/main/java/com/forgon/tools/Path.java (.../Path.java) (revision 12562) @@ -249,5 +249,24 @@ theDir.mkdir(); } } + /** + * 根据类型获取pda客户端的信息json文件路径 + * @param type clientForAndroid或者clientForWindowsMobile + * @return pda客户端的信息json文件路径 + */ + public static String getMobileClientInfoFilePath(String type) { + if(StringUtils.isBlank(type)){ + type="clientForAndroid"; + } + String webInfoPath = getWebAppRoot(); + String path = webInfoPath; + if(webInfoPath != null){ + int end = webInfoPath.indexOf("WEB-INF"); + if( end != -1){ + path = webInfoPath.substring(0,end - 1); + } + } + return path + "/mobileClient/" + type + ".json"; + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GoodPurchasePlan.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GoodPurchasePlan.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GoodPurchasePlan.java (revision 12562) @@ -0,0 +1,122 @@ +package com.forgon.disinfectsystem.entity.assestmanagement; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 采购计划单 + * @author kzh + * + */ +@Entity +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class GoodPurchasePlan { + public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( + "yyyy-MM-dd"); + private Long id; + + private String serialNumber; //单号 + + private String operator; //操作员 + + private Date time; // 操作时间 + + private String remark; //备注 + + @JsonIgnore + private List itemsList = new ArrayList(); + + public GoodPurchasePlan(){ + + } + + public GoodPurchasePlan(Long id, String serialNumber, String operator, + Date time, String remark, List itemsList) { + super(); + this.id = id; + this.serialNumber = serialNumber; + this.operator = operator; + this.time = time; + this.remark = remark; + this.itemsList = itemsList; + } + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public Date getTime() { + return time; + } + + public void setTime(Date time) { + this.time = time; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @OneToMany(fetch = FetchType.LAZY) + @Cascade(value = { CascadeType.ALL }) + @JoinColumn(name = "goodPurchasePlan_id") + public List getItemsList() { + return itemsList; + } + + public void setItemsList(List itemsList) { + this.itemsList = itemsList; + } + + public void copyPlainPropertiesFrom(GoodPurchasePlan godownEntry){ + + this.operator = godownEntry.operator; + this.remark = godownEntry.remark; + this.serialNumber = godownEntry.serialNumber; + this.time = godownEntry.time; + + } +} Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/GoodPurchaseTableManager.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/GoodPurchaseTableManager.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/dwr/table/GoodPurchaseTableManager.java (revision 12562) @@ -0,0 +1,75 @@ +package com.forgon.disinfectsystem.diposablegoods.dwr.table; + +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; + +import com.forgon.component.grid.GridManager; +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan; + +/** + * 采购计划的表格处理 + * @author kzh + * + */ +public class GoodPurchaseTableManager { + + private GridManager gridManager; + private DateQueryAdapter dateQueryAdapter; + + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + + public String findGoodPurchaseTableList( + Map> parameterMap) { + // 申请单查看 发货单 + Map sqlWhereParamMap = gridManager + .getParamFromView(parameterMap); + + String sql = "where (1=1) "; + String code = sqlWhereParamMap.get("code"); + + int codeIndex = code.lastIndexOf("["); + String specification = ""; + if (StringUtils.isNotBlank(code) && code.lastIndexOf("[") != -1) { + specification = code.substring(codeIndex + 1, code.length() - 1); + code = code.substring(0, codeIndex); + } + String startDate = sqlWhereParamMap.get("startDate"); + String endDate = sqlWhereParamMap.get("endDate"); + if (StringUtils.isNotBlank(code)) { + if (StringUtils.isNotBlank(specification)) { + sql += " and po.id in (select bo.goodPurchasePlan.id from GoodPurchaseItem as bo where bo.name = '" + + code + + "' and bo.specification = '" + + specification + "'"; + } else { + sql += " and po.id in (select bo.goodPurchasePlan.id from GoodPurchaseItem as bo where bo.name = '" + + code + "'"; + } + sql += ")"; + } + + if (StringUtils.isNotBlank(startDate)) { + startDate += " 00:00:00"; + sql += " and po.time >= " + dateQueryAdapter.dateAdapter(startDate); + } + + if (StringUtils.isNotBlank(endDate)) { + endDate += " 23:59:59"; + sql += " and po.time <= " + dateQueryAdapter.dateAdapter(endDate); + } + + return gridManager.renderGrid(parameterMap, + GoodPurchasePlan.class.getSimpleName(), sql, + new String[] { "itemsList" }); + } +} Index: ssts-web/src/main/webapp/WEB-INF/dwr.xml =================================================================== diff -u -r12335 -r12562 --- ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 12335) +++ ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 12562) @@ -244,6 +244,10 @@ + + + + Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.js (revision 12562) @@ -0,0 +1,1258 @@ +var entityName = "入库单管理"; +var grid; +var g_localID = 1;// 为了区分每一个item,增加的ID。 +// 全部一次性物品 +var allDiposableGoodsStore = new Ext.data.Store({ + 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 : 'spelling',mapping : 'spelling'}, + {name : 'name',mapping : 'name'}, + {name : 'displayName',mapping : 'displayName'}, + {name : 'referencePrice',mapping : 'referencePrice'} + ]) +}); + +// 科室能申请的一次性物品 +var diposableGoodsStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/diposableGoodsAction!getDiposableGoodsData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'spelling',mapping : 'spelling'}, + {name : 'name',mapping : 'name'}, + {name : 'displayName',mapping : 'displayName'}, + {name : 'referencePrice',mapping : 'referencePrice'} + ]) +}); + +function dateCompare(date1,date2){ + date1 = date1.replace(/\-/gi,"/"); + date2 = date2.replace(/\-/gi,"/"); + var time1 = new Date(date1).getTime(); + var time2 = new Date(date2).getTime(); + if(time1 > time2){ + return 1; + }else if(time1 == time2){ + return 2; + }else{ + return 3; + }} + +var supplierStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/supplierAction!getSupplierData.do?supplierType='+encodeURI(supplier), + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ]) +}); + +var madeCompanyStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/supplierAction!getSupplierData.do?supplierType='+encodeURI(madeCompany), + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ]) +}); + +var GoodPurchasePlanItemRecord = Ext.data.Record.create([ + {name : 'localID'}, + {name : 'id'}, + {name : 'departName'}, + {name : 'departCoding'}, + {name : 'name'}, + {name : 'unit'}, + {name : 'specification'}, + {name : 'lastConsuption'}, + {name : 'stockQuantity'}, + {name : 'scheduleAmount'}, + {name : 'purchase'}, + {name : 'totalPrice'}, + {name : 'supplierName'}, + {name : 'identification'}, + {name : 'manufacture'} +]); +function validateForm(){ + if(!top.Ext.getCmp('goodPurchaseForm').form.isValid()){ + showResult('请正确填写表单各值'); + return false; + } + var name = top.Ext.getCmp('name1').getValue(); + if(name.length==0){ + showResult('请填写物品名称!'); + top.Ext.getCmp('name1').focus(false,100); + return false; + } + var count = top.Ext.getCmp('amount1').getValue(); + if(count.length==0){ + showResult('请填写物品数量!'); + top.Ext.getCmp('amount1').focus(false,100); + return false; + } + //var countNum = Ext.num(parseInt(count),0) + if(!/^\d+$/.test(count)){ + showResult('物品数量只能是整数'); + top.Ext.getCmp('amount1').focus(false,100); + return false; + } + + var lastConsumption = top.Ext.getCmp('lastConsumption1').getValue(); + if(lastConsumption != null && lastConsumption.length > 0){ + //var lastConsumptionNum = Ext.num(parseInt(lastConsumption),0) + if(!/^\d+$/.test(lastConsumption)){ + showResult('上期消耗量只能是整数'); + top.Ext.getCmp('lastConsumption1').focus(false,100); + return false; + } + } + + var stockQuantity = top.Ext.getCmp('stockQuantity').getValue(); + if(stockQuantity != null && stockQuantity.length > 0){ + if(!/^\d+$/.test(stockQuantity)){ + showResult('库存数量只能是整数'); + top.Ext.getCmp('stockQuantity').focus(false,100); + return false; + } + } + + var unit = top.Ext.getCmp('unit1').getValue(); + if(unit.length==0){ + showResult('请填写物品单位!'); + top.Ext.getCmp('unit1').focus(false,100); + return false; + } + /*var specification = top.Ext.getCmp('specification1').getValue(); + if(specification.length==0){ + showResult('请填写物品规格!'); + top.Ext.getCmp('specification1').focus(false,100); + return false; + }*/ + var cost = top.Ext.getCmp('purchase').getValue(); + if(cost.length==0){ + showResult('请填写物品进价!'); + top.Ext.getCmp('purchase').focus(false,100); + return false; + } + if(!/^(([1-9]+[0-9]*.{1}[0-9]+)|([0].{1}[1-9]+[0-9]*)|([1-9][0-9]*)|([0][.][0-9]+[1-9]*))$/.test(cost)){ + showResult('物品进价只能是正数'); + top.Ext.getCmp('purchase').focus(false,100); + return false; + } + + if(top.Ext.getCmp('supplier1').getValue() == null || top.Ext.getCmp('supplier1').getValue() == ''){ + showResult("请填写供应商!"); + top.Ext.getCmp('supplier1').focus(false,100); + return false; + } + return true; +} +function clearForm(){ + top.Ext.getCmp('name1').setValue(''); + top.Ext.getCmp('amount1').setValue(''); + top.Ext.getCmp('unit1').setValue(''); + top.Ext.getCmp('diposableGoodsID').setValue(''); + top.Ext.getCmp('specification1').setValue(''); + top.Ext.getCmp('purchase').setValue(''); + top.Ext.getCmp('supplier1').setValue(''); + top.Ext.getCmp('lastConsumption1').setValue(''); + top.Ext.getCmp('stockQuantity').setValue(''); + top.Ext.getCmp('manufacturer').setValue(''); + top.Ext.getCmp('name1').focus(); +} +function addItems(departName,departCoding,name,unit,specification,lastConsuption, + stockQuantity,scheduleAmount,purchase,manufacturer,supplierName){ + for(var i = 0;i < top.Ext.getCmp('goodPurchaseItemGrid').getStore().getCount();i++){ + if(top.Ext.getCmp('goodPurchaseItemGrid').getStore().getAt(i).data.name == name){ + showResult("该物品已经存在,不能重复添加!"); + return false; + } + } + var lastConsuptionNum = Ext.num(parseInt(lastConsuption),0) + if(isNaN(lastConsuptionNum)){ + lastConsuptionNum = ''; + } + + var stockQuantityNum = Ext.num(parseInt(stockQuantity),0) + if(isNaN(stockQuantityNum)){ + stockQuantityNum = ''; + } + + var scheduleAmountNum = Ext.num(parseInt(scheduleAmount),0) + if(isNaN(scheduleAmountNum)){ + scheduleAmountNum = ''; + } + + var purchaseNum = Ext.num(parseFloat(purchase),0) + if(isNaN(purchaseNum)){ + purchaseNum = ''; + } + + var totalPriceNum = Ext.num(parseInt(scheduleAmount) * parseFloat(purchase),0) + if(isNaN(totalPriceNum)){ + totalPriceNum = ''; + } + //添加操作 + var godownEntryItem = new GoodPurchasePlanItemRecord({ + localID:g_localID++, + id : "", + departName : departName, + departCoding : departCoding, + name : name, + unit : unit, + specification : specification, + lastConsuption : lastConsuptionNum, + stockQuantity : stockQuantityNum, + scheduleAmount : scheduleAmountNum, + purchase : purchaseNum, + totalPrice:totalPriceNum, + manufacturer:manufacturer, + supplierName : supplierName + }); + //alert(purchase + " " + scheduleAmount + " " ); + //alert("lastConsuption:" + lastConsuption); + //alert("tatalPrice:" + Ext.num(parseFloat(scheduleAmount) * parseFloat(purchase),0)); + top.Ext.getCmp('goodPurchaseItemGrid').getStore().add(godownEntryItem); + setTotalMoney(top.Ext.getCmp('goodPurchaseItemGrid')); + clearForm(); + return true; +} + +function renderDeleteButton(v,p,record){ + return ""; +} +/** +* 精确计算arg1和arg2的乘积 +* @param arg1 +* @param arg2 +* @return +*/ +function accMul(arg1,arg2) { + var s1=null ,m=0; + if(!arg1){ + s1 = '0.0'; + }else{ + s1=arg1.toString(); + } + if(!arg2){ + s2='0.0'; + }else{ + s2=arg2.toString(); + } + try{m+=s1.split(".")[1].length;}catch(e){s1='0.0';} + try{m+=s2.split(".")[1].length;}catch(e){s2='0.0';} + return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m); +} +/** +* 精确计算arg1和arg2的和 +* @param arg1 +* @param arg2 +* @return +*/ +function accAdd(arg1,arg2){ + var r1=null ,m=0; + if(!arg1){ + r1 = '0.0'; + }else{ + r1=arg1.toString(); + } + if(!arg2){ + r2='0.0'; + }else{ + r2=arg2.toString(); + } + 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 round((arg1*m+arg2*m)/m,2); +} +function round(v,e){ + var t=1; + for(;e>0;t*=10,e--); + for(;e<0;t/=10,e++); + return Math.round(v*t)/t; +} +function setTotalMoney(grid) { + var totalMoney = 0.0; + grid.getStore().each(function(record){ + var amount = Ext.num(parseFloat(record.data.scheduleAmount),0.0); + var cost = Ext.num(parseFloat(record.data.purchase),0.0); + var mul = amount*cost*1.00; + totalMoney += mul; + }); + 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.purchase),0.0); + var total = Ext.util.Format.usMoney(cost*amount); + return total; +} + +function deleteItem(localID){ + var goodPurchaseItemGridStore = top.Ext.getCmp('goodPurchaseItemGrid').getStore(); + for(var i = 0;i 1) { + showResult("一次只能修改一个采购计划单!"); + return false; + } + id = records[0].data['id']; + editRecord(id); +}; + +function editRecord(id){ + addGoodPurchasePlan(); + top.Ext.getCmp("serialNum").show(); + top.Ext.getCmp('goodPurchaseForm').form.load({ + url : WWWROOT + '/disinfectSystem/goodPurchaseAction!loadGoodPurchasePlan.do', + method : 'GET', + waitMsg : '正在加载数据,请稍候', + params : {id : id}, + success : function(form, action) { + top.Ext.getCmp("time").setValue(Ext.util.Format.date(new Date(action.result.data.time.time), 'Y-m-d')); + + for(var i = 0 ;i < action.result.data.itemsList.length ;i++){ + var specification = action.result.data.itemsList[i].specification; + var b = true; + if(specification == null || specification.length <= 0){ + b = false; + } + var scheduleAmount =action.result.data.itemsList[i].scheduleAmout; + if(scheduleAmount == null || scheduleAmount == 'null'){ + scheduleAmount = ''; + } + var lastConsumption = action.result.data.itemsList[i].lastConsumption; + if(lastConsumption == null || lastConsumption == 'null'){ + lastConsumption = ''; + } + var stockQuantity = action.result.data.itemsList[i].stockQuantity; + if(stockQuantity == null || stockQuantity == 'null'){ + stockQuantity = ''; + } +// var aaa = Ext.util.Format.usMoney(action.result.data.itemsList[i].cost); + var purchase = parseFloat(action.result.data.itemsList[i].purchase); + + var godownEntryItem = new GoodPurchasePlanItemRecord({ + localID:g_localID++, + id : action.result.data.itemsList[i].id, + departName:action.result.data.itemsList[i].departName, + departCoding:action.result.data.itemsList[i].departCoding, + + name : action.result.data.itemsList[i].name, + unit : action.result.data.itemsList[i].unit, + specification : specification, + lastConsuption : lastConsumption, + stockQuantity : stockQuantity, + scheduleAmount : scheduleAmount, + purchase : purchase, + totalPrice : action.result.data.itemsList[i].totalPrice, + manufacturer : action.result.data.itemsList[i].manufacturer, + supplierName : action.result.data.itemsList[i].supplierName, + totalPrice:parseFloat(Ext.util.Format.usMoney(scheduleAmount*purchase)) + }); + + top.Ext.getCmp('goodPurchaseItemGrid').getStore().add(godownEntryItem); + } + setTotalMoney(top.Ext.getCmp('goodPurchaseItemGrid')); + // 保存原始数据,只需要保存需要修改的属性 + setOriginalFormParams(form,['id','remark','time']); + var originalItems = buildJSONStringFromStore(top.Ext.getCmp('goodPurchaseItemGrid').getStore()); + //alert(originalItems); + top.Ext.getCmp("originalItems").setValue(originalItems); + + }, + failure : function(form, action) { + } + }); +} + +/** + * 修改记录 + * modifyRecord函数 触发modify函数调用,并传入当前列的值以及record.data对象 + * 页面中需要定义 modify(v,data) 函数 + */ +function modify(v,data){ + editRecord(data['id']); +} + +Ext.onReady(function() { + Ext.QuickTips.init(); + var columns = [ + {header : "单号",width : 200,dataIndex : 'serialNumber', renderer : modifyRecord}, + {header : "操作员",width : 200,dataIndex : 'operator'}, + {header : "操作时间",width : 200,dataIndex : 'time' , renderer : myDateFormat}, + {id : 'operationRemark',header : "备注",width : 120,dataIndex : 'remark'} + ]; + + var readerDetail = [ + {name : 'id'}, + {name : 'serialNumber'}, + {name : 'operator'}, + {name : 'time'}, + {name : 'remark'} + ]; + + var filters = new Ext.grid.GridFilters({ + filters:[ + {type: 'string', dataIndex: 'serialNumber'}, + {type: 'string', dataIndex: 'operator'}, + {type: 'date', dataIndex: 'time'}, + {type: 'string', dataIndex: 'remark'} + ]} + ); + + var sign = true; + var tbar = [{ + text : '添加', + hidden : SSTS_WarehouseEntry_Create, + iconCls : 'btn_ext_application_add', + handler : function() { + addGoodPurchasePlan('insert'); + } + }, '-', { + text : '修改', + hidden : SSTS_WarehouseEntry_Update, + iconCls : 'btn_ext_application_edit', + id : 'editTbar', + handler : function() { + loadFormData(grid); + } + }, '-', { + text : '删除', + hidden : SSTS_WarehouseEntry_Delete, + iconCls : 'btn_ext_application_del', + handler : function() { + deleteGoodPurchasePlan(grid); + } + }]; + + grid = new Ext.ux.ForgonPageGrid( { + tbar : tbar, + pageSize : 20, + defaultSortField : 'time', +// title : '入库单列表', + defaultSortDirection : 'DESC', + isCheckboxSelectionModel : true, + rememberSelected : false, + isShowSearchField : true, + columns : columns, + plugins: filters, + autoExpandColumn : 'operationRemark', + renderTo : 'gridDiv', + frame : false + }, readerDetail, + GoodPurchaseTableManager.findGoodPurchaseTableList, + null + ); + + function initQueryValueAndReload() { + var startDate = $Id('startDate').value; + var endDate = $Id('endDate').value; + var code = $Id('code').value; + if(startDate || endDate){ + if(!compareDate(startDate,endDate)){ + showResult("开始时间不能大于结束时间"); + return; + } + } + alert(code); + $Id('parm_s_startDate').value = startDate; + $Id('parm_s_endDate').value = endDate; + $Id('parm_s_code').value = code; + grid.dwrReload(); + } + var dt = new Date(); + var v = dt.getMonth()+1; + if(v < 10){ + v = "0" + (dt.getMonth()+1); + } + var startDayofMonth = dt.getFullYear() + "/" + v + "/01"; + var form = new Ext.Panel({ + id : 'northPanel', + layout : 'table', + frame : true, + region : 'north', + border : false, + bodyBorder : false, + layoutConfig : {columns : 2}, + height : 63, + items : [{ + width :900, + layout : 'column', + items:[{ + columnWidth : .73, + layout : 'form', + labelWidth : 60, + items : [{ + fieldLabel : '关键字', + xtype : 'combo', + id : 'code', + name : 'code', + queryParam : 'spell', + minChars : 0, + valueField : 'id', + displayField : 'displayName', + width : 600, + store : allDiposableGoodsStore, + forceSelection : false, + lazyInit : true, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : true, + anchor : '97%', + listeners : { + select : function(combo, record, index) { + Ext.getCmp('code').setValue(record.data.name); + } + } + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'datefield', + fieldLabel : '开始日期', + name : 'startDate', + id : 'startDate', + readOnly : false, + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + editable : false, + format : 'Y-m-d', + value:new Date(startDayofMonth), + anchor : '94%' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'datefield', + fieldLabel : '结束日期', + name : 'endDate', + id : 'endDate', + readOnly : false, + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + editable : false, + format : 'Y-m-d', + value:new Date(), + anchor : '94%' + }] + }] + },{ + width :150, + layout : 'column', + items : [{ + columnWidth : .5, + layout :'form', + items : [{ + xtype : 'button', + text : '查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + initQueryValueAndReload(); + } + }] + },{ + columnWidth : .5, + layout :'form', + items : [{ + xtype : 'button', + text : '重置', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + $Id('code').value = ""; + $Id('startDate').value = ""; + $Id('endDate').value = ""; + } + }] + }] + }] + }); + + 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-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r12553 -r12562 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 12553) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 12562) @@ -2981,18 +2981,7 @@ }catch(Throwable e){ System.out.println(e); } - if(StringUtils.isBlank(type)){ - type="clientForAndroid"; - } - String webInfoPath = Path.getWebAppRoot(); - String path = webInfoPath; - if(webInfoPath != null){ - int end = webInfoPath.indexOf("WEB-INF"); - if( end != -1){ - path = webInfoPath.substring(0,end - 1); - } - } - String mobileClientInfoFilePath = path + "/mobileClient/" + type + ".json"; + String mobileClientInfoFilePath = Path.getMobileClientInfoFilePath(type); String mobileClientInfo = null; if(FileUtils.fileExist(mobileClientInfoFilePath)){ Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/security/service/WebServiceManagerImpl.java =================================================================== diff -u -r12532 -r12562 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/security/service/WebServiceManagerImpl.java (.../WebServiceManagerImpl.java) (revision 12532) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/security/service/WebServiceManagerImpl.java (.../WebServiceManagerImpl.java) (revision 12562) @@ -104,6 +104,7 @@ import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.FileSystemHelper; import com.forgon.tools.MathTools; +import com.forgon.tools.Path; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; @@ -2290,13 +2291,14 @@ } @Override public String getMobileClientInfo() { - String mobileClientInfoFilePath = DigesterXMLTools.getWebAppRootPath() - + "/mobileClient/clientForWindowsMobile.json"; + String mobileClientInfoFilePath = Path.getMobileClientInfoFilePath("clientForWindowsMobile"); + //+ "/mobileClient/clientForWindowsMobile.json"; String mobileClientInfo = null; if(FileUtils.fileExist(mobileClientInfoFilePath)){ mobileClientInfo = FileSystemHelper .readAllLine(mobileClientInfoFilePath); }else{ + System.out.println("wince->getMobileClientInfo:" + mobileClientInfoFilePath + " 不存在"); mobileClientInfo = buildErrorMsgJsonResult(mobileClientInfoFilePath + " 不存在"); } return mobileClientInfo; Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r12532 -r12562 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 12532) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 12562) @@ -254,7 +254,8 @@ {hidden :SSTS_DiposableGoodsNode_Menu,text:"一次性物品管理",href:WWWROOT+'/disinfectsystem/assestManagement/diposableGoods/diposableGoodsView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_godownEntryNode_Menu,text:"入库单管理",href:WWWROOT+'/disinfectsystem/assestManagement/godownEntry/godownEntryView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_WarehouseEntryOut_Menu,text:"退库单管理",href:WWWROOT+'/disinfectsystem/assestManagement/godownEntry/godownOutView.jsp',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_stockTakeInfoNode_Menu,text:"一次性物品盘点管理",href:WWWROOT+'/disinfectsystem/stocktakeinfomanager/stockTakeInfoView.jsp?type='+encodeURIComponent('一次性物品'),hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_stockTakeInfoNode_Menu,text:"一次性物品盘点管理",href:WWWROOT+'/disinfectsystem/stocktakeinfomanager/stockTakeInfoView.jsp?type='+encodeURIComponent('一次性物品'),hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_godownEntryNode_Menu,text:"一次性物品采购计划",href:WWWROOT+'/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.jsp',hrefTarget:linkTarget,leaf:true} ] },{ text:"器械仓库管理", Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r12335 -r12562 --- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 12335) +++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 12562) @@ -792,7 +792,28 @@ + + + + + + + + + + + + + + + + + + + Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GoodPurchasePlanManager.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GoodPurchasePlanManager.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GoodPurchasePlanManager.java (revision 12562) @@ -0,0 +1,33 @@ +package com.forgon.disinfectsystem.diposablegoods.service; + +import java.util.Map; + +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchaseItem; +import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan; + +public interface GoodPurchasePlanManager { + /** + * 保存采购计划单 + * @param goodPurchasePlan 采购计划单 + * @param result + */ + public void saveGoodPurchasePlan(GoodPurchasePlan goodPurchasePlan,Map result); + + public GoodPurchasePlan getGoodPurchasePlanById(String id); + + public GoodPurchaseItem getGoodPurchaseItemById(String itemId); + /** + * 删除采购计划单 + * @param id + * @return + */ + public Map deleteGoodPurchasePlan(String id); + /** + * 更新采购计划单 + * @param original + * @param entry + * @param returnMsg + */ + public void updateGoodPurchasePlan(GoodPurchasePlan original, + GoodPurchasePlan entry, Map returnMsg); +} Index: forgon-core/src/main/java/com/forgon/serialnumber/model/SerialNum.java =================================================================== diff -u -r12331 -r12562 --- forgon-core/src/main/java/com/forgon/serialnumber/model/SerialNum.java (.../SerialNum.java) (revision 12331) +++ forgon-core/src/main/java/com/forgon/serialnumber/model/SerialNum.java (.../SerialNum.java) (revision 12562) @@ -37,6 +37,7 @@ public static final String TYPE_INSERT_GODOWN = "入库单"; public static final String TYPE_CLEAN = "清洗消毒"; public static final String TYPE_BARCODE = "条码"; + public static final String TYPE_GOOD_PURCHASE = TYPE_INSERT_GODOWN;//"采购计划单"; public SerialNum() { } Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/goodPurchasePlanView.jsp (revision 12562) @@ -0,0 +1,90 @@ +<%@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"%> +<%@ page import="com.forgon.tools.SpringBeanManger" %> +<% + String userName = AcegiHelper.getLoginUser().getUserFullName(); + request.setAttribute("userName",userName); + String departName = AcegiHelper.getLoginUser().getCurrentOrgUnitName(); + request.setAttribute("departName",departName); + String departCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + request.setAttribute("departCoding",departCoding); + //System.out.println(departName + " : " + departCoding); +%> + + + +入库单信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + + +
+ + + \ No newline at end of file