Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r12858 -r12938 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12858) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12938) @@ -42,6 +42,7 @@ import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; +import com.forgon.disinfectsystem.basedatamanager.invoice.service.InvoiceUtils; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; @@ -500,57 +501,7 @@ */ @Override public void updateInvoiceTotalPrice(Invoice invoice) { - List tousseInstanceList = invoice.getTousseInstances(objectDao); - List diposableGoodsList = invoice - .getDiposableGoodsItems(); - Double totalPrice = 0.0; - for (TousseInstance tousseInstance : tousseInstanceList) { - TousseDefinition tousseDefinition = tousseInstance - .getTousseDefinition(); - if (TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseDefinition - .getTousseType())) { - if (invoice.getInvoicePlan() instanceof ForeignTousseApplication) { - ForeignTousseApplication foreignTousseApplication = (ForeignTousseApplication) invoice - .getInvoicePlan(); - List applicationItems = foreignTousseApplication - .getApplicationItems(); - if (applicationItems != null) { - String tousseName = applicationItems.get(0) - .getTousseName(); - String supplier = applicationItems.get(0) - .getSupplierName(); - if (StringUtils.isNotBlank(tousseName)) { - TousseDefinition foreignTousseDefinition = tousseDefinitionManager - .getForeignTousseDefinitionByTousseItem(applicationItems.get(0)); - totalPrice = new BigDecimal(foreignTousseDefinition - .getPrice().toString()).add( - new BigDecimal(totalPrice.toString())) - .doubleValue(); - } - } - } - } else if (TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY - .equals(tousseDefinition.getTousseType()) - || InvoicePlan.TYPE_PROXYDISINFECTION.equals(invoice - .getInvoicePlan().getType())) { - totalPrice = new BigDecimal(tousseDefinition - .getProxyDisinfectionPrice().toString()).add( - new BigDecimal(totalPrice.toString())).doubleValue(); - } else { - totalPrice = new BigDecimal(tousseDefinition.getPrice() - .toString()).add(new BigDecimal(totalPrice.toString())) - .doubleValue(); - } - } - - for (DiposableGoodsItem diposableGoodsItem : diposableGoodsList) { - totalPrice = new BigDecimal(totalPrice.toString()).add( - new BigDecimal(diposableGoodsItem.getPrice().toString()) - .multiply(new BigDecimal(diposableGoodsItem - .getAmount().toString()))).doubleValue(); - } - - invoice.setTotalPrice(totalPrice); + InvoiceUtils.updateInvoiceTotalPrice(objectDao, invoice); } /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java =================================================================== diff -u -r12331 -r12938 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 12331) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 12938) @@ -5,6 +5,9 @@ package com.forgon.disinfectsystem.basedatamanager.toussedefinition.service; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; /** * @author jeffli @@ -38,4 +41,27 @@ } return tousseName; } + + public static TousseDefinition getForeignTousseDefinitionByTousseItem(ObjectDao objectDao,TousseItem tousseItem){ + String tousseName = tousseItem.getTousseName(); + Long tousseDefinitionID = tousseItem.getTousseDefinitionId(); + Long invoicePlanID = tousseItem.getInvoicePlanID(); + TousseDefinition td = null; + if(DatabaseUtil.isPoIdValid(tousseDefinitionID)){ + td = getTousseDefinitionById(objectDao,tousseDefinitionID.toString()); + }else if(DatabaseUtil.isPoIdValid(invoicePlanID)){ + td = getTousseDefinitionByNameTypeAndAPPID(objectDao,tousseName, TousseDefinition.PACKAGE_TYPE_FOREIGN, invoicePlanID.toString()); + } + return td; + } + public static TousseDefinition getTousseDefinitionById(ObjectDao objectDao,String id) { + return (TousseDefinition) objectDao.getByProperty( + TousseDefinition.class.getSimpleName(), "id", Long.valueOf(id)); + } + + public static TousseDefinition getTousseDefinitionByNameTypeAndAPPID(ObjectDao objectDao,String tousseName,String tousseType,String appid){ + String sql = String.format("where po.name = '%s' and po.tousseType='%s' and po.invoicePlanID=%s ", tousseName,tousseType,appid); + return (TousseDefinition) objectDao.getBySql( + TousseDefinition.class.getSimpleName(), sql); + } } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r12838 -r12938 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12838) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12938) @@ -24,6 +24,7 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.basedatamanager.invoice.service.InvoiceUtils; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.diposablegoods.util.DisposableGoodsUtils; @@ -38,6 +39,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsItem; import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord; @@ -1194,7 +1196,18 @@ } } } - // 汇总invoiceItem,更新Invoice,TODO,暂时无法做到更新发货单,因为涉及到太多的不同类型金额汇总,目前也没有地方用到发货单价格汇总 + // 更新Invoice,TODO,暂时无法做到更新发货单,因为涉及到太多的不同类型金额汇总,目前也没有地方用到发货单价格汇总 + String invoiceItemsIdsSql = String + .format(" select distinct d.invoiceItemID from %s d where d.identificationID=%s and d.invoiceItemID is not null ",DiposableGoodsItem.class.getSimpleName(), identificationID); + String invoiceSql = String + .format(" where po.id in(select it.invoiceID from %s it where it.id in(%s)) ",InvoiceItem.class.getSimpleName(), invoiceItemsIdsSql); + List invoices = objectDao.findBySql(Invoice.class.getSimpleName(),invoiceSql); + if(invoices != null){ + for (Invoice invoice : invoices) { + InvoiceUtils.updateInvoiceTotalPrice(objectDao, invoice); + } + } + Set returnGoodsRecords = new HashSet(); // 汇总DiposableGoodsItem,更新ReturnGoodsItem { @@ -1228,6 +1241,8 @@ settlementPrice = settlementPrice.add(itemPrice).setScale(2, BigDecimal.ROUND_HALF_UP); } + returnGoodsItem.setFluctuationPrice(fluctuationPrice.doubleValue()); + returnGoodsItem.setPrice(newPrice); returnGoodsItem.setSettlementPrice(settlementPrice); objectDao.update(returnGoodsItem); returnGoodsRecords.add(returnGoodsItem.getReturnGoodsRecord()); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/invoice/service/InvoiceUtils.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/invoice/service/InvoiceUtils.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/invoice/service/InvoiceUtils.java (revision 12938) @@ -0,0 +1,83 @@ +/** + * + */ +package com.forgon.disinfectsystem.basedatamanager.invoice.service; + +import java.math.BigDecimal; +import java.util.List; + +import org.apache.commons.lang.StringUtils; + +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.tools.hibernate.ObjectDao; + +/** + * @author jeffli + * + */ +public class InvoiceUtils { + + /** + * 统计发货单的发货物品总价格 + */ + public static void updateInvoiceTotalPrice(ObjectDao objectDao,Invoice invoice) { + List tousseInstanceList = invoice.getTousseInstances(objectDao); + List diposableGoodsList = invoice + .getDiposableGoodsItems(); + Double totalPrice = 0.0; + for (TousseInstance tousseInstance : tousseInstanceList) { + TousseDefinition tousseDefinition = tousseInstance + .getTousseDefinition(); + if (TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseDefinition + .getTousseType())) { + if (invoice.getInvoicePlan() instanceof ForeignTousseApplication) { + ForeignTousseApplication foreignTousseApplication = (ForeignTousseApplication) invoice + .getInvoicePlan(); + List applicationItems = foreignTousseApplication + .getApplicationItems(); + if (applicationItems != null) { + String tousseName = applicationItems.get(0) + .getTousseName(); + String supplier = applicationItems.get(0) + .getSupplierName(); + if (StringUtils.isNotBlank(tousseName)) { + TousseDefinition foreignTousseDefinition = TousseDefinitionUtils + .getForeignTousseDefinitionByTousseItem(objectDao,applicationItems.get(0)); + totalPrice = new BigDecimal(foreignTousseDefinition + .getPrice().toString()).add( + new BigDecimal(totalPrice.toString())) + .doubleValue(); + } + } + } + } else if (TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY + .equals(tousseDefinition.getTousseType()) + || InvoicePlan.TYPE_PROXYDISINFECTION.equals(invoice + .getInvoicePlan().getType())) { + totalPrice = new BigDecimal(tousseDefinition + .getProxyDisinfectionPrice().toString()).add( + new BigDecimal(totalPrice.toString())).doubleValue(); + } else { + totalPrice = new BigDecimal(tousseDefinition.getPrice() + .toString()).add(new BigDecimal(totalPrice.toString())) + .doubleValue(); + } + } + + for (DiposableGoodsItem diposableGoodsItem : diposableGoodsList) { + totalPrice = new BigDecimal(totalPrice.toString()).add( + new BigDecimal(diposableGoodsItem.getPrice().toString()) + .multiply(new BigDecimal(diposableGoodsItem + .getAmount().toString()))).doubleValue(); + } + + invoice.setTotalPrice(totalPrice); + } +}