📄 productutilservices.java
字号:
/* * $Id: ProductUtilServices.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2002 The Open For Business Project (www.ofbiz.org) * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.product.product;import java.sql.Timestamp;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.Locale;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.StringUtil;import org.ofbiz.base.util.UtilDateTime;import org.ofbiz.base.util.UtilMisc;import org.ofbiz.base.util.UtilProperties;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.base.util.string.FlexibleStringExpander;import org.ofbiz.entity.GenericDelegator;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.GenericPK;import org.ofbiz.entity.GenericValue;import org.ofbiz.entity.condition.EntityCondition;import org.ofbiz.entity.condition.EntityConditionList;import org.ofbiz.entity.condition.EntityExpr;import org.ofbiz.entity.condition.EntityOperator;import org.ofbiz.entity.model.DynamicViewEntity;import org.ofbiz.entity.model.ModelEntity;import org.ofbiz.entity.model.ModelKeyMap;import org.ofbiz.entity.util.EntityListIterator;import org.ofbiz.entity.util.EntityUtil;import org.ofbiz.service.DispatchContext;import org.ofbiz.service.GenericServiceException;import org.ofbiz.service.LocalDispatcher;import org.ofbiz.service.ServiceUtil;/** * Product Services * * @author <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> * @version $Rev: 5462 $ * @since 2.0 */public class ProductUtilServices { public static final String module = ProductUtilServices.class.getName(); public static final String resource = "ProductUiLabels"; /** First expirt all ProductAssocs for all disc variants, then disc all virtuals that have all expired variant ProductAssocs */ public static Map discVirtualsWithDiscVariants(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); Timestamp nowTimestamp = UtilDateTime.nowTimestamp(); Locale locale = (Locale) context.get("locale"); String errMsg = null; try { EntityCondition conditionOne = new EntityConditionList(UtilMisc.toList( new EntityExpr("isVariant", EntityOperator.EQUALS, "Y"), new EntityExpr("salesDiscontinuationDate", EntityOperator.NOT_EQUAL, null), new EntityExpr("salesDiscontinuationDate", EntityOperator.LESS_THAN_EQUAL_TO, nowTimestamp) ), EntityOperator.AND); EntityListIterator eliOne = delegator.findListIteratorByCondition("Product", conditionOne, null, null); GenericValue productOne = null; int numSoFarOne = 0; while ((productOne = (GenericValue) eliOne.next()) != null) { String virtualProductId = ProductWorker.getVariantVirtualId(productOne); GenericValue virtualProduct = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", virtualProductId)); if (virtualProduct == null) { continue; } List passocList = delegator.findByAnd("ProductAssoc", UtilMisc.toMap("productId", virtualProductId, "productIdTo", productOne.get("productId"), "productAssocTypeId", "PRODUCT_VARIANT")); passocList = EntityUtil.filterByDate(passocList, nowTimestamp); if (passocList.size() > 0) { Iterator passocIter = passocList.iterator(); while (passocIter.hasNext()) { GenericValue passoc = (GenericValue) passocIter.next(); passoc.set("thruDate", nowTimestamp); passoc.store(); } numSoFarOne++; if (numSoFarOne % 500 == 0) { Debug.logInfo("Expired variant ProductAssocs for " + numSoFarOne + " sales discontinued variant products.", module); } } } eliOne.close(); // get all non-discontinued virtuals, see if all variant ProductAssocs are expired, if discontinue EntityCondition condition = new EntityConditionList(UtilMisc.toList( new EntityExpr("isVirtual", EntityOperator.EQUALS, "Y"), new EntityExpr(new EntityExpr("salesDiscontinuationDate", EntityOperator.EQUALS, null), EntityOperator.OR, new EntityExpr("salesDiscontinuationDate", EntityOperator.GREATER_THAN_EQUAL_TO, nowTimestamp)) ), EntityOperator.AND); EntityListIterator eli = delegator.findListIteratorByCondition("Product", condition, null, null); GenericValue product = null; int numSoFar = 0; while ((product = (GenericValue) eli.next()) != null) { List passocList = delegator.findByAnd("ProductAssoc", UtilMisc.toMap("productId", product.get("productId"), "productAssocTypeId", "PRODUCT_VARIANT")); passocList = EntityUtil.filterByDate(passocList, nowTimestamp); if (passocList.size() == 0) { product.set("salesDiscontinuationDate", nowTimestamp); numSoFar++; if (numSoFar % 500 == 0) { Debug.logInfo("Sales discontinued " + numSoFar + " virtual products that have no valid variants.", module); } } } eli.close(); } catch (GenericEntityException e) { Map messageMap = UtilMisc.toMap("errMessage", e.toString()); errMsg = UtilProperties.getMessage(resource,"productutilservices.entity_error_running_discVirtualsWithDiscVariants", messageMap, locale); Debug.logError(e, errMsg, module); return ServiceUtil.returnError(errMsg); } return ServiceUtil.returnSuccess(); } /** for all disc products, remove from category memberships */ public static Map removeCategoryMembersOfDiscProducts(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); Timestamp nowTimestamp = UtilDateTime.nowTimestamp(); Locale locale = (Locale) context.get("locale"); String errMsg = null; try { EntityCondition condition = new EntityConditionList(UtilMisc.toList( new EntityExpr("salesDiscontinuationDate", EntityOperator.NOT_EQUAL, null), new EntityExpr("salesDiscontinuationDate", EntityOperator.LESS_THAN_EQUAL_TO, nowTimestamp) ), EntityOperator.AND); EntityListIterator eli = delegator.findListIteratorByCondition("Product", condition, null, null); GenericValue product = null; int numSoFar = 0; while ((product = (GenericValue) eli.next()) != null) { String productId = product.getString("productId"); List productCategoryMemberList = delegator.findByAnd("ProductCategoryMember", UtilMisc.toMap("productId", productId)); if (productCategoryMemberList.size() > 0) { Iterator productCategoryMemberIter = productCategoryMemberList.iterator(); while (productCategoryMemberIter.hasNext()) { GenericValue productCategoryMember = (GenericValue) productCategoryMemberIter.next(); // coded this way rather than a removeByAnd so it can be easily changed... productCategoryMember.remove(); } numSoFar++; if (numSoFar % 500 == 0) { Debug.logInfo("Removed category members for " + numSoFar + " sales discontinued products.", module); } } } eli.close(); Debug.logInfo("Completed - Removed category members for " + numSoFar + " sales discontinued products.", module); } catch (GenericEntityException e) { Map messageMap = UtilMisc.toMap("errMessage", e.toString()); errMsg = UtilProperties.getMessage(resource,"productutilservices.entity_error_running_removeCategoryMembersOfDiscProducts", messageMap, locale); Debug.logError(e, errMsg, module); return ServiceUtil.returnError(errMsg); } return ServiceUtil.returnSuccess(); } public static Map removeDuplicateOpenEndedCategoryMembers(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); Timestamp nowTimestamp = UtilDateTime.nowTimestamp(); Locale locale = (Locale) context.get("locale"); String errMsg = null; try { DynamicViewEntity dve = new DynamicViewEntity(); dve.addMemberEntity("PCM", "ProductCategoryMember"); dve.addAlias("PCM", "productId", null, null, null, Boolean.TRUE, null); dve.addAlias("PCM", "productCategoryId", null, null, null, Boolean.TRUE, null); dve.addAlias("PCM", "fromDate", null, null, null, null, null); dve.addAlias("PCM", "thruDate", null, null, null, null, null); dve.addAlias("PCM", "productIdCount", "productId", null, null, null, "count");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -