Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r13840 -r13846 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 13840) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 13846) @@ -63,6 +63,8 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.vo.ApplicationItemVO; +import com.forgon.systemsetting.model.HttpOption; +import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.GB2Alpha; import com.forgon.tools.GB2WB; import com.forgon.tools.MathTools; @@ -94,6 +96,12 @@ private PackingManager packingManager; + private HttpOptionManager httpOptionManager; + + public void setHttpOptionManager(HttpOptionManager httpOptionManager) { + this.httpOptionManager = httpOptionManager; + } + public void setPackingManager(PackingManager packingManager) { this.packingManager = packingManager; } @@ -1404,6 +1412,66 @@ objectDao.saveOrUpdate(invoicePlan); } + /** + * 终止多个申请单(同步方法) + * @param invoicePlanIds + * @param userName + * @param endCause + */ + public synchronized void terminateMultiInvoicePlans(String invoicePlanIds, String userName, String endCause){ + String applicationEndTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm"); + String remark = "【该申请单在" + + applicationEndTime + "被" + userName + + "终止"; + if (StringUtils.isNotBlank(endCause)){ + remark += ",原因:" + endCause; + } + remark += "】"; + + List invoicePlans = objectDao.findBySql(InvoicePlan.class.getSimpleName(), " where id in (" + invoicePlanIds + ")"); + if(CollectionUtils.isEmpty(invoicePlans)){ + throw new RuntimeException("所选申请单可能已全部被删除."); + } + //判断id的数量与实际查询到申请单数量是否一致 + int idAmount = StringUtils.countMatches(invoicePlanIds, ",") + 1; + if(invoicePlans.size() < idAmount){ + throw new RuntimeException("部分所选申请单可能已被删除."); + } + for(InvoicePlan invoicePlan : invoicePlans){ + switch (invoicePlan.getType()) { + case InvoicePlan.TYPE_BORROWINGSINGLE:{ + // 终止借物单前要先终止已填的还物申请单 + RecyclingApplication borrowApplication = (RecyclingApplication) invoicePlan; + List returnApplications = borrowApplication.getRecyclingApplications(); + for(InvoicePlan returnApplication : returnApplications){ + terminateInvoicePlan(returnApplication, userName, endCause); + } + break; + } + } + + invoicePlan.setApplicationEndTime(applicationEndTime); + invoicePlan.setApplicationEnd(userName); + invoicePlan.setEndCause(endCause); + + CssdUtils.appendRemarkOfInvoicePlan(invoicePlan, remark); + + List applicationItems = invoicePlan.getApplicationItems(); + terminateTousseItems(applicationItems); + objectDao.saveOrUpdate(invoicePlan); + } + + List endCauses = httpOptionManager.getHttpOptionTextById(HttpOption.SYSTEMSETTING_APPLICATION_END_CAUSE); + if(CollectionUtils.isNotEmpty(endCauses) && !endCauses.contains(endCause.trim())){ + HttpOption option = new HttpOption(); + option.setOptionListId(HttpOption.SYSTEMSETTING_APPLICATION_END_CAUSE); + option.setOptionText(endCause); + option.setOptionValue(endCause); + option.setSequence(httpOptionManager.getMaxSequence(HttpOption.SYSTEMSETTING_APPLICATION_END_CAUSE)+1); + httpOptionManager.saveOrUpdate(option); + } + } + // 终止申请物品为空的申请单 private void terminateEmptyInvoicePlan(InvoicePlan invoicePlan){ invoicePlan.setRecyclingStatus(InvoicePlan.STATUS_END); Index: ssts-web/src/main/webapp/disinfectsystem/common/terminateInvoicePlan.js =================================================================== diff -u -r12331 -r13846 --- ssts-web/src/main/webapp/disinfectsystem/common/terminateInvoicePlan.js (.../terminateInvoicePlan.js) (revision 12331) +++ ssts-web/src/main/webapp/disinfectsystem/common/terminateInvoicePlan.js (.../terminateInvoicePlan.js) (revision 13846) @@ -1,24 +1,43 @@ function terminateInvoicePlan(grid) { var records = grid.getSelectionModel().getSelections(); if (records.length == 0) { - showResult("请选择需要结束的申请单"); + showResult("请选择需要终止的申请单"); return false; } - if (records.length > 1) { - showResult("一次只能结束一个申请单"); - return false; - } var record = records[0]; + var id = record.data['id']; - var endStatus = record.data['endStatus']; - if(endStatus == "已终止"){ - showResult("该申请单已终止!"); - return false; + var url = '/disinfectSystem/invoicePlanAction!terminateInvoicePlan.do'; + if (records.length > 1) { + /*showResult("一次只能终止一个申请单"); + return false;*/ + + id = ""; + for(var i = 0;i < records.length;i++){ + + var endStatus = records[i].data['endStatus']; + if(endStatus == "已终止"){ + showResult("单号为" + records[i].data['serialNumber'] + "的申请单已终止!"); + return false; + } + id += records[i].data['id']; + if(i < records.length-1){ + id += ","; + } + } + url = '/disinfectSystem/invoicePlanAction!terminateMultiInvoicePlans.do'; + }else{ + var endStatus = records[0].data['endStatus']; + if(endStatus == "已终止"){ + showResult("该申请单已终止!"); + return false; + } } + var endCase = openModalWindow(WWWROOT+"/disinfectsystem/recyclingApplication/selectEndCause.jsp?time="+new Date(), "选择回收员", "760", "400"); if(endCase != null && endCase !=undefined && endCase.length > 0){ Ext.Ajax.request({ - url: WWWROOT + '/disinfectSystem/invoicePlanAction!terminateInvoicePlan.do', + url: WWWROOT + url, params: { recyclingAppId : id ,endCause:endCase}, success: function(response, options){ var result = JSON.parse(response.responseText); @@ -38,7 +57,8 @@ } }); }else{ - showResult("请选择终止申请单原因。"); + //在选择终止原因的页面已经有判断原因是否为空,所以本处不需要再提示. + //showResult("请选择终止申请单原因。"); return false; } } \ No newline at end of file Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java =================================================================== diff -u -r13381 -r13846 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java (.../InvoicePlanAction.java) (revision 13381) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java (.../InvoicePlanAction.java) (revision 13846) @@ -55,6 +55,7 @@ import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JsonPropertyFilter; import com.google.common.reflect.TypeToken; @@ -406,6 +407,9 @@ } } + /** + * 针对单个申请单的终止方法 + */ public void terminateInvoicePlan(){ JsonObject json = new JsonObject(); try { @@ -444,6 +448,41 @@ } } + /** + * 针对多个申请单的终止方法 + */ + public void terminateMultiInvoicePlans(){ + JsonObject json = new JsonObject(); + try { + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setContentType("text/html;charset=UTF-8"); + String invoicePlanIds = StrutsParamUtils.getPraramValue("recyclingAppId", ""); + if (StringUtils.isBlank(invoicePlanIds)){ + throw new RuntimeException("终止失败,找不到相关记录!"); + } + String userName = AcegiHelper.getLoginUser().getUserFullName(); + if (StringUtils.isBlank(endCause)) { + endCause = "不明"; + } + endCause = endCause.trim(); + invoicePlanManager.terminateMultiInvoicePlans(invoicePlanIds, userName, endCause); + json.addProperty("success", true); + } catch (Exception e) { + e.printStackTrace(); + json.addProperty("success", false); + json.addProperty("errMsg", e.getMessage()); + } + try { + StrutsParamUtils.getResponse().getWriter() + .println(json.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 终止选中的物品,科室申领界面打开一张申请单选中物品后点终止选中的物品时调用 + */ public void terminateTousseItems(){ try { HttpServletResponse response = StrutsParamUtils.getResponse(); @@ -482,7 +521,7 @@ public void iniInfo() { String id = StrutsParamUtils.getPraramValue("recyclingAppId", ""); - if (StringUtils.isNotBlank(id) && !id.equals("0")) { + if (StringUtils.isNotBlank(id) && DatabaseUtil.isPoIdValid(id)) { invoicePlan = invoicePlanManager.getInvoicePlanById(id); } invoice = new Invoice(); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r13840 -r13846 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 13840) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 13846) @@ -7,8 +7,6 @@ import java.util.List; import java.util.Set; -import net.sf.json.JSONArray; - import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -114,7 +112,15 @@ public void terminateTousseItemByIds(Collection tousseItemIds,String endCase); public void terminateTousseItems(Collection tousseItems); public void terminateInvoicePlan(InvoicePlan invoicePlan, String userName, String endCause); + /** + * 终止多个申请单 + * @param invoicePlanIds + * @param userName + * @param endCause + */ + public void terminateMultiInvoicePlans(String invoicePlanIds, String userName, String endCause); + /** * 计算并设置发货计划单的打印状态。如果invoicePlan没有包含TousseItem(申请项),invoicePlan中的所有TousseItem都已经终止,则不改变打印状态。 *
如果没有全部终止,则以去除终止项后的集合为标准,计算打印状态:剩余的集合中,物品都没有打印,则打印状态改为否;如果都已打印,则打印状态改为是;如果有 *
一部分打印,一部分没有打印,则打印状态改为部分打印