Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r19824 -r19992 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 19824) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 19992) @@ -281,6 +281,10 @@ } } + /** + * 把前台传过来的申请物品转成TousseItemVo对象 + * @return + */ private List getTousseItemVos() { String appGoodsStr = StrutsParamUtils.getRequest().getParameter("tousseInstanceIds"); String tousseInstanceInfos = StrutsParamUtils.getRequest().getParameter("tousseInstanceInfos"); @@ -321,8 +325,17 @@ return vos; } + /** + * 保存申请单 + */ public void saveRecyclingApplication() { - JSONObject jsonObject = createReturnApplicationOrRecyclingApplication(); + JSONObject jsonObject = null; + boolean isInterveneAmount = "true".equals(StrutsParamUtils.getPraramValue("isInterveneAmount", "").trim()); + if (isInterveneAmount) { + jsonObject = recyclingApplicationManager.interveneApplyAmount(recyclingApplication, oldRecyclingApplication, getTousseItemVos()); + } else { + jsonObject = createReturnApplicationOrRecyclingApplication(); + } StrutsResponseUtils.output(jsonObject); } @@ -356,7 +369,7 @@ } } - // 如果为true,则为提交申请单(默认值),否则保存申请单 + // 如果为true,则为提交申请单(默认值),否则暂存申请单 boolean committedStatus = "true".equals(StrutsParamUtils .getPraramValue("committedStatus", "true").trim()); String code = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); @@ -951,6 +964,7 @@ obj.put("recyclingAmount", tousseItem.getRecyclingAmount()); obj.put("urgentAmount", urgentAmount); obj.put("count", amountStr); + obj.put("countBackup", amountStr); //申请的数量备份起来 obj.put("price", tousseItem.getPrice()); obj.put("totalPrice", tousseItem.getRowPrice()); boolean isTerminated = BooleanUtils.isTrue(tousseItem.getIsTerminated()); Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationForm.js =================================================================== diff -u -r19816 -r19992 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationForm.js (.../goodsApplicationForm.js) (revision 19816) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationForm.js (.../goodsApplicationForm.js) (revision 19992) @@ -7,11 +7,12 @@ * @param hiddenReturnEditButton 是否隐藏返回修改按钮 * @param type 申请单类型 * @param tousseGroups 器械包分组(需要显示的器械包分组,用分号分隔,为空则显示全部的器械包分组) - * @param originalCommittedStatus 申请单状态 + * @param originalCommittedStatus 原申请单提交状态 * @param handleDepartCoding 处理科室的科室编码(修改才有值) + * @param isInterveneAmount 是否为干预数量操作 */ function comboApplication(id,hiddenCommitButton,hiddenSaveButton,hiddenReturnEditButton,type,tousseGroups, - originalCommittedStatus,handleDepartCoding) { + originalCommittedStatus,handleDepartCoding,isInterveneAmount) { //登录用户的当前科室编码 var departCoding = $Id('departCoding').value; @@ -131,7 +132,7 @@ var bbars = [printViewButtonJson,printButtonJson,{ id : 'commitBtn', text : '提交', - hidden : hiddenCommitButton, + hidden : hiddenCommitButton && !isInterveneAmount, handler : function(commitNew) { if (!form.getForm().isValid()) { showResult('请正确填写表单各值'); @@ -168,7 +169,7 @@ form.form.submit({ url : WWWROOT + '/disinfectSystem/recyclingApplicationAction!saveRecyclingApplication.do', method : 'POST', - params : {autoReturnTheBorrowingTousse:autoReturnTheBorrowingTousse}, + params : {autoReturnTheBorrowingTousse:autoReturnTheBorrowingTousse,isInterveneAmount:isInterveneAmount}, waitMsg : '正在保存数据,请稍候', waitTitle : '提交表单', success : function(form, action) { @@ -283,6 +284,7 @@ },{ id : 'commitNewBtn', text : '提交并新建', + hidden : hiddenCommitButton, handler : function() { var cmp = top.Ext4.getCmp("commitBtn"); cmp.handler(true); @@ -580,31 +582,37 @@ var depth = record.getDepth(); var isLeaf = record.get('leaf'); - if (hiddenCommitButton){ + if (hiddenCommitButton && !isInterveneAmount){ return false; } + if (isInterveneAmount && ('urgentAmount' == context.field || depth == 2)){ //干预的操作,不让修改加急数量和材料数量 + return false; + } + if (depth == 1){ + //非消毒物品 if (isLeaf){ return true; - } - // 点击消毒物品包数量的单元格 - else{ - // 是整包清洗或者编辑项为加急数量时允许编辑 + }else{ // 点击消毒物品包数量的单元格,是整包清洗或者编辑项为加急数量时允许编辑 if (record.get('isApplyEntireTousse') == "是" || 'urgentAmount' == context.field){ return true; }else{ showResult(record.get('name') + "只能按材料申请,请填写材料数量!"); return false; } } - }else if (depth == 2){ + }else if (depth == 2){ //消毒物品的材料 // 是整包清洗 var parentNode = record.parentNode; if (parentNode.get('isApplyEntireTousse') == "是"){ showResult(parentNode.get('name') + "只能按包申请,请填写包数量!"); return false; }else{ + if ('urgentAmount' == context.field) { + showResult("材料不能填加急数量!"); + return false; + } return true; } } @@ -639,6 +647,19 @@ } } + if (isInterveneAmount) { //干预申请数量的操作,改后的数量不能大于原来申请的数量 + if (!record.get('count')) { + record.set('count', context.originalValue); + showResult('数量必须大于0!'); + return; + } + if (record.get('count') > record.get('countBackup')) { + record.set('count', context.originalValue); + showResult('数量不能大于之前申请的数量'); + return; + } + } + record.set("totalPrice", isUndefinedOrNullOrEmpty(totalPrice) ? roundValue(context.value * record.get("price")):totalPrice); if (context.value == 0){ record.set("count", ""); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManagerImpl.java =================================================================== diff -u -r19526 -r19992 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManagerImpl.java (.../DepartmentAppTemplateManagerImpl.java) (revision 19526) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManagerImpl.java (.../DepartmentAppTemplateManagerImpl.java) (revision 19992) @@ -339,6 +339,7 @@ json.put("name", tousseName); json.put("unit", unit); json.put("count", amountStr); + json.put("countBackup", amountStr); //申请的数量备份起来 json.put("totalPrice", totalPriceStr); json.put("diposable", "否"); @@ -372,6 +373,7 @@ json.put("totalPrice", totalPriceStr); json.put("price", unitPrice); json.put("count", amountStr); + json.put("countBackup", amountStr); //申请的数量备份起来 return json; } Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationView.js =================================================================== diff -u -r19716 -r19992 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationView.js (.../goodsApplicationView.js) (revision 19716) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationView.js (.../goodsApplicationView.js) (revision 19992) @@ -81,7 +81,7 @@ //设置打开表单的对象 setOpenFormObj(tousseType, form, tousseGroups); if (!isUndefinedOrNullOrEmpty(form)){ - comboApplication(0,false,false,true,form, tousseGroups, false, ''); + comboApplication(0,false,false,true,form, tousseGroups, false, '',false); } } @@ -577,10 +577,10 @@ fields: [ {name : 'nodeId'}, - {name : 'id'}, + {name : 'id'}, //申请项的id {name : 'tousseDefinitionID'}, //物品id {name : 'name'}, //物品名称 - {name : 'count'}, + {name : 'count'}, //申请数量 {name : 'amout'}, //申请数量 {name : 'minUnit'}, {name : 'transferScale'}, //申领单位转换单位系数 @@ -1684,6 +1684,8 @@ } }; +//是否为干预操作 +var isInterveneAmount = false; /** * 根据返回的结果重置表单数据,并且打开对应的申请表单. * @param tempRecyclingApplication 申请单对象 @@ -1734,10 +1736,12 @@ var status = recyclingApplication.status; var type = recyclingApplication.type; - if(type == comboApplicationForm || type == recyclingCreateApplicationForm){ - comboApplication(recyclingApplication.id,hiddenCommitButton,hiddenSaveButton,hiddenReturnButton,type, '', recyclingApplication.committedStatus,recyclingApplication.handleDepartCoding); - }else if(type == tousseApplicationForm || type == diposableGoodsApplicationForm || type == disinfectGoodsApplicationForm){ - comboApplication(recyclingApplication.id,hiddenCommitButton,hiddenSaveButton,hiddenReturnButton,type, '', recyclingApplication.committedStatus,recyclingApplication.handleDepartCoding); + if(type == recyclingCreateApplicationForm + || type == comboApplicationForm + || type == tousseApplicationForm + || type == diposableGoodsApplicationForm + || type == disinfectGoodsApplicationForm){ + comboApplication(recyclingApplication.id,hiddenCommitButton,hiddenSaveButton,hiddenReturnButton,type, '', recyclingApplication.committedStatus,recyclingApplication.handleDepartCoding,isInterveneAmount); } //设置“申请单id”、“流水号”、“申请人”、“住院号”、“申请科室”、“结算科室”、“处理科室”、“申请时间”、“备注”、“项目”10个属性 @@ -1779,11 +1783,18 @@ } } - if(recyclingApplication.editable == 'false'){//待发货 + if(recyclingApplication.editable == 'false' || isInterveneAmount){ //不可编辑 + departComp.setReadOnly(true); + top.Ext4.getCmp("settleAccountsDepart").setReadOnly(true); + top.Ext4.getCmp("handleDepart").setReadOnly(true); + top.Ext4.getCmp("remark").setReadOnly(true); top.Ext4.getCmp('tempSaveBtn').disable(); top.Ext4.getCmp('package1').disable(); top.Ext4.getCmp('count1').disable(); + top.Ext4.getCmp('urgentAmount').disable(); top.Ext4.getCmp('addTousseBt').disable(); + top.Ext4.getCmp('departmentTemplate').disable(); + isInterveneAmount = false; } reloadGoodsComboStore(); @@ -2435,6 +2446,19 @@ }); } +/** + * 干预申请数量 + * @param id 申请单id + */ +function interfereApplyAmount(id, type) { + if (type == comboApplicationForm + || type == tousseApplicationForm + || type == diposableGoodsApplicationForm + || type == disinfectGoodsApplicationForm){ + isInterveneAmount = true; + RecyclingApplicationTableManager.getRecyclingApplicationAndVerifyEdit(id, setRecyclingApplicationForm); + } +} Ext.onReady(function() { Ext.QuickTips.init(); @@ -2524,6 +2548,20 @@ return inoviceButton+returnButton+returnGoodsButton+viewReturnGoodsButton; } }, + {header : "干预申请数量",width : 120 * fontSizeScale,renderer: function(v,p,record){ + var data = record.data; + var type = data.type; + var recyclingStatus = data.recyclingStatus; + var deliverStatus = data.deliverStatus; + if ((type == comboApplicationForm + || type == tousseApplicationForm + || type == diposableGoodsApplicationForm + || type == disinfectGoodsApplicationForm) + && recyclingStatus != awaitRecycling + && deliverStatus == awaitDeliver){ + return ""; + } + }}, {header : "预回收人",width : 65 * fontSizeScale,dataIndex : 'prepareRecycleOperator',hidden : sstsConfig.hiddenRecyclingPeople}, {header : "预回收确认人",width : 85 * fontSizeScale,dataIndex : 'prepareRecycleComfirmor',hidden : sstsConfig.hiddenPreRecyclingConfirmPeople}, {header : "预回收时间",width : 130 * fontSizeScale,dataIndex : 'prepareRecycleDateTime',hidden : sstsConfig.hiddenPreRecyclingTime} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r19829 -r19992 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 19829) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 19992) @@ -40,6 +40,11 @@ public List findIDCardForPackingTask(Long packingTaskId); + /** + * 删除装配任务(注意:同时会删除对应的IDCardInfoForPackingTask,并且也将对应的清洗筐的状态改成装配完成). + * @param task 将要被删除的装配任务 + * @param cause 删除的原因 + */ public void delete(PackingTask task,String cause); public void saveOrUpdate(PackingRecord packingRecord); @@ -69,10 +74,10 @@ */ public PackingTask getUnfinishedTask(Long sourceId,String basketBarcode,Long tousseDefinitionId,Integer taskType,boolean includeForeignTousse); /** - * 获取未装配的装配任务。用于更新 - * @param sourceId - * @param tousseDefinitionId - * @param taskType + * 获取未装配的装配任务。用于更新. + * @param sourceId 生成装配任务的单据id + * @param tousseDefinitionId 器械包定义id + * @param taskType 装配任务类型 * @return */ public List getUnfinishedTaskForUpdate(Long sourceId,Long tousseDefinitionId,Integer taskType); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r19526 -r19992 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 19526) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 19992) @@ -21,6 +21,7 @@ import com.forgon.disinfectsystem.exception.RecyclingRecordException; import com.forgon.disinfectsystem.print.vo.PrintSummaryVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ReturnGoodVo; +import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.tools.hibernate.BasePoManager; @@ -124,6 +125,11 @@ public JSONObject getPrintObjectByTimePeriod(JSONObject printScope, String fromTime, String toTime, String printUser); + /**保存申请单. + * @param application 申请单对象 + * @param newTousseItemVoList 申请单上新的物品集合,相对于修改前的物品 + * @param committedStatus 提交状态 + */ public String saveRecyclingApplication(RecyclingApplication application, Collection newTousseItemVoList, boolean committedStatus) throws RecyclingRecordException; @@ -288,4 +294,14 @@ * @return 返回的参数是具体的转换情况 */ List> getConvertAppAmountDetail(Long borrowApplicationId); + + /** + * 干预申请数量的操作. + * @param recyclingApplication 此次提交的申请单对象 + * @param oldRecyclingApplication 原来的申请的的vo对象,用于比较此次提交的申请单是否发生变化(用于写日志) + * @param newTousseItemVoList 此次提交的申请项 + * @return + */ + public JSONObject interveneApplyAmount(RecyclingApplication recyclingApplication, RecyclingApplicationVo oldRecyclingApplication, + Collection newTousseItemVoList); } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r19986 -r19992 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 19986) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 19992) @@ -1699,7 +1699,6 @@ */ @Override public void terminateTousseItemByIds(Collection tousseItemIds,String endCase){ - List list = new ArrayList(); if (tousseItemIds != null && tousseItemIds.size() > 0){ Criteria criteria = objectDao.getHibernateSession().createCriteria(TousseItem.class); @@ -1876,8 +1875,9 @@ } @Override public void terminateTousseItems(Collection tousseItems) { - // 若TousseItem与InvoicePlan直接关联,则取该TousseItem - // 否则从TousseItem关联的RecyclingRecord取InvoicePlan,再取名称对应的TousseItem + /* + * 1、找到这些被终止的申请项对应的申请单对象,如果找到多张抛异常 + */ tousseItems = CollectionUtils.collect(tousseItems, new Transformer() { @Override public TousseItem transform(final TousseItem input) { @@ -1889,9 +1889,7 @@ } } }); - CollectionUtils.filter(tousseItems, NotNullPredicate.notNullPredicate()); - Collection invoicePlans = CollectionUtils.collect( tousseItems, new Transformer() { @Override @@ -1910,40 +1908,36 @@ } InvoicePlan invoicePlan = invoicePlans2.iterator().next(); + + //2、终止对应的申请项 for(TousseItem tousseItem: tousseItems){ tousseItem.setIsTerminated(true); - // 删除关联的装配任务 deleteAssociatedPackingTask(tousseItem,"终止申请项删除装配任务"); } + //3、更新申请单的状态 computeAndSetStatus(invoicePlan); computeAndSetPrintStatus(invoicePlan); objectDao.saveOrUpdate(invoicePlan); switch (invoicePlan.getType()) { - case InvoicePlan.TYPE_APPLYING_FOR_RETURN_FORM: { - // 终止还物申请单时需重新计算对应借物单的状态 - RecyclingApplication borrowApplication = ((RecyclingApplication) invoicePlan) - .getParent(); - - if (borrowApplication != null){ - computeAndSetStatus(borrowApplication); - objectDao.saveOrUpdate(borrowApplication); + case InvoicePlan.TYPE_APPLYING_FOR_RETURN_FORM: { + // 终止还物申请单时需重新计算对应借物单的状态 + RecyclingApplication borrowApplication = ((RecyclingApplication) invoicePlan) + .getParent(); + + if (borrowApplication != null){ + computeAndSetStatus(borrowApplication); + objectDao.saveOrUpdate(borrowApplication); + } + break; } - break; - } } } - // 删除关联的装配任务 - private void deleteAssociatedPackingTask(Long sourceId, Long tousseDefinitionId){ - PackingTask task = packingManager.getUnfinishedTask(sourceId, null, - tousseDefinitionId, null); - objectDao.delete(task); - } /** - * 删除申请项关联的装配任务。如果已经回收,则查找回收项对应产生的装配任务。如果没有找到对应的装配任务。则再找申请单对应的装配任务 + * 删除申请项关联的装配任务。如果已经回收,则查找回收项对应产生的装配任务。如果没有找到对应的装配任务。则再找申请单对应的装配任务. * @param tousseItem */ private void deleteAssociatedPackingTask(TousseItem tousseItem,String cause){ @@ -1973,8 +1967,8 @@ } } /** - * 获取申请项对应的回收项 - * @param tousseItem + * 获取申请项对应的回收项. + * @param tousseItem 申请项 * @return */ private RecyclingItem getRecyclingItem(TousseItem tousseItem){ Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r19643 -r19992 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 19643) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 19992) @@ -35,6 +35,7 @@ import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.log4j.Logger; import org.hibernate.Query; import org.hibernate.Session; @@ -90,6 +91,7 @@ import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemUtils; import com.forgon.disinfectsystem.vo.ApplicationItemVO; +import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.log.enums.ApplicationLogStatusEnum; import com.forgon.log.model.Log; @@ -2969,16 +2971,10 @@ return items; } - /** - * @param application 申请单对象 - * @param newTousseItemVoList 申请单上新的物品集合,相对于修改前的物品 - * @param committedStatus 提交状态 - */ @Override public String saveRecyclingApplication(RecyclingApplication application, Collection newTousseItemVoList, boolean committedStatus) throws RecyclingRecordException{ - String returnMsg = ""; if (application.getId() != null && application.getId() == 0) { application.setId(null); @@ -2991,30 +2987,18 @@ Date currentDateTime = new Date(); - // 最后的修改时间(最初的提交时间) - Date lastModifiedTime = application.getSubmitTime(); - - //申请时间为空 或者 暂存后提交 申请时间赋值。并且要提交时间为空,即没有提交过,如果提交过该申请单,则不修改申请单的创建时间。 // 改成申请时间为空或者暂存后提交申请时间赋值,暂存后暂存后和提交后再提交不赋值, if(application.getApplicationTime() == null || (committedStatus && !oldCommittedStatus)){ - // if(application.getApplicationTime() == null || (committedStatus && !oldCommittedStatus && lastModifiedTime == null)){ application.setApplicationTime(currentDateTime); } - - // 如果为提交状态则设置提交时间。 - // 考虑到申请时间和提交时间概念上有些模糊,将提交时间改为了申请单的最后修改时间 - // if (committedStatus) { - // application.setSubmitTime(currentDateTime); - // } //改成无论提交或者暂存都要设置提交时间 application.setSubmitTime(currentDateTime); // 器械包的Item List newItemsList = application.getApplicationItems();; if(newItemsList == null){ newItemsList = new ArrayList(); - } - else { + }else { // 这里要输出一下newItemsList的size,让hibernate发送一下查询语句,不然这个list可能会出现重复项,这样会导致重新添加的敷料包不能成功添加到装配任务那里 logger.debug("newItemsList的大小是:" + newItemsList.size()); } @@ -3033,9 +3017,13 @@ returnMsg = mergeRecyclingApplication(application,committedStatus); return returnMsg; - } + /** + * 设置申请单的状态. + * @param application 申请单对象 + * @param committedStatus 是否为提交操作 + */ private void setApplicationStatus(RecyclingApplication application, boolean committedStatus) { if (InvoicePlan.TYPE_BORROWINGSINGLE.equals(application.getType())) { @@ -5193,4 +5181,56 @@ saveOrUpdate(application); return application; } + + @Override + public JSONObject interveneApplyAmount(RecyclingApplication recyclingApplication, RecyclingApplicationVo oldRecyclingApplication, + Collection newTousseItemVoList) { + if (!InvoicePlan.DELIVERSTATUS_AWAITDELIVER.equals(recyclingApplication.getDeliverStatus())) { + return JSONUtil.buildJsonObject(false, "发货状态为待发货才可以干预!"); + } + + String remark = ""; + List list = new ArrayList(); + for (TousseItemVo tousseItemVo : newTousseItemVoList) { + Long tousseItemId = tousseItemVo.getId(); + if (DatabaseUtil.isPoIdValid(tousseItemId)) { + TousseItem tousseItem = tousseItemManager.get(tousseItemId); + if (tousseItem != null) { + Integer amount = tousseItemVo.getAmount(); + Integer originalAmount = tousseItem.getAmount(); + if (amount != null && originalAmount != null && originalAmount > amount) { //只管“原来申请数量”大于“此次修改的数量的项 + tousseItem.setAmount(amount); + if (com.forgon.Constants.STR_YES.equals(tousseItem.getIsRecycling())) { //需要回收的项,发货以回收数量为准 + tousseItem.setRecyclingAmount(amount); + } + remark += String.format("物品(%s)申请数量从%s改成%s;", tousseItem.getTousseName(), originalAmount, amount); + } + list.add(tousseItem); + } + } + } + + //写备注 + if (StringTools.isNotBlank(remark)) { + remark = remark.substring(0, remark.length() - 1); + String interveneTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm"); + String userName = AcegiHelper.getLoginUserFullName(); + remark = String.format("【该申请单于%s被%s干预了,具体:[%s]】", interveneTime, userName, remark); + } + CssdUtils.appendRemarkOfInvoicePlan(recyclingApplication, remark); + + recyclingApplication.setApplicationItems(list); + objectDao.save(recyclingApplication); + + //写日志 + String compareResult = new RecyclingApplicationComparator().doCompare(oldRecyclingApplication, + invoicePlanManager.invoicePlan2RecyclingApplicationVo(recyclingApplication, false), newTousseItemVoList); + //保存申请单后插入更新的日志 + if (StringUtils.isNotBlank(compareResult)){ + applicationLogManager.saveApplicationLog(recyclingApplication, compareResult, ApplicationLogStatusEnum.INTERVENE); + } + + return JSONUtil.buildJsonObject(true, "干预成功!"); + } + } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r19921 -r19992 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 19921) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 19992) @@ -4451,8 +4451,8 @@ } /** - * 修改清洗篮筐状态 - * @param basketBarcodeStr 清洗篮筐条码 + * 修改清洗篮筐状态. + * @param basketBarcodeStr 清洗篮筐条码(如果有多个用分号隔开) */ private void updateContainerStatus(String basketBarcodeStr){ if(StringUtils.isNotBlank(basketBarcodeStr)){ Index: forgon-core/src/main/java/com/forgon/log/enums/ApplicationLogStatusEnum.java =================================================================== diff -u -r18606 -r19992 --- forgon-core/src/main/java/com/forgon/log/enums/ApplicationLogStatusEnum.java (.../ApplicationLogStatusEnum.java) (revision 18606) +++ forgon-core/src/main/java/com/forgon/log/enums/ApplicationLogStatusEnum.java (.../ApplicationLogStatusEnum.java) (revision 19992) @@ -13,7 +13,9 @@ PART_TERMINATE(2, "部分终止"), - TERMINATE(3, "终止"); + TERMINATE(3, "终止"), + + INTERVENE(4, "干预申请数量"); private Integer status;