Add Relation Product From a table

Here is the table content:

id	skus
1	P763B,P763A,P739A,P574P,P574C,P574B,P573K
2	P573G,P0870,P0860,D9543,D8984
3	D8983,D8821,D8579,D8573,D853A,D8539
4	D824A,D7805

 Add each sku with its relation product skus(in one line) into magento

<?php
/**
 * 导入关联商品
 * @author bysoft
 *
 */
class Bysoft_Import_Model_Relationproduct extends Mage_Core_Model_Abstract
{
	protected $_write;
	protected $_read;
	
    protected function _construct(){

       $this->_init("import/relationproduct");
       $this->_read = Mage::getSingleton('core/resource')->getConnection('core_read');
       $this->_write = Mage::getSingleton('core/resource')->getConnection('core_write');

    }
    
    public function run() {
    	//Follow four should run only no data in temp tables.
    	$this->truncate_table();//clean product data table;
    	$this->import_data_from_csv_to_db();//get product data from csv file
    	$this->add_relation_products();
    }
    
    public function truncate_table() {
    	$sql = "truncate table bysoft_import_relation_product";
    	$this->_write->query($sql);
    }
    
    public function import_data_from_csv_to_db() {
    	$file_path = BP . DS . 'media' . DS . 'import' . DS . 'relation_product.csv';
    	$file = fopen($file_path,'r');
    	$i = 0;
    	while ($data = fgetcsv($file)) {
    		++$i;
    		if ($i != 1) {
    			$model = Mage::getModel('import/relationproduct');
    			$skus = str_replace(' ','',$data[0]);
    			$skus = str_replace(',',',',$skus);
    			$model->setData('skus',$skus);
    			$model->save();
    			var_dump($data[0]  . ' save into db.');
    		}
    	}
    }
    
    public function add_relation_products() {
    	$sql = "select skus from bysoft_import_relation_product order by id";
    	$results = $this->_read->fetchAll($sql);
    	foreach ($results as $row) {
    		$skus = trim($row['skus']);
    		$sku_arr = explode(',', $skus);
    		//处理一行SKU
    		foreach ($sku_arr as $key=>$val) {
    			if (trim($val) == '') {
    				unset($sku_arr[$key]);
    			}
    		}
    		foreach ($sku_arr as $key=>$sku) {
    			$self = $sku;
    			$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $self);
    			$_product = Mage::getModel('catalog/product')->load($_product->getId());
    			$rel_data = array();
    			foreach ($sku_arr as $key_rel=>$rel_sku) {
    				if ($key_rel != $key) {
    					$rel_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $rel_sku);
    					$rel_data[$rel_product->getId()] = array('position'=>$key_rel);
    				}
    			}
    			$_product->setRelatedLinkData($rel_data);
    			$_product->save();
    			var_dump('Product : ' . $_product->getSku());
    			var_dump($rel_data);
    		}
    	}
    }
    
    

}
	 

 

SELECT TO_CHAR( B.PLAN_ONLINE_TIME, 'YYYYMMDD' ) AS TASK_GROUP, DATE_TRUNC( 'day', B.PLAN_ONLINE_TIME ) + ( SELECT VALUE_INFO FROM T_BASE_PARAMETER WHERE SERVICE_NAME = '自制波次信息管理' AND KEY_INFO = '工厂开工时间' ) :: INTERVAL AS TASK_ONLINE_TIME, B.PLAN_START_TIME AS TASK_PLAN_START_TIME, B.PLAN_ONLINE_TIME + '32 hour' AS TASK_PLAN_COMPLETE_TIME, B.TC_INFO, B.CHECK_INFO, B.WORKORDER_QTY, B.WORK_SERCTION AS WORKORDER_WORK_SERCTION, A.PLAN_START_TIME, A.PLAN_END_TIME_FIRST, A.PLAN_END_TIME_LAST, A.PLAN_END_TIME, A.SEND_MATERIAL_TIME, A.ACT_SEND_MATERIAL_TIME, A.LINE_CHANGE_TIME, A.ACT_START_DATE, A.ACT_END_DATE, A.ACT_CLOSE_DATE, A.COMPLETED_QTY, A.UNCOMPLETED_QTY, A.IS_ROLL, A.IS_USED, A.ITEM_NO, A.CREATION_DATE, A.TASKORDER_QTY_FIRST, A.LAST_UPDATED_DATE, A.IS_DELETE, A.TASKORDER_QTY_LAST, A.DELETE_DATE, A.TASKORDER_QTY, A.EARLIST_LEADTIME, A.LATEST_LEADTIME, A.PLAN_START_TIME_FIRST, A.TASKORDER_COMPLETE_TIME, A.TASKORDER_CLOSED_TIME, A.SCHEDULE_TYPE, A.PLAN_START_TIME_LAST, A.WTJ_ID, A.DEPT_NAME, A.DEPT_CODE, A.FACTORY_CODE, A.LOCATION_CODE, A.WORK_SERCTION, A.FACTORY_LINE, A.PROD_MODEL_CODE, A.ITEM_CODE, A.ITEM_NAME, A.COLOR_EN, A.ITEM_CODE_EMS, A.WORKORDER_TYPE, A.WORKORDER_ID, A.WORKORDER_NAME, A.PART_LINE_FLAG, A.LAYOUT, A.WORKORDER_PLAN_ID, A.TASKORDER_NO, A.TASKORDER_STATUS, A.RELATION_STATUS, A.WORK_MODE, A.DELIVER_OBJECT, A.IS_BOM_COMPLETE, A.REMARK, A.CREATED_BY, A.LAST_UPDATED_BY, A.DELETE_BY, A.ORDER_STATUS, A.BOM_REVISION, A.IS_ITEM_COMPLETE, A.COLOR_CN, BPC.PROD_LINE_CODE, BPC.PROD_AREA_CODE, BPC.PROD_FAMILY_CODE, BPC.PROD_SERIES_CODE FROM T_WAVE_TASKORDER_JUXIN A INNER JOIN T_WAVE_WORKORDER_INFO B ON A.WORKORDER_NAME = B.WORKORDER_NAME INNER JOIN T_BASE_PROD_CATALOG BPC ON A.PROD_MODEL_CODE = BPC.PROD_MODEL_CODE INNER JOIN (SELECT P.VALUE_INFO FROM T_BASE_PARAMETER P WHERE P.SERVICE_NAME = '波次看板' AND P.KEY_INFO = '排产工序') C ON STRPOS(C.VALUE_INFO, B.WORK_SERCTION_JUXIN) > 0 WHERE A.IS_USED = 1 AND A.IS_DELETE = 0 AND A.TASKORDER_STATUS = '0' AND A.TASKORDER_QTY > 0 AND B.ORDER_TYPE = 'NORMAL' AND B.COMPLETED_TIME IS NULL AND B.CLOSED_TIME IS NULL AND B.WORK_SERCTION_JUXIN = ANY(#{condition.workSerctionArray,jdbcType=VARCHAR}) AND B.PLAN_ONLINE_TIME <![CDATA[>=]]> #{condition.planOnlineTime1,jdbcType=TIMESTAMP} AND B.PLAN_ONLINE_TIME <![CDATA[<]]> #{condition.planOnlineTime2,jdbcType=TIMESTAMP} <if test="condition.prodModelCodeArray != null and condition.prodModelCodeArray.length > 0"> AND A.PROD_MODEL_CODE = ANY(#{condition.prodModelCodeArray,jdbcType=VARCHAR}) </if> <if test="condition.prodSeriesCodeArray != null and condition.prodSeriesCodeArray.length > 0"> AND BPC.PROD_SERIES_CODE = ANY(#{condition.prodSeriesCodeArray,jdbcType=VARCHAR}) </if> AND EXISTS ( SELECT 1 FROM T_BASE_COMM_LINE R WHERE R.TABLE_NAME = 'PROGRAM_PRODUCT_TYPE_INFO' AND R.KEY_2 = BPC.PROD_LINE_CODE <![CDATA[ <addProgram prepend ="and" dimensions2Fields="ProductTypeInfo:R.KEY_1"></addProgram> ]]>) ORDER BY A.TASKORDER_NO </select>转化为sql
11-06
SELECT TO_CHAR(B.PLAN_ONLINE_TIME, 'YYYYMMDD') AS TASK_GROUP, DATE_TRUNC('day', B.PLAN_ONLINE_TIME) + (SELECT VALUE_INFO FROM T_BASE_PARAMETER WHERE SERVICE_NAME = '自制波次信息管理' AND KEY_INFO = '工厂开工时间') :: INTERVAL AS TASK_ONLINE_TIME, B.PLAN_START_TIME AS TASK_PLAN_START_TIME, B.PLAN_ONLINE_TIME + '32 hour' AS TASK_PLAN_COMPLETE_TIME, B.TC_INFO, B.CHECK_INFO, B.WORKORDER_QTY, B.WORK_SERCTION AS WORKORDER_WORK_SERCTION, A.PLAN_START_TIME, A.PLAN_END_TIME_FIRST, A.PLAN_END_TIME_LAST, A.PLAN_END_TIME, A.SEND_MATERIAL_TIME, A.ACT_SEND_MATERIAL_TIME, A.LINE_CHANGE_TIME, A.ACT_START_DATE, A.ACT_END_DATE, A.ACT_CLOSE_DATE, A.COMPLETED_QTY, A.UNCOMPLETED_QTY, A.IS_ROLL, A.IS_USED, A.ITEM_NO, A.CREATION_DATE, A.TASKORDER_QTY_FIRST, A.LAST_UPDATED_DATE, A.IS_DELETE, A.TASKORDER_QTY_LAST, A.DELETE_DATE, A.TASKORDER_QTY, A.EARLIST_LEADTIME, A.LATEST_LEADTIME, A.PLAN_START_TIME_FIRST, A.TASKORDER_COMPLETE_TIME, A.TASKORDER_CLOSED_TIME, A.SCHEDULE_TYPE, A.PLAN_START_TIME_LAST, A.WTJ_ID, A.DEPT_NAME, A.DEPT_CODE, A.FACTORY_CODE, A.LOCATION_CODE, A.WORK_SERCTION, A.FACTORY_LINE, A.PROD_MODEL_CODE, A.ITEM_CODE, A.ITEM_NAME, A.COLOR_EN, A.ITEM_CODE_EMS, A.WORKORDER_TYPE, A.WORKORDER_ID, A.WORKORDER_NAME, A.PART_LINE_FLAG, A.LAYOUT, A.WORKORDER_PLAN_ID, A.TASKORDER_NO, A.TASKORDER_STATUS, A.RELATION_STATUS, A.WORK_MODE, A.DELIVER_OBJECT, A.IS_BOM_COMPLETE, A.REMARK, A.CREATED_BY, A.LAST_UPDATED_BY, A.DELETE_BY, A.ORDER_STATUS, A.BOM_REVISION, A.IS_ITEM_COMPLETE, A.COLOR_CN, BPC.PROD_LINE_CODE, BPC.PROD_AREA_CODE, BPC.PROD_FAMILY_CODE, BPC.PROD_SERIES_CODE FROM T_WAVE_TASKORDER_JUXIN A INNER JOIN T_WAVE_WORKORDER_INFO B ON A.WORKORDER_NAME = B.WORKORDER_NAME INNER JOIN T_BASE_PROD_CATALOG BPC ON A.PROD_MODEL_CODE = BPC.PROD_MODEL_CODE INNER JOIN ( SELECT P.VALUE_INFO FROM T_BASE_PARAMETER P WHERE P.SERVICE_NAME = '波次看板' AND P.KEY_INFO = '排产工序' ) C ON STRPOS(C.VALUE_INFO, B.WORK_SERCTION_JUXIN) > 0 WHERE A.IS_USED = 1 AND A.IS_DELETE = 0 AND A.TASKORDER_STATUS = '0' AND A.TASKORDER_QTY > 0 AND B.ORDER_TYPE = 'NORMAL' AND B.COMPLETED_TIME IS NULL AND B.CLOSED_TIME IS NULL -- AND B.PLAN_ONLINE_TIME='2025-11-05 00:00:00' -- AND B.WORK_SERCTION_JUXIN = ANY(传入的工作区域数组) -- AND B.PLAN_ONLINE_TIME >= 传入的开始时间戳 -- AND B.PLAN_ONLINE_TIME < 传入的结束时间戳 -- AND A.PROD_MODEL_CODE = ANY(传入的产品型号数组) -- 条件成立时生效 -- AND BPC.PROD_SERIES_CODE = ANY(传入的产品系列数组) -- 条件成立时生效 AND EXISTS ( SELECT 1 FROM T_BASE_COMM_LINE R WHERE R.TABLE_NAME = 'PROGRAM_PRODUCT_TYPE_INFO' AND R.KEY_2 = BPC.PROD_LINE_CODE -- 此处原<addProgram>标签需根据实际业务逻辑替换 ) ORDER BY A.TASKORDER_NO; 添加一个查询条件workorder_name='DPZHT5AV009'
11-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值