PageRenderTime 29ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/b2b/core/api/order/1.0/api_b2c_1_0_delivery.php

http://phpfor.googlecode.com/
PHP | 461 lines | 318 code | 31 blank | 112 comment | 34 complexity | 1557a0748f3b457fa18e3b76d1040ac7 MD5 | raw 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. }
  32. function insert_delivery($data){
  33. $aData=array(
  34. 'order_id'=>$data['order_id'],
  35. 'member_id'=>$data['member_id'],
  36. 'money'=>$data['money'],
  37. 'type'=>$data['type'],
  38. 'is_protect'=>$data['is_protect'],
  39. 'delivery'=>$data['delivery'],
  40. 'logi_id'=>$data['logi_id'],
  41. 'logi_name'=>$data['logi_name'],
  42. 'logi_no'=>$data['logi_no'],
  43. 'ship_name'=>$data['ship_name'],
  44. 'ship_area'=>$data['ship_area'],
  45. 'ship_addr'=>$data['ship_addr'],
  46. 'ship_zip'=>$data['ship_zip'],
  47. 'ship_tel'=>$data['ship_tel'],
  48. 'ship_mobile'=>$data['ship_mobile'],
  49. 'ship_email'=>$data['ship_email'],
  50. 't_begin'=>$data['t_begin'],
  51. 't_end'=>$data['t_end'],
  52. 'op_name'=>$data['op_name'],
  53. 'status'=>$data['status'],
  54. 'memo'=>$data['memo'],
  55. 'disabled'=>$data['disabled'],
  56. 'replacement'=>$data['replacement'],
  57. 'return_id'=>$data['return_id']
  58. );
  59. $objShipping = &$this->system->loadModel('trading/delivery');
  60. $aData['delivery_id'] = $data['delivery_id']?$data['delivery_id']:$objShipping->getNewNumber($data['type']);
  61. $sql = "SELECT delivery_id FROM sdb_delivery WHERE delivery_id='".$aData['delivery_id']."' AND order_id='".$data['order_id']."'";
  62. $row = $this->db->selectrow($sql);
  63. if($row){
  64. $rs = $this->db->exec("SELECT * FROM sdb_delivery WHERE delivery_id='".$aData['delivery_id']."'");
  65. $aData = addslashes_array($aData);
  66. $sql = $this->db->getUpdateSQL($rs,$aData);
  67. if(!$this->db->exec($sql)){
  68. $this->api_response('fail','sql exec error',$sql);
  69. }
  70. }else{
  71. $rs = $this->db->query('select * from sdb_delivery where 0=1');
  72. $aData = addslashes_array($aData);
  73. $sql = $this->db->getInsertSQL($rs,$aData);
  74. if(!$this->db->exec($sql)){
  75. $this->api_response('fail','sql exec error',$sql);
  76. }else{
  77. if($data['delivery_item']){
  78. $delivery_item=json_decode(stripslashes($data['delivery_item']),true);
  79. foreach($delivery_item as $key=>$value){
  80. $aData=array(
  81. 'delivery_id'=>$value['delivery_id'],
  82. 'item_type'=>$value['item_type'],
  83. 'product_id'=>$value['product_id'],
  84. 'product_bn'=>$value['product_bn'],
  85. 'product_name'=>$value['product_name'],
  86. 'number'=>$value['number']
  87. );
  88. $rs = $this->db->query('select * from sdb_delivery_item where 0=1');
  89. $aData = addslashes_array($aData);
  90. $sql = $this->db->getInsertSQL($rs,$aData);
  91. $this->db->exec($sql);
  92. $dc_data=$this->db->selectrow("SELECT sendnum FROM sdb_order_items WHERE product_id =".$value['product_id']);
  93. if($data['type']=='delivery'){
  94. $bData['sendnum'] = $dc_data['sendnum']+$value['number'];
  95. }else{
  96. $bData['sendnum'] = $dc_data['sendnum']-$value['number'];
  97. }
  98. $b_rs = $this->db->query("SELECT sendnum FROM sdb_order_items WHERE product_id =".$value['product_id']);
  99. $esql = $this->db->getUpdateSQL($b_rs,$bData);
  100. $this->db->exec($esql);
  101. }
  102. }
  103. }
  104. }
  105. $this->api_response('true',false,null);
  106. }
  107. function _get_new_number($type){
  108. if ($type == 'return'){
  109. $sign = '9'.date("Ymd");
  110. }else{
  111. $sign = '1'.date("Ymd");
  112. }
  113. $sqlString = 'SELECT MAX(delivery_id) AS maxno FROM sdb_delivery WHERE delivery_id LIKE \''.$sign.'%\'';
  114. $aRet = $this->db->selectrow($sqlString);
  115. if(is_null($aRet['maxno'])) $aRet['maxno'] = 0;
  116. $maxno = substr($aRet['maxno'], -6) + 1;
  117. if ($maxno==1000000){
  118. $maxno = 1;
  119. }
  120. return $sign.substr("00000".$maxno, -6);
  121. }
  122. /**
  123. * ???????????
  124. * add by hujianxin
  125. *
  126. * @param bigint $dealer_order_id
  127. * @param int $delivery_id?
  128. * @return boolean
  129. */
  130. function _add_order_log($dealer_order_id,$delivery_id){
  131. $message_part1 = "";
  132. $message = "";
  133. $behavior = "";
  134. $order_info = $this->db->selectrow("SELECT ship_status FROM sdb_orders WHERE order_id=".$dealer_order_id);
  135. $ship_status = $order_info['ship_status'];
  136. $delivery_info = $this->db->selectrow("SELECT logi_name,logi_no FROM sdb_delivery WHERE delivery_id=".$delivery_id);
  137. if($ship_status == "1"){ //????
  138. $message_part1 = "????";
  139. $behavior = "??";
  140. }else if($ship_status == "2"){ //????
  141. $message_part1 = "???";
  142. $behavior = "??";
  143. }else if($ship_status == "3"){ //????
  144. $message_part1 = "???";
  145. $behavior = "??";
  146. }else if($ship_status == "4"){ //????
  147. $message_part1 = "????";
  148. $behavior = "??";
  149. }
  150. if(!empty($behavior)){
  151. $message = "??<!--order_id=".$dealer_order_id."&delivery_id=".$delivery_id."&ship_status=".$ship_status."-->".$message_part1;
  152. if(!empty($delivery_info['logi_name'])){
  153. $message .= "??????".$delivery_info['logi_name'];
  154. }
  155. if(!empty($delivery_info['logi_no'])){
  156. $message .= "??????".$delivery_info['logi_no'];
  157. }
  158. $return1 = $this->_add_log($dealer_order_id,$message,$behavior);
  159. return $return1;
  160. }else{
  161. return false;
  162. }
  163. }
  164. /**
  165. * ??order log
  166. *
  167. * @param int $order_id
  168. * @param string $message
  169. * @param string $behavior
  170. * @return boolean
  171. */
  172. function _add_log($order_id,$message,$behavior){
  173. $rs = $this->db->query('select * from sdb_order_log where 0=1');
  174. $sql = $this->db->getInsertSQL($rs,array(
  175. 'order_id'=>$order_id,
  176. 'op_id'=>NULL,
  177. 'op_name'=>NULL,
  178. 'behavior'=>$behavior,
  179. 'result'=>'success',
  180. 'log_text'=>addslashes($message),
  181. 'acttime'=>time()
  182. ));
  183. return $this->db->exec($sql);
  184. }
  185. /**
  186. * ?????
  187. *
  188. * @param int $supplier_orderid po???
  189. * @param array $data
  190. * array(
  191. * 'dealer_order_id' => xxx,
  192. * 'money' => xxx,
  193. * 'type' => return/delivery,
  194. * 'is_protect' => true/false,
  195. * 'delivery' => xxx,
  196. * 'logi_name' => xxx,
  197. * 'logi_no' => xxx,
  198. * 'ship_name' => xxx,
  199. * 'ship_area' => xxx,
  200. * 'ship_addr' => xxx,
  201. * 'ship_zip' => xxx,
  202. * 'ship_tel' => xxx,
  203. * 'ship_mobile' => xxx,
  204. * 'ship_email' => xxx,
  205. * 'ship_tel' => xxx,
  206. * 't_begin' => xxx,
  207. * 't_end' => xxx,
  208. * 'status' => xxx,
  209. * 'memo' => xxx,
  210. * 'struct' => array(
  211. * 'dealer_bn' => xxx,
  212. * 'item_type' => xxx,
  213. * 'product_bn' => xxx,
  214. * 'product_name' => xxx,
  215. * 'number' => xxx,
  216. * )
  217. * )
  218. * @return ??????
  219. */
  220. function ww($error_info){
  221. return false;
  222. if(is_array($error_info)){
  223. $error_info = print_r($error_info, true);
  224. }
  225. //error_log(date("Y:m:d:H:i:s").$error_info."\n", 3, HOME_DIR."/bryant/errors.log");
  226. }
  227. function add_delivery_bill($input_data){
  228. $this->ww('test');
  229. $supplier_id = $input_data['supplier_id'];
  230. $data = json_decode($input_data['data'], true);
  231. $delivery_no = $this->_get_new_number('delivery');
  232. $_delivery_items = $data['struct'];
  233. $this->ww($_delivery_items);
  234. $dealer_orderid = $data['dealer_order_id'];
  235. unset($data['struct']);
  236. $this->ww($_delivery_items);
  237. /*
  238. foreach($_delivery_items as $_items){
  239. $_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']);
  240. $_arr_tmp = $this->db->selectrow($_sql);
  241. if($_arr_tmp['sub_num']-$_items['number']>0){
  242. $ship_status = 2;//????
  243. }
  244. }*/
  245. $this->ww($ship_status);
  246. $_sql = sprintf('select member_id from sdb_orders where order_id=%s', $dealer_orderid);
  247. $this->ww($_sql);
  248. if ($_order_data = $this->db->selectrow($_sql)){
  249. $data['member_id'] = $_order_data['member_id'];
  250. $data['type'] = 'delivery';
  251. $data['op_name'] = 'admin';
  252. $data['order_id'] = $dealer_orderid;
  253. $data['logi_id'] = null;
  254. $data['delivery_id'] = $delivery_no;
  255. $rs = $this->db->query('SELECT * FROM sdb_delivery WHERE 0=1');
  256. $data = addslashes_array($data);
  257. $_sql = $this->db->GetInsertSQL($rs, $data);
  258. if (!$this->db->exec($_sql)){
  259. $this->ww($_sql);
  260. $this->api_response('fail','data fail',null,'???????');
  261. }else{
  262. foreach($_delivery_items as $_item){
  263. $_data = array(
  264. 'delivery_id' => $delivery_no,
  265. 'product_bn' => $_item['dealer_bn'],
  266. 'item_type' => $_item['item_type'],
  267. 'product_name' => $_item['product_name'],//todo ????????
  268. 'number' => $_item['number'],
  269. );
  270. $rs = $this->db->query('SELECT * FROM sdb_delivery_item WHERE 0=1');
  271. $_data = addslashes_array($_data);
  272. $_sql = $this->db->GetInsertSQL($rs, $_data);
  273. if (!$this->db->exec($_sql)){
  274. $this->ww($_sql);
  275. $this->api_response('fail','data fail',$result,'???????');
  276. }
  277. //??order_items ??????
  278. $_sql = sprintf('update sdb_order_items set sendnum=sendnum+%d where order_id=%s and bn=\'%s\'',$_item['number'], $dealer_orderid, $_item['dealer_bn']);
  279. $this->db->exec($_sql);
  280. $this->ww($_sql);
  281. }
  282. }
  283. }else{
  284. // $this->api_response('fail','data fail',null,'?????');
  285. $this->api_response('true',false,null);
  286. }
  287. $this->ww('successed');
  288. $ship_status = 1;//????
  289. $_order_items = $this->db->select('select nums,sendnum from sdb_order_items where order_id='.$dealer_orderid);
  290. if(is_array($_order_items)){
  291. foreach($_order_items as $_item){
  292. if($_item['nums']>$_item['sendnum']){
  293. $ship_status = 2;
  294. break;
  295. }
  296. }
  297. }
  298. $_data = array('ship_status' => $ship_status);
  299. $rs = $this->db->exec('SELECT * FROM sdb_orders WHERE order_id='.$dealer_orderid);
  300. $_sql = $this->db->getUpdateSQL($rs,$_data);
  301. $this->ww($_sql);
  302. if (!$this->db->exec($_sql)){
  303. $this->api_response('fail','data fail',null,'??????????');
  304. }
  305. //?????????add by hujianxin
  306. $this->_add_order_log($dealer_orderid,$delivery_no);
  307. $this->api_response('true',false,null);
  308. }
  309. /**
  310. * ??????
  311. *
  312. * @param int $supplier_orderid po???
  313. * @param array $data
  314. * array(
  315. * 'dealer_order_id' => xxx,
  316. * 'money' => xxx,
  317. * 'type' => return/delivery,
  318. * 'is_protect' => true/false,
  319. * 'delivery' => xxx,
  320. * 'logi_name' => xxx,
  321. * 'logi_no' => xxx,
  322. * 'ship_name' => xxx,
  323. * 'ship_area' => xxx,
  324. * 'ship_addr' => xxx,
  325. * 'ship_zip' => xxx,
  326. * 'ship_tel' => xxx,
  327. * 'ship_mobile' => xxx,
  328. * 'ship_email' => xxx,
  329. * 'ship_tel' => xxx,
  330. * 't_begin' => xxx,
  331. * 't_end' => xxx,
  332. * 'status' => xxx,
  333. * 'memo' => xxx,
  334. * 'struct' => array(
  335. * 'dealer_bn' => xxx,
  336. * 'item_type' => xxx,
  337. * 'product_bn' => xxx,
  338. * 'product_name' => xxx,
  339. * 'number' => xxx,
  340. * )
  341. * )
  342. * @return ??????
  343. */
  344. function add_reship_bill($input_data){
  345. $supplier_id = $input_data['supplier_id'];
  346. $data = json_decode($input_data['data'], true);
  347. // error_log(print_r($data, true), 3, "/home/bryant/errors.log");
  348. // error_log(print_r(json_decode($data,true), true), 3, "/home/bryant/errors.log");
  349. $delivery_no = $this->_get_new_number('delivery');
  350. $_delivery_items = $data['struct'];
  351. $dealer_orderid = $data['dealer_order_id'];
  352. unset($data['struct']);
  353. /*
  354. $aShipStatus = $status = array(0=>'???',
  355. 1=>'?????',
  356. 2=>'????',
  357. 3=>'????',
  358. 4=>'?????' );
  359. */
  360. $ship_status = 5;//?????
  361. foreach($_delivery_items as $_items){
  362. $_sql = sprintf('select sendnum from sdb_orders where bn=\'%s\'', $_items['dealer_bn']);
  363. $_arr_tmp = $this->db->selectrow($_sql);
  364. if ($_arr_tmp['sendnum']>$_items['number']){
  365. $ship_status = 3;//????
  366. }
  367. }
  368. $_sql = sprintf('select member_id from sdb_orders where order_id=%s', $dealer_orderid);
  369. if ($_order_data = $this->db->selectrow($_sql)){
  370. $data['member_id'] = $_order_data['member_id'];
  371. $data['type'] = 'return';
  372. $data['op_name'] = 'admin';
  373. $data['order_id'] = $dealer_orderid;
  374. $data['logi_id'] = null;
  375. $data['delivery_id'] = $delivery_no;
  376. $rs = $this->db->query('SELECT * FROM sdb_delivery WHERE 0=1');
  377. $data = addslashes_array($data);
  378. $_sql = $this->db->GetInsertSQL($rs, $data);
  379. if (!$this->db->exec($_sql)){
  380. $this->api_response('fail','data fail',null,'???????');
  381. }else{
  382. foreach($_delivery_items as $_item){
  383. $_data = array(
  384. 'delivery_id' => $delivery_no,
  385. 'product_bn' => $_item['dealer_bn'],
  386. 'item_type' => $_item['item_type'],
  387. 'product_name' => $_item['product_name'],//todo ????????
  388. 'number' => $_item['number'],
  389. );
  390. $rs = $this->db->query('SELECT * FROM sdb_delivery_item WHERE 0=1');
  391. $_data = addslashes_array($_data);
  392. $_sql = $this->db->GetInsertSQL($rs, $_data);
  393. $this->ww($_sql);
  394. if (!$this->db->exec($_sql)){
  395. $this->api_response('fail','data fail',$result,'???????');
  396. }
  397. //??order_items ??????
  398. $_sql = sprintf('update sdb_order_items set sendnum=sendnum-%d where order_id=%s and bn=\'%s\'',$_item['number'], $dealer_orderid, $_item['dealer_bn']);
  399. $this->db->exec($_sql);
  400. $this->ww($_sql);
  401. }
  402. }
  403. }else{
  404. //$this->api_response('fail','data fail',null,'?????');
  405. $this->api_response('true',false,null);
  406. }
  407. $ship_status = 4;//????
  408. $_order_items = $this->db->select('select sendnum from sdb_order_items where order_id='.$dealer_orderid);
  409. if(is_array($_order_items)){
  410. foreach($_order_items as $_item){
  411. if($_item['sendnum']>0){
  412. $ship_status = 3;
  413. break;
  414. }
  415. }
  416. }
  417. $_data = array('ship_status' => $ship_status);
  418. $rs = $this->db->exec('SELECT * FROM sdb_orders WHERE order_id='.$dealer_orderid);
  419. $_sql = $this->db->getUpdateSQL($rs,$_data);
  420. $this->ww($_sql);
  421. if (!$this->db->exec($_sql)){
  422. $this->api_response('fail','data fail',null,'?????????');
  423. }
  424. //?????????add by hujianxin
  425. $this->_add_order_log($dealer_orderid,$delivery_no);
  426. $this->api_response('true',false,null);
  427. }
  428. }