Index: ssts-web/src/main/java/test/forgon/disinfectsystem/CSSDTestDataProcess.java =================================================================== diff -u -r19972 -r20089 --- ssts-web/src/main/java/test/forgon/disinfectsystem/CSSDTestDataProcess.java (.../CSSDTestDataProcess.java) (revision 19972) +++ ssts-web/src/main/java/test/forgon/disinfectsystem/CSSDTestDataProcess.java (.../CSSDTestDataProcess.java) (revision 20089) @@ -2711,6 +2711,8 @@ disposableGoods1.setSpecification("5ML"); disposableGoods1.setReferencePrice(1.5); disposableGoods1.setType("注射器"); + disposableGoods1.setInventorySerialNumber("WZ-01"); + disposableGoods1.setMinApplyAmount(100); diposableGoodsManager.save(disposableGoods1); // 注射器【10ML】 DisposableGoods disposableGoods2 = new DisposableGoods(); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/service/RecyclingApplicationManagerTests.java =================================================================== diff -u -r19493 -r20089 --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/service/RecyclingApplicationManagerTests.java (.../RecyclingApplicationManagerTests.java) (revision 19493) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/service/RecyclingApplicationManagerTests.java (.../RecyclingApplicationManagerTests.java) (revision 20089) @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -15,13 +16,18 @@ import org.apache.commons.collections4.map.MultiValueMap; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; import org.testng.annotations.Test; +import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.inventorymanagement.model.HrpInvoicePlan; +import com.forgon.disinfectsystem.inventorymanagement.model.HrpTousseItem; import com.forgon.disinfectsystem.printRecyclingApplicationConfig.service.PrintConfigManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; @@ -189,4 +195,158 @@ assertFalse(items5.contains(tousse1)); } + + /** + * 同步HRP的一次性物品申请单的测试,主要有以下五种场景: + * 1、第一张单:申请单号已经存在 预期结果:同步失败 + * 2、第二张单:申请科室不存在 预期结果:同步失败 + * 3、第三张单:申请的物品{名称A[规格A]有、纱块[6*8]有、名称B[规格B]没有} 预期结果:同步成功 + * 4、第四张单:申请的物品{名称C[规格C]、名称D[规格D]、名称E[规格E]全都没有} 预期结果:同步成功 + * 5、第五张单:申请的物品{名称C[规格C]、名称D[规格D]、名称E[规格E]全都没有} 预期结果:同步失败 + * + */ + @Test + public void testSyncHrpDisposableGoodsInvoicePlan() { + String remark = "备注"; + Date applicationTime = new Date(); + String applicant = "admin"; + String unit = "支"; + Integer serialNumber = 10000; + + List hrpInvoicePlans = new ArrayList(); + + //1、第一张单:申请单号已经存在 预期结果:同步失败 + List items1 = new ArrayList(); + hrpInvoicePlans.add(createHrpInvoicePlan(applicant, applicationTime, Constants.ORG_UNIT_CODE_OR, remark, ++ serialNumber, items1)); + + //2、第二单:申请科室不存在 预期结果:同步失败 + List items2 = new ArrayList(); + hrpInvoicePlans.add(createHrpInvoicePlan(applicant, applicationTime, null, remark, ++ serialNumber, items2)); + + //3、第三张单:申请的物品{名称A[规格A]有、纱块[6*8]有、名称B[规格B]没有} 预期结果:同步成功 + List items3 = new ArrayList(); + items3.add(createHrpTousseItem(10, "WZ-01", "名称A", "规格A", unit)); + items3.add(createHrpTousseItem(10, "WZ-02", "纱块", "6*8", unit)); + items3.add(createHrpTousseItem(10, "WZ-03", "名称B", "规格B", unit)); + hrpInvoicePlans.add(createHrpInvoicePlan(applicant, applicationTime, Constants.ORG_UNIT_CODE_OR, remark, ++ serialNumber, items3)); + + //4、第四张单:申请的物品{名称C[规格C]、名称D[规格D]、名称E[规格E]全都没有} 预期结果:同步成功 + List items4 = new ArrayList(); + items4.add(createHrpTousseItem(10, "WZ-04", "名称C", "规格C", unit)); + items4.add(createHrpTousseItem(10, "WZ-05", "名称D", "规格D", unit)); + items4.add(createHrpTousseItem(10, "WZ-06", "名称E", "规格E", unit)); + hrpInvoicePlans.add(createHrpInvoicePlan(applicant, applicationTime, Constants.ORG_UNIT_CODE_OR, remark, ++ serialNumber, items4)); + + //5、第五张单:申请的物品{名称C[规格C]、名称D[规格D]、名称E[规格E]全都没有} 预期结果:同步失败 + List items5 = new ArrayList(); + items5.add(createHrpTousseItem(10, "WZ-07", "注射器", "20ML", unit)); + items5.add(createHrpTousseItem(10, "WZ-08", "一次性使用吸痰管", "12#", unit)); + items5.add(createHrpTousseItem(10, "WZ-09", "test10ml注射器", "小号", unit)); + hrpInvoicePlans.add(createHrpInvoicePlan(applicant, applicationTime, Constants.ORG_UNIT_CODE_OR, remark, ++ serialNumber, items5)); + + InvoicePlan ip = new InvoicePlan(); + ip.setSerialNumber("10001"); + objectDao.save(ip); + + JSONObject result = recyclingApplicationManager.syncHrpDisposableGoodsInvoicePlan(hrpInvoicePlans); + + + //同步失败的单 + assertTrue(invoicePlanManager.getInvoicePlanBySerialNumber("10001") != null); + assertTrue(invoicePlanManager.getInvoicePlanBySerialNumber("10002") == null); + assertTrue(invoicePlanManager.getInvoicePlanBySerialNumber("10004") == null); + + //同步成功的单 + InvoicePlan ip3 = invoicePlanManager.getInvoicePlanBySerialNumber("10003"); + InvoicePlan ip5 = invoicePlanManager.getInvoicePlanBySerialNumber("10005"); + + //断言ip3 + assertEquals(ip3.getApplicant(), applicant); + assertEquals(ip3.getDepart(), Constants.ORG_UNIT_NAME_OR); + assertEquals(ip3.getDepartCoding(), Constants.ORG_UNIT_CODE_OR); + assertEquals(ip3.getType(), InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM); + assertEquals(ip3.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + assertEquals(ip3.getIncludeInvoiceItems(), new Integer(1)); + assertEquals(ip3.getIncludeRecyclingItems(), new Integer(0)); + + List appItem3 = ip3.getApplicationItems(); + assertTrue(appItem3.size() == 2); + for (TousseItem tousseItem : appItem3) { + assertEquals(tousseItem.getTousseType(), TousseItem.TYPE_DIPOSABLE_GOODS); + if ("名称A[规格A]".equals(tousseItem.getTousseName())) { + assertTrue(tousseItem.getAmount() == 100); + } else if ("纱块[6*8]".equals(tousseItem.getTousseName())) { + assertTrue(tousseItem.getAmount() == 10); + } else { + assertTrue(1 == 2); + } + } + + //断言ip5 + assertEquals(ip5.getApplicant(), applicant); + assertEquals(ip5.getDepart(), Constants.ORG_UNIT_NAME_OR); + assertEquals(ip5.getDepartCoding(), Constants.ORG_UNIT_CODE_OR); + assertEquals(ip5.getType(), InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM); + assertEquals(ip5.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + assertEquals(ip5.getIncludeInvoiceItems(), new Integer(1)); + assertEquals(ip5.getIncludeRecyclingItems(), new Integer(0)); + + List appItem5 = ip5.getApplicationItems(); + assertTrue(appItem5.size() == 3); + for (TousseItem tousseItem : appItem5) { + if ("注射器[20ML]".equals(tousseItem.getTousseName()) + || "一次性使用吸痰管[12#]".equals(tousseItem.getTousseName()) + || "test10ml注射器[小号]".equals(tousseItem.getTousseName())) { + assertEquals(tousseItem.getTousseType(), TousseItem.TYPE_DIPOSABLE_GOODS); + assertTrue(tousseItem.getAmount() == 10); + } else { + assertTrue(1 == 2); + } + } + logger.debug(result); + } + + /** + * 创建HrpTousseItem + * @param amount 申请的数量 + * @param inventorySerialNumber 物资编码 + * @param name 名称 + * @param specification 规格 + * @param unit 单位 + * @return + */ + private HrpTousseItem createHrpTousseItem(Integer amount, String inventorySerialNumber, + String name, String specification, String unit) { + HrpTousseItem item = new HrpTousseItem(); + item.setAmount(amount); + item.setInventorySerialNumber(inventorySerialNumber); + item.setName(name); + item.setSpecification(specification); + item.setUnit(unit); + return item; + } + + /** + * 创建HrpInvoicePlan + * @param applicant 申请人 + * @param applicationTime 申请时间 + * @param departCoding 申请科室编码 + * @param remark 备注 + * @param serialNumber 申请单号 + * @param items 申请项 + * @return + */ + private HrpInvoicePlan createHrpInvoicePlan(String applicant, Date applicationTime, + String departCoding, String remark, Integer serialNumber, List items) { + HrpInvoicePlan hrpInvoicePlan = new HrpInvoicePlan(); + hrpInvoicePlan.setApplicant(applicant); + hrpInvoicePlan.setApplicationTime(applicationTime); + hrpInvoicePlan.setDepartCoding(departCoding); + hrpInvoicePlan.setRemark(remark); + hrpInvoicePlan.setSerialNumber(serialNumber.toString()); + hrpInvoicePlan.setItems(items); + return hrpInvoicePlan; + } + + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r19992 -r20089 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 19992) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 20089) @@ -19,6 +19,7 @@ import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.exception.RecyclingRecordException; +import com.forgon.disinfectsystem.inventorymanagement.model.HrpInvoicePlan; import com.forgon.disinfectsystem.print.vo.PrintSummaryVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ReturnGoodVo; import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; @@ -62,7 +63,8 @@ public List findSignedRecyclingApplicationByDepartCoding( String deparCoding); /** - * 使用记录转换的申请单是否需要发货 + * 判断使用记录转换的申请单是否需要发货. + * @param application 申请单对象{@link RecyclingApplication} * @return */ public boolean isUseRecord2ApplicationNeedInvoice(RecyclingApplication application); @@ -127,8 +129,8 @@ /**保存申请单. * @param application 申请单对象 - * @param newTousseItemVoList 申请单上新的物品集合,相对于修改前的物品 - * @param committedStatus 提交状态 + * @param newTousseItemVoList 申请单上新的物品集合,{@link TousseItemVo} + * @param committedStatus 提交状态(true代表是已提交,false表示暂存) */ public String saveRecyclingApplication(RecyclingApplication application, Collection newTousseItemVoList, @@ -304,4 +306,12 @@ */ public JSONObject interveneApplyAmount(RecyclingApplication recyclingApplication, RecyclingApplicationVo oldRecyclingApplication, Collection newTousseItemVoList); + + /** + * 同步HRP的一次性物品申请单. + * @param hrpInvoicePlans HRP那边的申请单VO集合 + * @return 返回格式:{total:"同步的总数",successCount:"同步成功的数量",failureCount:"同步失败的数量",successDetail:"同步成功的说明",failureDetail:"同步失败的说明"} + */ + public JSONObject syncHrpDisposableGoodsInvoicePlan(List hrpInvoicePlans); + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r20027 -r20089 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20027) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20089) @@ -80,6 +80,8 @@ import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.exception.RecyclingRecordException; +import com.forgon.disinfectsystem.inventorymanagement.model.HrpInvoicePlan; +import com.forgon.disinfectsystem.inventorymanagement.model.HrpTousseItem; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.print.vo.PrintPageVo; import com.forgon.disinfectsystem.print.vo.PrintRowVo; @@ -3034,11 +3036,9 @@ if (committedStatus && (StringUtils.isBlank(application.getDeliverStatus()) || InvoicePlan.DELIVERSTATUS_AWAITDELIVER .equals(application.getDeliverStatus()))) { - boolean needInvoice = isUseRecord2ApplicationNeedInvoice(application); if(needInvoice){ application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); -// invoicePlanManager.computeAndSetInvoiceStatus(application); }else{ application.setDeliverStatus(""); } @@ -3053,13 +3053,18 @@ } } + /** + * 设置申请项. + * @param application 申请单对象 + * @param tousseItemVos 申请项的vo(此次提交的) + * @param tousseItemList 申请项(此次提交之前的申请项) + */ private void setApplicationItems(RecyclingApplication application, Collection tousseItemVos,List tousseItemList) { Integer includeRecyclingItems = InvoicePlan.SIGNED_FALSE; Integer includeInvoiceItems = InvoicePlan.SIGNED_FALSE; if (tousseItemVos != null) { - double tpf = supplyRoomConfigManager.getTousseFluctuationPercent(); double dpf = supplyRoomConfigManager.getDisposableGoodsFluctuationPercent(); @@ -3081,8 +3086,8 @@ } else { tousseItem = tousseItemManager.get(""+id); } - //如果urgentAmount不为空,则设置urgentAmount数量和状态 - if (newItemVo.getUrgentAmount() != null){ + //如果urgentAmount大于零,则设置urgentAmount数量和状态 + if (newItemVo.getUrgentAmount() != null && newItemVo.getUrgentAmount() > 0){ tousseItem.setUrgentAmount(newItemVo.getUrgentAmount()); tousseItem.setUrgent(com.forgon.Constants.STR_YES); } @@ -3133,10 +3138,6 @@ .equals(td.getIsRecycling())) { includeRecyclingItems = InvoicePlan.SIGNED_TRUE; } - // if (TousseDefinition.PACKAGE_TYPE_DRESSING - // .equals(td.getTousseType())) { - // includeInvoiceItems = InvoicePlan.SIGNED_TRUE; - // } //(不回收,或者回收状态是空)且没有被终止includeInvoiceItems的值设为1 if ((isRecycling == null || com.forgon.Constants.STR_NO.equals(isRecycling)) && BooleanUtils.isFalse(tousseItem.terminated())){ includeInvoiceItems = InvoicePlan.SIGNED_TRUE; @@ -3147,10 +3148,6 @@ includeInvoiceItems = InvoicePlan.SIGNED_TRUE; } tousseItem.setExpressRecycling(TousseDefinition.STR_NO); - // JSONObject goodsNameAndSp = CssdUtils.getGoodsNameAndSp(tousseItem.getTousseName()); - // String diposableName = goodsNameAndSp.optString("materialName"); - // String sp = goodsNameAndSp.optString("specification");; - // DisposableGoods diposableGoods = diposableGoodsManager.getDisposableGoodsByName(diposableName, sp); //根据一次性物品的id来查找该一次性物品 Long diposableGoodId = tousseItem.getDisposableGoodsId(); DisposableGoods disposableGoods = diposableGoodsManager.get(diposableGoodId); @@ -5282,4 +5279,170 @@ return JSONUtil.buildJsonObject(true, "干预成功!"); } + @Override + public JSONObject syncHrpDisposableGoodsInvoicePlan(List hrpInvoicePlans) { + JSONObject resultObject = new JSONObject(); + if (CollectionUtils.isNotEmpty(hrpInvoicePlans)) { + List successDetail = new ArrayList(); + List failureDetail = new ArrayList(); + for (HrpInvoicePlan hrpInvoicePlan : hrpInvoicePlans) { + String departCoding = hrpInvoicePlan.getDepartCoding(); + String serialNumber = hrpInvoicePlan.getSerialNumber(); + + String failureCause = ""; + String goodsDetail = ""; + if (objectDao.countBySql(String.format("select count(*) from invoicePlan ip where ip.serialNumber='%s'", serialNumber)) <= 0) { + ResultSet result = objectDao.executeSql(String.format("select name from OrgUnit where orgUnitCoding='%s'", departCoding)); + try { + if (result.next()) { + InvoicePlan invoicePlan = null; + + List applicationItems = new ArrayList(); + Collection items = hrpInvoicePlan.getItems(); + for (HrpTousseItem item : items) { + String inventorySerialNumber = item.getInventorySerialNumber(); + String name = item.getName(); + String specification = item.getSpecification(); + String unit = item.getUnit(); + Integer amount = item.getAmount(); + + DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsByInventorySerialNumber(inventorySerialNumber); + if (disposableGoods != null) { + if (!StringTools.equals(name, disposableGoods.getName()) || !StringTools.equals(specification, disposableGoods.getSpecification())) { + goodsDetail = String.format("%sid=%s的物品的物品名称由%s[%s]被改成%s[%s];", goodsDetail, disposableGoods.getId(), disposableGoods.getName(), disposableGoods.getSpecification(), name, specification); + + disposableGoods.setOrginalName(disposableGoods.getName()); + disposableGoods.setOrginalSpecification(disposableGoods.getSpecification()); + disposableGoods.setName(name); + disposableGoods.setSpecification(specification); + diposableGoodsManager.updateDisposableGoods_TRANS_REQUIRED(disposableGoods); + } + } else { + disposableGoods = diposableGoodsManager.get(name, specification); + if (disposableGoods != null && !StringTools.equals(inventorySerialNumber, disposableGoods.getInventorySerialNumber())) { + goodsDetail = String.format("%sid=%s的物品的物资编码由%s被改成%s;", goodsDetail, disposableGoods.getId(), disposableGoods.getInventorySerialNumber(), inventorySerialNumber); + disposableGoods.setInventorySerialNumber(inventorySerialNumber); + } + } + + if (disposableGoods != null) { + if (invoicePlan == null) { + hrpInvoicePlan.setDepart(StringTools.defaultString(result.getString("name"))); + invoicePlan = createInvoicePlanByHrpInvoicePlan(hrpInvoicePlan); + } + + disposableGoods.setUnit(unit); + objectDao.saveOrUpdate(disposableGoods); + + TousseItem tousseItem = new TousseItem(); + tousseItem.setTousseName(CssdUtils.getDiposableGoodsName(disposableGoods)); + tousseItem.setDisposableGoodsId(disposableGoods.getId()); + tousseItem.setDiposable(com.forgon.Constants.STR_YES); + tousseItem.setTousseType(TousseItem.TYPE_DIPOSABLE_GOODS); + tousseItem.setUnit(disposableGoods.getUnit()); + tousseItem.setAmount(transformApplyAmount(amount, disposableGoods.getMinApplyAmount())); + tousseItem.setExpressRecycling(TousseDefinition.STR_NO); + //设置单价,和小计 + Double price = disposableGoods.getReferencePrice(); + BigDecimal bg = MathTools.mul(price, supplyRoomConfigManager.getDisposableGoodsFluctuationPercent()); + price = bg == null ? 0.0 : bg.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); + Double rowPrice = MathTools.mul(price,tousseItem.getAmount()).doubleValue(); + tousseItem.setPrice(price); + tousseItem.setRowPrice(rowPrice); + tousseItem.setInvoicePlan(invoicePlan); + + applicationItems.add(tousseItem); + } else { + goodsDetail = String.format("%s物品[%s=%s[%s]]不存在;", goodsDetail, inventorySerialNumber, name, specification); + } + } + + if (invoicePlan != null) { + invoicePlan.setApplicationItems(applicationItems); + objectDao.saveOrUpdate(invoicePlan); + } else { + failureCause = "此申请单申请的全部物品都不存在"; + } + } else { + failureCause = "此申请单的申请科室不存在"; + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + } else { + failureCause = "此申请单已经存在了"; + } + + if (StringTools.isNotBlank(failureCause)) { + failureDetail.add(String.format("申请单号%s[%s]", serialNumber, failureCause)); + } else { + if (StringTools.isNotBlank(goodsDetail)) { + goodsDetail = String.format("[%s]", goodsDetail.substring(0, goodsDetail.length() - 1)); + } + successDetail.add(String.format("申请单号%s%s", serialNumber, goodsDetail)); + } + } + + resultObject.put("total", hrpInvoicePlans.size()); + resultObject.put("successCount", successDetail.size()); + resultObject.put("failureCount", failureDetail.size()); + resultObject.put("successDetail", successDetail.toString()); + resultObject.put("failureDetail", failureDetail.toString()); + + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_SYNC, Log.TYPE_ADD, resultObject); + } + return resultObject; + } + + /** + * 根据HrpInvoicePlan创建InvoicePlan. + * @param hrpInvoicePlan {@link HrpInvoicePlan} + * @return + */ + private InvoicePlan createInvoicePlanByHrpInvoicePlan(HrpInvoicePlan hrpInvoicePlan) { + InvoicePlan invoicePlan; + invoicePlan = new InvoicePlan(); + invoicePlan.setSerialNumber(hrpInvoicePlan.getSerialNumber()); + invoicePlan.setDepart(hrpInvoicePlan.getDepart()); + invoicePlan.setDepartCoding(hrpInvoicePlan.getDepartCoding()); + invoicePlan.setApplicant(hrpInvoicePlan.getApplicant()); + invoicePlan.setApplicationTime(hrpInvoicePlan.getApplicationTime()); + invoicePlan.setRemark(hrpInvoicePlan.getRemark()); + + SupplyRoomConfig firstSupplyRoomConfig = supplyRoomConfigManager.getFirstSupplyRoomConfig(); + invoicePlan.setType(InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM); + invoicePlan.setCommittedStatus(true); + invoicePlan.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + invoicePlan.setHandleDepart(firstSupplyRoomConfig.getOrgUnitName()); + invoicePlan.setHandleDepartCoding(firstSupplyRoomConfig.getOrgUnitCoding()); + invoicePlan.setIncludeInvoiceItems(1); + invoicePlan.setIncludeRecyclingItems(0); + invoicePlan.setOrderByFiled(InvoicePlan.ORDERBYFIELD_ONE); + invoicePlan.setSequence(supplyRoomConfigManager.getOrgUnitSequence(hrpInvoicePlan.getDepartCoding())); + invoicePlan.setSettleAccountsDepart(hrpInvoicePlan.getDepart()); + invoicePlan.setSettleAccountsDepartCoding(hrpInvoicePlan.getDepartCoding()); + invoicePlan.setSpelling(GB2Alpha.string2Alpha(hrpInvoicePlan.getDepart())); + invoicePlan.setWbCode(GB2WB.getWBCode(hrpInvoicePlan.getDepart())); + invoicePlan.setSubmitTime(hrpInvoicePlan.getApplicationTime()); + objectDao.save(invoicePlan); + return invoicePlan; + } + + + /** + * 转换申请数量(注意此方法给本类的syncHrpDisposableGoodsInvoicePlan方法用,其他方法不适用). + * 转换规则例子:某物品最小申请数量是100,当申请数量是10,即转成100,当申请数量是101,即转成200 + * @param applyAmount 申请数量 + * @param minApplyAmount 最小申请数量 + * @return + */ + private Integer transformApplyAmount(Integer applyAmount, Integer minApplyAmount) { + if (applyAmount != null && applyAmount > 0 && minApplyAmount != null && minApplyAmount > 0) { + return MathTools.mul(minApplyAmount.doubleValue(), Math.ceil(applyAmount.doubleValue()/minApplyAmount.doubleValue())).intValue(); + } + return applyAmount != null ? applyAmount : 0; + } + }