PageRenderTime 56ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/new88li/core/api/ome/order/1.0/api_b2c_1_0_delivery.php

http://phpfor.googlecode.com/
PHP | 1165 lines | 875 code | 136 blank | 154 comment | 153 complexity | eed861af228ca7488fe4f5a603b48d0b MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. include_once(CORE_DIR.'/api/shop_api_object.php');
  3. class api_b2c_1_0_delivery extends shop_api_object {
  4. function getColumns(){
  5. $columns=array(
  6. 'delivery_id'=>array('type'=>'int'),
  7. 'order_id'=>array('type'=>'int'),
  8. 'member_id'=>array('type'=>'int'),
  9. 'money'=>array('type'=>'decimal'),
  10. 'type'=>array('type'=>'string'),
  11. 'is_protect'=>array('type'=>'string'),
  12. 'delivery'=>array('type'=>'string'),
  13. 'logi_id'=>array('type'=>'string'),
  14. 'logi_name'=>array('type'=>'string'),
  15. 'logi_no'=>array('type'=>'string'),
  16. 'ship_name'=>array('type'=>'string'),
  17. 'ship_area'=>array('type'=>'string'),
  18. 'ship_addr'=>array('type'=>'string'),
  19. 'ship_zip'=>array('type'=>'string'),
  20. 'ship_tel'=>array('type'=>'string'),
  21. 'ship_mobile'=>array('type'=>'string'),
  22. 'ship_email'=>array('type'=>'string'),
  23. 't_begin'=>array('type'=>'int'),
  24. 't_end'=>array('type'=>'int'),
  25. 'op_name'=>array('type'=>'string'),
  26. 'status'=>array('type'=>'string'),
  27. 'memo'=>array('type'=>'string'),
  28. 'disabled'=>array('type'=>'string')
  29. );
  30. return $columns;
  31. }//G49B893E99B6BE
  32. //??task_id
  33. function check_task_exists($data){
  34. $task_id=$this->db->selectrow('select task_id from sdb_connect_ome_connect_pool where task_id = "'.$data['task_id'].'"');
  35. if($task_id['task_id']){
  36. unset($data);
  37. }else{
  38. $task['date_time'] = time();
  39. $task['task_id'] = $data['task'];
  40. $aRs = $this->db->query('SELECT * FROM sdb_connect_ome_connect_pool WHERE 0=1');
  41. $sSql = $this->db->getInsertSql($aRs,$task);
  42. $this->db->exec($sSql);
  43. }
  44. }
  45. //task
  46. function insert_ome_delivery($data){
  47. $this->check_task_exists($data);
  48. $aData=array(
  49. 'order_id'=>$data['order_id'],
  50. 'member_id'=>$data['member_id'],
  51. 'money'=>$data['money']?$data['money']:0.00,
  52. 'type'=>$data['type'],
  53. 'is_protect'=>$data['is_protect'],
  54. 'delivery'=>$data['delivery'],
  55. 'logi_id'=>$data['logi_id'],
  56. 'logi_name'=>$data['logi_name'],
  57. 'logi_no'=>$data['logi_no'],
  58. 'ship_name'=>$data['ship_name'],
  59. 'ship_state' => $data['ship_state'],
  60. 'ship_city' => $data['ship_city'],
  61. 'ship_district' => $data['ship_district'],
  62. 'ship_addr'=>$data['ship_addr'],
  63. 'ship_zip'=>$data['ship_zip'],
  64. 'ship_tel'=>$data['ship_tel'],
  65. 'ship_mobile'=>$data['ship_mobile'],
  66. 'ship_email'=>$data['ship_email'],
  67. 't_begin'=>$data['t_begin'],
  68. 't_end'=>$data['t_end'],
  69. 'op_name'=>$data['op_name'],
  70. 'status'=>$data['status'],
  71. 'memo'=>$data['memo'],
  72. 'disabled'=>$data['disabled']?$data['disabled']:'false',
  73. //'replacement'=>$data['replacement'],
  74. //'return_id'=>$data['return_id'],
  75. );
  76. $local_new_version_order = $this->verify_order_valid($aData['order_id'],'*');//???????
  77. $this->checkOrderStatus($aData['type'],$local_new_version_order);
  78. if(is_string($aData['member_id'])&&$aData['member_id']!=''){
  79. $get_member_id = $this->db->selectrow('select member_id from sdb_members where uname = "'.$aData['member_id'].'"');
  80. if($get_member_id['member_id']){
  81. $aData['member_id'] = $get_member_id['member_id'];
  82. }else{
  83. $this->api_response('fail','data error',null,'??????');
  84. }
  85. }else{
  86. $aData['member_id'] = NULL;
  87. }
  88. $aData['ship_area'] = $this->getRegion($aData);
  89. $objShipping = &$this->system->loadModel('trading/delivery');
  90. $aData['delivery_id'] = $data['delivery_id']?$data['delivery_id']:$objShipping->getNewNumber($data['type']);
  91. $sql = "SELECT delivery_id FROM sdb_delivery WHERE delivery_id='".$aData['delivery_id']."'";
  92. $row = $this->db->selectrow($sql);
  93. if($row){//???(?)??
  94. if($data['delivery_item']){
  95. $delivery_item1=json_decode($data['delivery_item'],true);
  96. $wrong_bn = '';
  97. foreach($delivery_item1 as $key=>$value){
  98. $get_bn=$this->db->selectrow("SELECT bn,product_id,store FROM sdb_products WHERE bn = '".$value['product_bn']."'");
  99. if(!$get_bn){
  100. $gift_bn=$this->db->selectrow("SELECT gift_bn,gift_id FROM sdb_gift WHERE gift_bn = '".$value['product_bn']."'");
  101. $get_bn['product_id'] = $gift_bn['gift_id'];
  102. $get_bn['product_bn'] = $gift_bn['gift_bn'];
  103. $get_bn['item_type'] = 'gift';
  104. if(!$gift_bn){
  105. $wrong_bn .= $value['product_bn'].',';
  106. }
  107. }else{
  108. $get_bn['product_id'] = $get_bn['product_id'];
  109. $get_bn['product_bn'] = $get_bn['bn'];
  110. $get_bn['item_type'] = 'goods';
  111. }
  112. if($wrong_bn !=''){
  113. $this->api_response('fail','data fail',null,'????:'.$wrong_bn.'???');
  114. }
  115. $adata=array(
  116. 'delivery_id'=>$data['delivery_id']?$data['delivery_id']:$value['delivery_id'],
  117. 'item_type'=>$get_bn['item_type'],
  118. 'product_id'=>$get_bn['product_id'],
  119. 'product_bn'=>$get_bn['product_bn'],
  120. 'product_name'=>$value['product_name'],
  121. 'number'=>$value['number'],
  122. );
  123. $rs_delivery_item = $this->db->query('SELECT * FROM sdb_delivery_item WHERE delivery_id = '.$adata['delivery_id']);
  124. $adata = addslashes_array($adata);
  125. $_sql = $this->db->getUpdateSQL($rs_delivery_item, $adata);
  126. if($_sql&&!$this->db->exec($_sql)){
  127. $this->api_response('fail','sql exec error',$_sql);
  128. }
  129. if($data['type']=='delivery'){
  130. $result_delivery = '???';
  131. $return_data['ship_status'] = 0;
  132. $bData['sendnum'] = 0;
  133. $this->_add_order_log($data['order_id'],$data['delivery_id']);
  134. $this->db->exec('update sdb_orders set ship_status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id']);
  135. }else{
  136. if($dc_data['sendnum'] > $value['number']){
  137. $bData['sendnum'] = $dc_data['sendnum']-$value['number'];
  138. }else if($dc_data['sendnum'] == $value['number']){
  139. $bData['sendnum'] = $dc_data['sendnum']-$value['number'];
  140. }else{
  141. $this->api_response('fail','data fail',null,'?????????');
  142. }
  143. }
  144. $this->db->exec("update sdb_order_items set sendnum = ".$bData['sendnum']." where product_id =".$get_bn['product_id']." and order_id = ".$data['order_id']);
  145. $this->_add_order_log($data['order_id'],$data['delivery_id']);
  146. }
  147. if($data['type']=='return'){
  148. $sum = $this->db->select('SELECT sendnum,nums FROM sdb_order_items WHERE order_id ='.$data['order_id']);
  149. $send = 0;
  150. $nums = 0;
  151. foreach($sum as $k =>$v){
  152. $send += $v['sendnum'];
  153. $nums += $v['nums'];
  154. }
  155. if($send == 0){
  156. $return_data['ship_status'] = 4;
  157. }else{
  158. $return_data['ship_status'] = 3;
  159. }
  160. $this->db->exec('update sdb_orders set ship_status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id']);
  161. }
  162. }
  163. $rs = $this->db->exec("SELECT * FROM sdb_delivery WHERE delivery_id='".$aData['delivery_id']."'");
  164. $aData = addslashes_array($aData);
  165. $sql = $this->db->getUpdateSQL($rs,$aData);
  166. if(!$this->db->exec($sql)){
  167. $this->api_response('fail','sql exec error',$sql);
  168. }
  169. }else{
  170. if($data['delivery_item']){
  171. $delivery_item=json_decode($data['delivery_item'],true);
  172. $wrong_bn = '';
  173. foreach($delivery_item as $key=>$value){
  174. $get_bn=$this->db->selectrow("SELECT bn,product_id,store FROM sdb_products WHERE bn = '".$value['product_bn']."'");
  175. if(!$get_bn){
  176. $gift_bn=$this->db->selectrow("SELECT gift_bn,gift_id FROM sdb_gift WHERE gift_bn = '".$value['product_bn']."'");
  177. $get_bn['product_id'] = $gift_bn['gift_id'];
  178. $get_bn['product_bn'] = $gift_bn['gift_bn'];
  179. $get_bn['item_type'] = 'gift';
  180. if(!$gift_bn){
  181. $wrong_bn .= $value['product_bn'].',';
  182. }
  183. }else{
  184. $get_bn['product_id'] = $get_bn['product_id'];
  185. $get_bn['product_bn'] = $get_bn['bn'];
  186. $get_bn['item_type'] = 'goods';
  187. }
  188. //error_log(var_export($data,1),3,'c:/insert_ome_delivery.txt');
  189. if($wrong_bn !=''){
  190. $this->api_response('fail','data fail',null,'????:'.$wrong_bn.'???');
  191. }
  192. $adata=array(
  193. 'delivery_id'=>$data['delivery_id']?$data['delivery_id']:$value['delivery_id'],
  194. 'item_type'=>$get_bn['item_type'],
  195. 'product_id'=>$get_bn['product_id'],
  196. 'product_bn'=>$get_bn['product_bn'],
  197. 'product_name'=>$value['product_name'],
  198. 'number'=>$value['number'],
  199. );
  200. $rs_delivery = $this->db->query('SELECT * FROM sdb_delivery_item WHERE 0=1');
  201. $adata = addslashes_array($adata);
  202. $_sql = $this->db->GetInsertSQL($rs_delivery, $adata);
  203. if(!$this->db->exec($_sql)){
  204. $this->api_response('fail','sql exec error',$_sql);
  205. }
  206. if($data['type']=='delivery'){
  207. $result_delivery = '???';
  208. $return_data['ship_status'] = 0;
  209. $bData['sendnum'] = 0;
  210. $this->db->exec('update sdb_orders set ship_status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id']);
  211. $this->_add_order_log($data['order_id'],$data['delivery_id']);
  212. }else{
  213. $dc_data=$this->db->selectrow("SELECT sendnum,nums FROM sdb_order_items WHERE product_id =".$get_bn['product_id']." and order_id = ".$data['order_id']);
  214. if($dc_data['sendnum'] > $value['number']){
  215. $bData['sendnum'] = $dc_data['sendnum']-$value['number'];
  216. }else if($dc_data['sendnum'] == $value['number']){
  217. $bData['sendnum'] = $dc_data['sendnum']-$value['number'];
  218. }else{
  219. $this->api_response('fail','data fail',null,'?????????');
  220. }
  221. }
  222. $this->db->exec("update sdb_order_items set sendnum = ".$bData['sendnum']." where product_id =".$get_bn['product_id']." and order_id = ".$data['order_id']);
  223. }
  224. if($data['type']=='return'){
  225. $sum = $this->db->select('SELECT sendnum,nums FROM sdb_order_items WHERE order_id ='.$data['order_id']);
  226. $send = 0;
  227. $nums = 0;
  228. foreach($sum as $k =>$v){
  229. $send += $v['sendnum'];
  230. $nums += $v['nums'];
  231. }
  232. if($send == 0){
  233. $return_data['ship_status'] = 4;
  234. }else{
  235. $return_data['ship_status'] = 3;
  236. }
  237. $this->db->exec('update sdb_orders set ship_status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id']);
  238. $this->_add_order_log($data['order_id'],$data['delivery_id']);
  239. }
  240. }
  241. $rs = $this->db->query('select * from sdb_delivery where 0=1');
  242. $aData = addslashes_array($aData);
  243. $sql = $this->db->getInsertSQL($rs,$aData);
  244. if(!$this->db->exec($sql)){
  245. $this->api_response('fail','sql exec error',$sql);
  246. }
  247. }
  248. $this->api_response('true','data true',null,'??'.(($result_delivery)?$result_delivery:'???').'??');
  249. }
  250. /*????*/
  251. function getRegion($data){
  252. if((empty($data['ship_district']))||($data['ship_district']=='')){
  253. $region_id=$this->db->selectrow("select region_id from sdb_regions where local_name ='".$data['ship_city']."'");
  254. $data['area'] = 'mainland:'.$data['ship_state'].'/'.$data['ship_city'].':'.$region_id['region_id'];
  255. }else{
  256. $region_id=$this->db->selectrow("select region_id from sdb_regions where local_name ='".$data['ship_district']."'");
  257. $data['area'] = 'mainland:'.$data['ship_state'].'/'.$data['ship_city'].'/'.$data['ship_district'].':'.$region_id['region_id'];
  258. }
  259. return $data['area'];
  260. }
  261. /*????????*/
  262. function clear_product_store($product_id,$nums){
  263. $freez = $this->db->selectrow('select goods_id,freez from sdb_products where product_id ='.$product_id);
  264. $this->db->exec('update sdb_products set freez ='.($freez['freez']-$nums).' where product_id = '.$product_id);
  265. $store = $this->db->selectrow('select store from sdb_products where product_id ='.$product_id);
  266. $this->db->exec('update sdb_products set store ='.($store['store']-$nums).' where product_id = '.$product_id);
  267. if($freez['goods_id']){
  268. $goods = $this->db->selectrow('select store from sdb_goods where goods_id ='.$freez['goods_id']);
  269. $this->db->exec('update sdb_goods set store ='.($goods['store']-$nums).' where goods_id ='.$freez['goods_id']);
  270. }
  271. }
  272. /*????????*/
  273. function clear_gift_store($gift_id,$nums){
  274. $gift = $this->db->selectrow('select freez from sdb_gift where gift_id ='.$gift_id);
  275. $this->db->exec('update sdb_gift set freez ='.($gift['freez']-$nums).' where gift_id ='.$gift_id);
  276. $gift = $this->db->selectrow('select storage from sdb_gift where gift_id ='.$gift_id);
  277. $this->db->exec('update sdb_gift set storage ='.($gift['storage']-$nums).' where gift_id ='.$gift_id);
  278. }
  279. /*??????????*/
  280. function update_ome_logi_inf($data){
  281. $this->check_task_exists($data);
  282. $aData = array(
  283. 'delivery_id'=>$data['delivery_id'],//????
  284. 'logi_no'=>$data['logi_no'],//????
  285. 'logi_id'=>$data['logi_id'],
  286. 'logi_name'=>$data['logi_name'],//????
  287. );
  288. $delivery_id = $this->db->selectrow('select * from sdb_delivery where delivery_id = '.$aData['delivery_id']);
  289. if($delivery_id['delivery_id']){
  290. $this->db->exec('update sdb_delivery set logi_no = "'.$aData['logi_no'].'" ,logi_name = "'.$aData['logi_name'].'" ,logi_id = "'.$aData['logi_id'].'" where delivery_id ='.$data['delivery_id']);
  291. $this->_add_order_log($data['order_id'],$data['delivery_id']);
  292. $this->api_response('true','data true',$result,'????????');
  293. }else{
  294. $this->api_response('fail','data fail',$result,'???????');
  295. }
  296. }
  297. /*
  298. ???????
  299. */
  300. function update_ome_delivery_status($data){
  301. $this->check_task_exists($data);
  302. if($data['ship_status']!=''){
  303. if($data['ship_status']=='cancel'){
  304. $this->check_delivery_exists($data['delivery_id'],$data['order_id']);
  305. //$delivery_data['status'] = $data['ship_status'];
  306. //$delivery_data['disabled'] = true;
  307. $uv_sSQL = 'delete from sdb_delivery_item where delivery_id='.$data['delivery_id'];
  308. $this->db->exec($uv_sSQL);
  309. $sSQL= 'delete from sdb_delivery where order_id='.$data['order_id'].' and delivery_id = '.$data['delivery_id'];
  310. if($this->db->exec($sSQL)){
  311. $this->api_response('true','data true',null,'???????');
  312. }else{
  313. $this->api_response('fail','data fail',null,'???????');
  314. }
  315. }else{
  316. $delivery = $this->db->selectrow('select delivery_id,type from sdb_delivery where order_id = '.$data['order_id'].' and delivery_id ='.$data['delivery_id']);
  317. if($delivery['delivery_id']){
  318. if($data['ship_status']=='succ'){
  319. if($delivery['type'] == 'delivery'){
  320. $orders_list = $this->db->select('select item_id,sendnum,nums,product_id,is_type,addon from sdb_order_items where order_id = '.$data['order_id']);
  321. $delivery_item_list = $this->db->select('select number,product_id,product_bn,item_type from sdb_delivery_item where delivery_id = '.$data['delivery_id']);
  322. $pkg_is_send = false;
  323. $adj_is_send = false;
  324. $pkg_send = false;
  325. foreach($orders_list as $k => $v){
  326. foreach($delivery_item_list as $dk =>$dv){
  327. if($dv['item_type']=='goods'&&$v['is_type'] == 'goods'){
  328. /*??????----begin---*/
  329. $adj_addon = unserialize($v['addon']);
  330. if($v['addon'] ==''||$v['addon'] =='na'){//?????? addon????
  331. if($v['product_id'] == $dv['product_id']){
  332. $sendnum_v = $dv['number'];
  333. $adj_addon = array('proinfo'=>$v['product_id'].'_0_'.$v['nums'].'_'.$sendnum_v.'|');
  334. }
  335. }
  336. if($adj_addon){
  337. if($adj_addon['adjinfo']&&$adj_addon['adjinfo']!='na'){//?????
  338. $viop = explode('|',$adj_addon['adjinfo']);
  339. $rpcid_implode = array();
  340. foreach($viop as $vv=>$vt){
  341. if($vt){
  342. $rpcid =explode("_",$vt);
  343. if($rpcid[2]){
  344. if($rpcid[0] == $dv['product_id']){
  345. if(($dv['number']!=$v['nums'])&&($dv['number']<$v['nums'])){
  346. $rpcid[3] += $dv['number'];
  347. }
  348. }
  349. }
  350. $rpcid_implode[] = implode('_',$rpcid);
  351. $rpcid = implode('|',$rpcid_implode);
  352. }
  353. }
  354. $adj_addon['adjinfo'] = $rpcid;
  355. if($v['product_id'] == $dv['product_id']){
  356. $sendnum_v = $dv['number'];
  357. $adj_addon = array('proinfo'=>$v['product_id'].'_0_'.$v['nums'].'_'.$sendnum_v.'|');
  358. }
  359. }elseif($adj_addon['adjinfo']=='na'){
  360. if($v['product_id'] == $dv['product_id']){
  361. $sendnum_v = $dv['number'];
  362. $adj_addon['proinfo'] = $v['product_id'].'_0_'.$v['nums'].'_'.$sendnum_v.'|';
  363. }
  364. }elseif($adj_addon['proinfo']){//?proinfo ???????
  365. $provip = explode('|',$adj_addon['proinfo']);
  366. $product_implode = array();
  367. foreach($provip as $pv=>$pt){
  368. if($pt){
  369. $pro_cid =explode("_",$pt);
  370. if($pro_cid[2]){
  371. if($pro_cid[0] == $dv['product_id']){
  372. $sendnum_v = $dv['number'];
  373. $pro_cid[3] += $sendnum_v;
  374. }
  375. }
  376. $product_implode[] = implode('_',$pro_cid);
  377. $pro_cid = implode('|',$product_implode);
  378. }
  379. }
  380. $adj_addon['proinfo'] = $pro_cid;
  381. }else{//?proinfo ???????
  382. if($v['product_id'] == $dv['product_id']){
  383. $sendnum_v = $dv['number'];
  384. $adj_addon['proinfo'] = $v['product_id'].'_0_'.$v['nums'].'_'.$sendnum_v.'|';
  385. }
  386. }
  387. }
  388. $v['addon'] = serialize($adj_addon);
  389. $this->db->exec("update sdb_order_items set addon = '".$v['addon']."' where product_id = ".$v['product_id']." and order_id = ".$data['order_id']." and is_type = 'goods' and item_id = ".$v['item_id']);
  390. /*??????----end---*/
  391. /*????????----begin---*/
  392. $pro_addon = unserialize($v['addon']);
  393. if(($pro_addon['adjinfo']!='na'&&$pro_addon['adjinfo'])&&$pro_addon['proinfo']){//????+??????
  394. //??
  395. $adj_viop = explode('|',$pro_addon['adjinfo']);
  396. foreach($adj_viop as $adj_vv=>$adj_vt){
  397. if($adj_vt){
  398. $adj_rpcid =explode("_",$adj_vt);
  399. if($adj_rpcid[2]){
  400. if($adj_rpcid[2]==$adj_rpcid[3]){
  401. $adj_send = 1;
  402. }elseif($adj_rpcid[2]<$adj_rpcid[3]){
  403. if((($v['nums']*$adj_rpcid[2])%$adj_rpcid[3])==0){
  404. $adj_send = ($v['nums']*$adj_rpcid[2])/$adj_rpcid[3];
  405. }else{
  406. $adj_send = 0;
  407. }
  408. }elseif($adj_rpcid[2]>$adj_rpcid[3]){
  409. $adj_send = 0;
  410. }
  411. }
  412. }
  413. }
  414. //????
  415. $adj_pro_op = explode('|',$pro_addon['proinfo']);
  416. foreach($adj_pro_op as $adj_pro_vv=>$adj_pro_vt){
  417. if($adj_pro_vt){
  418. $rpcid =explode("_",$adj_pro_vt);
  419. if($rpcid[2]){
  420. $pro_send = $rpcid[3];
  421. }
  422. }
  423. }
  424. if($pro_send!=$adj_send){
  425. $adj_is_send = true;
  426. $sendnum_adj = min($pro_send,$adj_send);
  427. }elseif($pro_send==$adj_send){
  428. $adj_is_send = true;
  429. $sendnum_adj = $adj_send;
  430. }
  431. }
  432. if($pro_addon['proinfo']){//????????
  433. $send_pro_op = explode('|',$pro_addon['proinfo']);
  434. foreach($send_pro_op as $pro_vv=>$pro_vt){
  435. if($pro_vt){
  436. $rpcid =explode("_",$pro_vt);
  437. if($rpcid[2]){
  438. $sendnum_adj = $rpcid[3];
  439. $adj_is_send = true;
  440. }
  441. }
  442. }
  443. }//???????(??)????????
  444. if($adj_is_send!==false){
  445. if($dv['product_id'] == $v['product_id']){
  446. $this->db->exec('update sdb_order_items set sendnum = "'.$sendnum_adj.'" where product_id = '.$dv['product_id'].' and order_id = '.$data['order_id'].' and is_type = "goods"');
  447. }
  448. }
  449. /*????????----end---*/
  450. }else{//??????---begin---
  451. if($v['is_type']=='pkg'){
  452. $pkg_addon = unserialize($v['addon']);
  453. if($pkg_addon['adjinfo']){
  454. $viop = explode('|',$pkg_addon['adjinfo']);
  455. $rpcid_implode = array();
  456. foreach($viop as $vv=>$vt){
  457. if($vt){
  458. $rpcid =explode("_",$vt);
  459. if($rpcid[2]){
  460. if($rpcid[0] == $dv['product_id']){
  461. $rpcid[3] += $dv['number'];
  462. }
  463. }
  464. $rpcid_implode[] = implode('_',$rpcid);
  465. $rpcid = implode('|',$rpcid_implode);
  466. }
  467. }
  468. $pkg_addon['adjinfo'] = $rpcid;
  469. }
  470. $v['addon'] = serialize($pkg_addon);
  471. //if($dv['product_id'] == $v['product_id']){
  472. $this->db->exec("update sdb_order_items set addon = '".$v['addon']."' where product_id = ".$v['product_id']." and order_id = ".$data['order_id']." and is_type = 'pkg' and item_id = ".$v['item_id']);
  473. //}
  474. }
  475. $orders_num = $this->db->selectrow('select item_id,nums,is_type,addon from sdb_order_items where order_id = '.$data['order_id']." and is_type = 'pkg' and item_id = ".$v['item_id']);
  476. if($v['is_type']=='pkg'){
  477. $addon = unserialize($orders_num['addon']);
  478. if($addon['adjinfo']){
  479. $viop = explode('|',$addon['adjinfo']);
  480. $viop_count = count($viop);
  481. $pkg_count = 0;
  482. foreach($viop as $vv=>$vt){
  483. if($vt){
  484. $rpcid =explode("_",$vt);
  485. if($rpcid[2]){
  486. if(($rpcid[3]*$orders_num['nums']) == $dv['number']){
  487. $sendnum_pkg = $orders_num['nums'];
  488. //$pkg_count += 1;
  489. $pkg_send = true;
  490. $this->db->exec('update sdb_order_items set sendnum = '.$sendnum_pkg.' where order_id = '.$data['order_id'].' and is_type = "pkg" and item_id = '.$v['item_id']);
  491. }else{
  492. if(($rpcid[3]*$orders_num['nums'])>$rpcid[3]){
  493. $send_num = $rpcid[3]/$rpcid[2];
  494. $pkg_send = true;
  495. $this->db->exec('update sdb_order_items set sendnum = '.$send_num.' where order_id = '.$data['order_id'].' and is_type = "pkg" and item_id = '.$v['item_id']);
  496. }
  497. }
  498. }
  499. }
  500. }
  501. if($pkg_count == $viop_count){
  502. $pkg_is_send = true;
  503. }else{
  504. $pkg_is_send = false;
  505. }
  506. }//???????????????
  507. if(($pkg_is_send!==false)&&($pkg_send==false)){
  508. //if($dv['product_id'] == $v['product_id']){
  509. $this->db->exec('update sdb_order_items set sendnum = '.$sendnum_pkg.' where order_id = '.$data['order_id'].' and is_type = "pkg" and item_id = '.$v['item_id']);
  510. //}
  511. }
  512. }//??????---end---
  513. //????---begin---
  514. if($dv['item_type'] == 'gift'){
  515. $gift_items = $this->db->select('select g.gift_bn,gi.nums,gi.sendnum,gi.gift_id from sdb_gift_items gi left join sdb_gift g on gi.gift_id = g.gift_id where gi.order_id = '.$data['order_id'].'');
  516. foreach($gift_items as $gk=>$gv){
  517. if($gv['gift_id'] == $dv['product_id']){
  518. $sendnum_gift = $dv['number'];
  519. $this->db->exec('update sdb_gift_items set sendnum = "'.$sendnum_gift.'" where gift_id = '.$gv['gift_id'].' and order_id = '.$data['order_id']);
  520. }
  521. }
  522. }
  523. //????---end---
  524. }
  525. }
  526. }
  527. $orders = $this->db->select('select sendnum,nums from sdb_order_items where order_id = '.$data['order_id']);
  528. $gift = $this->db->select('select sendnum,nums from sdb_gift_items where order_id = '.$data['order_id']);
  529. foreach($orders as $k => $v){
  530. $num['nums'] += $v['nums'];
  531. $sendnum['sendnum'] += $v['sendnum'];
  532. }
  533. foreach($gift as $k => $v){
  534. $num['nums'] += $v['nums'];
  535. $sendnum['sendnum'] += $v['sendnum'];
  536. }
  537. $get_product = $this->db->select('select product_id,sendnum from sdb_order_items where order_id = '.$data['order_id']);
  538. if($sendnum['sendnum']==0){
  539. $return_data['ship_status'] = 0;
  540. }else{
  541. if($num['nums'] > $sendnum['sendnum']){
  542. $return_data['ship_status'] = 2;
  543. /*??????*/
  544. if($data['ship_status']=='succ'){
  545. foreach($get_product as $k => $v){
  546. $this->clear_product_store($v['product_id'],$v['sendnum']);//259 1
  547. }
  548. }
  549. }else if($sendnum['sendnum'] == $num['nums']){
  550. $return_data['ship_status'] = 1;
  551. /*??????*/
  552. if($data['ship_status']=='succ'){
  553. foreach($get_product as $k => $v){
  554. $this->clear_product_store($v['product_id'],$v['sendnum']);//259 1
  555. }
  556. }
  557. }
  558. }
  559. $gift = $this->db->select('select * from sdb_gift_items where order_id = '.$data['order_id']);
  560. foreach($gift as $k => $v){
  561. $gift_num['nums'] += $v['nums'];
  562. $gift_sendnum['sendnum'] += $v['sendnum'];
  563. }
  564. if($gift_num['nums'] == $gift_sendnum['sendnum']){
  565. foreach($gift as $k => $v){
  566. $this->clear_gift_store($v['gift_id'],$v['sendnum']);
  567. }
  568. }
  569. if($return_data['ship_status']!=''){
  570. $this->db->exec('update sdb_orders set ship_status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id']);
  571. $this->db->exec('update sdb_delivery set status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id'].' and delivery_id ='.$data['delivery_id']);
  572. $log = $this->db->selectrow('select order_id,behavior from sdb_order_log where order_id = '.$data['order_id']);
  573. if($log['order_id']&&$log['behavior']=='??'){
  574. $this->_add_order_log($data['order_id'],$delivery['delivery_id']);
  575. }
  576. }
  577. $this->api_response('true','data true',null,'?????????');
  578. }else{
  579. $this->db->exec('update sdb_delivery_item set number = 0 where delivery_id = '.$data['delivery_id']);
  580. $dl_items = $this->db->select('select product_id,number from sdb_delivery_item where delivery_id = '.$data['delivery_id']);
  581. $orders_items = $this->db->select('select product_id,nums,sendnum from sdb_order_items where order_id = '.$data['order_id']);
  582. foreach($dl_items as $dk=>$dv){
  583. foreach($orders_items as $ok=>$ov){
  584. if($dv['product_id'] == $ov['product_id']){
  585. //$ov['sendnum'] = $dv['number'];
  586. $this->db->exec('update sdb_order_items set sendnum = '.($ov['sendnum'] - $dv['number']).' where order_id ='.$data['order_id'].' and product_id ='.$ov['product_id']);
  587. }
  588. }
  589. }
  590. $orders_res = $this->db->select('select sendnum,nums from sdb_order_items where order_id = '.$data['order_id']);
  591. $number = 0;
  592. $sendnum = 0;
  593. foreach($orders_res as $k => $v){
  594. $number += $v['nums'];
  595. $sendnum += $v['sendnum'];
  596. }
  597. if($number == $sendnum){
  598. $return['ship_status'] = 4;
  599. }else{
  600. $return['ship_status'] = 3;
  601. }
  602. $delivery_sql = 'update sdb_delivery set status = "failed" where order_id ='.$data['order_id'].' and delivery_id ='.$data['delivery_id'];
  603. $this->db->exec($delivery_sql);
  604. $order_sql = 'update sdb_orders set ship_status = '.$return['ship_status'].' where order_id ='.$data['order_id'];
  605. if($this->db->exec($order_sql)){
  606. $this->api_response('true','data true',null,'?????????');
  607. }else{
  608. $this->api_response('fail','data fail',null,'?????????');
  609. }
  610. }
  611. }
  612. }else{
  613. $this->api_response('fail','data fail',null,'??????');
  614. }
  615. if($data['ship_status']=='progress'){
  616. $sql = 'update sdb_delivery set status = "'.$data['ship_status'].'" where order_id ='.$data['order_id'].' and delivery_id ='.$data['delivery_id'];
  617. if($this->db->exec($sql)){
  618. $this->api_response('true','data true',null,'?????????');
  619. }else{
  620. $this->api_response('fail','data fail',null,'?????????');
  621. }
  622. }
  623. }
  624. }else{
  625. $this->api_response('true','data true',null,'');
  626. }
  627. }
  628. /*
  629. ??????
  630. */
  631. function update_ome_order_status($data){
  632. $this->check_task_exists($data);
  633. $orders = $this->db->selectrow('select order_id,ship_status from sdb_orders where order_id = '.$data['order_id']);
  634. if($orders['order_id']){
  635. $orders_items = $this->db->select('select order_id,nums,sendnum from sdb_order_items where order_id = '.$data['order_id']);
  636. $gift_items = $this->db->select('select sendnum,nums from sdb_gift_items where order_id = '.$data['order_id']);
  637. foreach($orders_items as $k => $v){
  638. $num['nums'] += $v['nums'];
  639. $sendnum['sendnum'] += $v['sendnum'];
  640. }
  641. foreach($gift_items as $k => $v){
  642. $num['nums'] += $v['nums'];
  643. $sendnum['sendnum'] += $v['sendnum'];
  644. }
  645. if($sendnum['sendnum'] == 0){
  646. $return_data['ship_status'] = 0;
  647. }elseif($num['nums'] > $sendnum['sendnum']){
  648. $return_data['ship_status'] = 2;
  649. }elseif($sendnum['sendnum'] == $num['nums']){
  650. $return_data['ship_status'] = 1;
  651. }
  652. $sql = $this->db->exec('update sdb_orders set ship_status = "'.$return_data['ship_status'].'" where order_id ='.$data['order_id']);
  653. $this->api_response('true','data true',null,'????????');
  654. }else{
  655. $this->api_response('fail','data fail',null,'?????');
  656. }
  657. }
  658. function check_delivery_exists($delivery_id,$order_id){
  659. $orders = $this->db->selectrow('select order_id from sdb_orders where order_id = '.$order_id);
  660. if($orders){
  661. $delivery = $this->db->selectrow('select delivery_id from sdb_delivery where delivery_id = '.$delivery_id.' and order_id = '.$order_id);
  662. if(!$delivery['delivery_id']){
  663. $this->api_response('fail','data fail',null,'?????');
  664. }
  665. }else{
  666. $this->api_response('fail','data fail',null,'?????????');
  667. }
  668. }
  669. /**
  670. * ????????
  671. *
  672. * @param int $order_id
  673. * @param array $order
  674. * @param string $colums
  675. *
  676. * @return ????????
  677. */
  678. function verify_order_valid($order_id,$colums='*'){
  679. $_order = $this->db->selectrow('select '.$colums.' from sdb_orders where order_id='.$order_id.'');
  680. if(!$_order){
  681. $this->api_response('fail','data fail',$result,'?????');
  682. }
  683. if(isset($_order['dealer_id'])&&empty($_order['dealer_id'])){
  684. $this->api_response('fail','data fail',$result,'??????????');
  685. }
  686. return $_order;
  687. }
  688. function checkOrderStatus($type,$data){
  689. switch($type){
  690. case 'delivery':
  691. if($data['ship_status']==1||$data['ship_status']==3||$data['ship_status']==4||$data['status']!='active'){
  692. $this->api_response('fail','data fail',$result,'?????');
  693. }
  694. break;
  695. case 'return':
  696. if($data['ship_status']==0||$data['ship_status']==4||$data['status']!='active'){
  697. $this->api_response('fail','data fail',$result,'?????');
  698. }
  699. break;
  700. }
  701. }
  702. function _get_new_number($type){
  703. if ($type == 'return'){
  704. $sign = '9'.date("Ymd");
  705. }else{
  706. $sign = '1'.date("Ymd");
  707. }
  708. $sqlString = 'SELECT MAX(delivery_id) AS maxno FROM sdb_delivery WHERE delivery_id LIKE \''.$sign.'%\'';
  709. $aRet = $this->db->selectrow($sqlString);
  710. if(is_null($aRet['maxno'])) $aRet['maxno'] = 0;
  711. $maxno = substr($aRet['maxno'], -6) + 1;
  712. if ($maxno==1000000){
  713. $maxno = 1;
  714. }
  715. return $sign.substr("00000".$maxno, -6);
  716. }
  717. /**
  718. * ???????????
  719. * add by hujianxin
  720. *
  721. * @param bigint $dealer_order_id
  722. * @param int $delivery_id?
  723. * @return boolean
  724. */
  725. function _add_order_log($dealer_order_id,$delivery_id){
  726. if(!$delivery_id){
  727. $this->api_response('true','data true',$result,'??????');
  728. }
  729. $message_part1 = "";
  730. $message = "";
  731. $behavior = "";
  732. $order_info = $this->db->selectrow("SELECT ship_status FROM sdb_orders WHERE order_id=".$dealer_order_id);
  733. $ship_status = $order_info['ship_status'];
  734. $delivery_info = $this->db->selectrow("SELECT logi_name,logi_no FROM sdb_delivery WHERE delivery_id=".$delivery_id);
  735. if($ship_status == "1"){ //????
  736. $message_part1 = "????";
  737. $behavior = "??";
  738. }else if($ship_status == "2"){ //????
  739. $message_part1 = "???";
  740. $behavior = "??";
  741. }else if($ship_status == "3"){ //????
  742. $message_part1 = "???";
  743. $behavior = "??";
  744. }else if($ship_status == "4"){ //????
  745. $message_part1 = "????";
  746. $behavior = "??";
  747. }
  748. if(!empty($behavior)){
  749. $message = "??<!--order_id=".$dealer_order_id."&delivery_id=".$delivery_id."&ship_status=".$ship_status."-->".$message_part1;
  750. if(!empty($delivery_info['logi_name'])){
  751. $message .= "??????".$delivery_info['logi_name'];
  752. }
  753. if(!empty($delivery_info['logi_no'])){
  754. $message .= "??????".$delivery_info['logi_no'];
  755. }
  756. $return1 = $this->_add_log($dealer_order_id,$message,$behavior);
  757. return $return1;
  758. }else{
  759. return false;
  760. }
  761. }
  762. /**
  763. * ??order log
  764. *
  765. * @param int $order_id
  766. * @param string $message
  767. * @param string $behavior
  768. * @return boolean
  769. */
  770. function _add_log($order_id,$message,$behavior){
  771. $rs = $this->db->query('select * from sdb_order_log where 0=1');
  772. $sql = $this->db->getInsertSQL($rs,array(
  773. 'order_id'=>$order_id,
  774. 'op_id'=>NULL,
  775. 'op_name'=>NULL,
  776. 'behavior'=>$behavior,
  777. 'result'=>'success',
  778. 'log_text'=>addslashes($message),
  779. 'acttime'=>time()
  780. ));
  781. return $this->db->exec($sql);
  782. }
  783. /**
  784. * ?????
  785. *
  786. * @param int $supplier_orderid po???
  787. * @param array $data
  788. * array(
  789. * 'dealer_order_id' => xxx,
  790. * 'money' => xxx,
  791. * 'type' => return/delivery,
  792. * 'is_protect' => true/false,
  793. * 'delivery' => xxx,
  794. * 'logi_name' => xxx,
  795. * 'logi_no' => xxx,
  796. * 'ship_name' => xxx,
  797. * 'ship_area' => xxx,
  798. * 'ship_addr' => xxx,
  799. * 'ship_zip' => xxx,
  800. * 'ship_tel' => xxx,
  801. * 'ship_mobile' => xxx,
  802. * 'ship_email' => xxx,
  803. * 'ship_tel' => xxx,
  804. * 't_begin' => xxx,
  805. * 't_end' => xxx,
  806. * 'status' => xxx,
  807. * 'memo' => xxx,
  808. * 'struct' => array(
  809. * 'dealer_bn' => xxx,
  810. * 'item_type' => xxx,
  811. * 'product_bn' => xxx,
  812. * 'product_name' => xxx,
  813. * 'number' => xxx,
  814. * )
  815. * )
  816. * @return ??????
  817. */
  818. function ww($error_info){
  819. return false;
  820. if(is_array($error_info)){
  821. $error_info = print_r($error_info, true);
  822. }
  823. //error_log(date("Y:m:d:H:i:s").$error_info."\n", 3, "/home/bryant/errors.log");
  824. error_log(date("Y:m:d:H:i:s").$error_info."\n", 3, HOME_DIR."/bryant/errors.log");
  825. }
  826. function add_delivery_bill($input_data){
  827. $this->ww('test');
  828. $supplier_id = $input_data['supplier_id'];
  829. $data = json_decode($input_data['data'], true);
  830. $delivery_no = $this->_get_new_number('delivery');
  831. $_delivery_items = $data['struct'];
  832. $this->ww($_delivery_items);
  833. $dealer_orderid = $data['dealer_order_id'];
  834. unset($data['struct']);
  835. $this->ww($_delivery_items);
  836. /*
  837. foreach($_delivery_items as $_items){
  838. $_sql = sprintf('select nums-sendnum as sub_num from sdb_orders where bn=\'%s\' and order_id=%s', $_items['dealer_bn'], $_items['dealer_order_id']);
  839. $_arr_tmp = $this->db->selectrow($_sql);
  840. if($_arr_tmp['sub_num']-$_items['number']>0){
  841. $ship_status = 2;//????
  842. }
  843. }*/
  844. $this->ww($ship_status);
  845. $_sql = sprintf('select member_id from sdb_orders where order_id=%s', $dealer_orderid);
  846. $this->ww($_sql);
  847. if ($_order_data = $this->db->selectrow($_sql)){
  848. $data['member_id'] = $_order_data['member…

Large files files are truncated, but you can click here to view the full file