You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

266 line
11 KiB

  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm Synchro.php
  13. * Create By 2017/7/10 10:13 $
  14. */
  15. namespace console\models;
  16. use common\models\ProdImg;
  17. use common\models\ProdMain;
  18. use Yii;
  19. use common\models\ProdCategory;
  20. use common\util\CurlInterface;
  21. use common\util\Util;
  22. use yii\db\Exception;
  23. class Synchro
  24. {
  25. /**
  26. * Des:获取巴士自由行产品的数组
  27. * Name: getCsFreeWalk
  28. * @return array
  29. * @author 倪宗锋
  30. */
  31. public function getCsFreeWalk()
  32. {
  33. $siteConfig = Util::getSiteConfig();
  34. $time = time();
  35. $send_data = [
  36. 'auth_code' => Util::authCodeForCs($time),
  37. 'user_key' => $siteConfig['adm_user_key'],
  38. 'user' => $siteConfig['adm_user'],
  39. 'user_id' => $siteConfig['adm_user_id'],
  40. 'request_time' => $time,
  41. 'action' => 'get_all_tourist_info',
  42. 'org_id' => $siteConfig['adm_source_id']
  43. ];
  44. $curlInterface = new CurlInterface($send_data, 4);
  45. $curlInterface->setBaseUrl('');
  46. $csProdArr = $curlInterface->execute($siteConfig['adm_host1'] . '/api/wx/', 'POST');
  47. if (!isset($csProdArr['code']) || $csProdArr['code'] != 0) {
  48. return Util::returnArrEr('接口错误!');
  49. } else {
  50. return Util::returnArrSu('', $csProdArr['list']);
  51. }
  52. }
  53. /**
  54. * Des:添加巴士自由行产品数据
  55. * Name: addFreeWalk
  56. * @param $csProdArr
  57. * @param $localProdSign
  58. * @return array
  59. * @author 倪宗锋
  60. */
  61. public function addFreeWalk($csProdArr, $localProdSign)
  62. {
  63. $errorIds = [];
  64. $success = [];
  65. $prodCategory = new ProdCategory();
  66. foreach ($csProdArr as $key => $val) {
  67. if (in_array($key, $localProdSign)) {//已经存在不做处理
  68. continue;
  69. }
  70. $transaction = Yii::$app->db->beginTransaction();
  71. try {
  72. $list_img_url = empty($val['list_img_url']) ? [] : $val['list_img_url'];//产品图片列表
  73. //添加产品品类数据
  74. $prod_category = clone $prodCategory;
  75. $value = [
  76. 'category_id' => '4',
  77. 'sign' => $key,
  78. 'pro_cate_name' => $val['name'],
  79. 'prod_des' => $val['prod_des'],
  80. 'feature' => $val['feature'],
  81. 'trip_desc' => $val['trip_desc'],
  82. 'memo' => $val['price_explain'] . '<br/><br/>' . $val['memo'],
  83. 'start_area' => $val['start_area'],
  84. 'address' => $val['end_area'],
  85. 'create_time' => date('Y-m-d H:i:s'),
  86. 'show_img' => $val['top_image_url'],
  87. 'commission' => 5,
  88. 'show_price' => ceil($val['mini_price']),
  89. 'original_price' => ceil($val['mini_price'])
  90. ];
  91. $prod_category->isNewRecord = true;
  92. $prod_category->setAttributes($value);
  93. $prod_res = $prod_category->save(false);
  94. if ($prod_res === false) {
  95. $errorIds[] = $key . '[1]';//错误ID数组
  96. $transaction->rollBack();
  97. continue;
  98. }
  99. $pro_cate_id = $prod_category->pro_cate_id;
  100. //添加产品图片 插入失败不终止产品的同步
  101. if (count($list_img_url) > 0) {
  102. $prodImgValues = [];
  103. $prodImgKeys = ['pro_cate_id', 'img_url', 'redirect_url', 'memo', 'img_type', 'create_time'];
  104. foreach ($list_img_url as $subVal) {
  105. $prodImgVal = [];
  106. $prodImgVal[] = $pro_cate_id;//pro_cate_id
  107. $prodImgVal[] = $subVal;//img_url
  108. $prodImgVal[] = '';//redirect_url
  109. $prodImgVal[] = '';//memo
  110. $prodImgVal[] = 1;//产品轮播图 img_type
  111. $prodImgVal[] = date('Y-m-d H:i:s');//create_time
  112. $prodImgValues[] = $prodImgVal;
  113. }
  114. Yii::$app->db->createCommand()->batchInsert('prod_img', $prodImgKeys, $prodImgValues)->execute();
  115. }
  116. //添加产品表数据
  117. $subTicket = $val['sub_ticket'];
  118. $prodMainValues = [];
  119. $prodMainKeys = ['prod_cate_id', 'prod_name', 'create_time', 'bus_id'];
  120. foreach ($subTicket as $subVal) {
  121. $prodMainVal = [];
  122. $prodMainVal[] = $pro_cate_id;
  123. $prodMainVal[] = $subVal['prod_name'];
  124. $prodMainVal[] = date('Y-m-d H:i:s');
  125. $prodMainVal[] = $subVal['prod_id'];
  126. $prodMainValues[] = $prodMainVal;
  127. }
  128. $count = Yii::$app->db->createCommand()->batchInsert(ProdMain::tableName(), $prodMainKeys, $prodMainValues)->execute();
  129. if ($count == 0) {
  130. $errorIds[] = $key . '[2]';//错误ID数组
  131. $transaction->rollBack();
  132. continue;
  133. }
  134. $success[] = $key;//添加成功记录
  135. $transaction->commit();
  136. } catch (Exception $e) {
  137. print_r($e);
  138. $errorIds[] = $key . '[3]';//错误ID数组
  139. $transaction->rollBack();
  140. continue;
  141. }
  142. }
  143. return Util::returnArrSu('', ['success' => implode(',', $success), 'fail' => implode(',', $errorIds)]);
  144. }
  145. /**
  146. * Des:更新巴士自由行产品
  147. * Name: updateFreeWalk
  148. * @param $csProdArr
  149. * @param $localProdSign
  150. * @author 倪宗锋
  151. */
  152. public function updateFreeWalk($csProdArr, $localProdSign)
  153. {
  154. $errorIds = [];
  155. $success = [];
  156. $prodCategory = new ProdCategory();
  157. $proImg = new ProdImg();
  158. foreach ($csProdArr as $key => $val) {
  159. if (empty($localProdSign[$key])) {//更新时,新数据不做处理故不存在不处理
  160. continue;
  161. }
  162. $transaction = Yii::$app->db->beginTransaction();
  163. try {
  164. //更新产品品类数据
  165. $prod_category = clone $prodCategory;
  166. $value = [
  167. 'category_id' => '4',
  168. 'sign' => $key,
  169. 'pro_cate_name' => $val['name'],
  170. 'prod_des' => $val['prod_des'],
  171. 'feature' => $val['feature'],
  172. 'trip_desc' => $val['trip_desc'],
  173. 'memo' => $val['price_explain'] . '<br/><br/>' . $val['memo'],
  174. 'start_area' => $val['start_area'],
  175. 'address' => $val['end_area'],
  176. 'create_time' => date('Y-m-d H:i:s'),
  177. 'show_img' => $val['top_image_url'],
  178. 'commission' => 5,
  179. ];
  180. $count = $prod_category::updateAll($value, ['and', ['=', 'pro_cate_id', $localProdSign[$key]['pro_cate_id']]]);
  181. if ($count === false) {
  182. $errorIds[] = $key . '[1]';//错误ID数组
  183. $transaction->rollBack();
  184. continue;
  185. }
  186. $list_img_url = empty($val['list_img_url']) ? [] : $val['list_img_url'];//产品图片列表
  187. //删除图片
  188. $proImg::deleteAll(['=', 'pro_cate_id', $localProdSign[$key]['pro_cate_id']]);
  189. //添加产品图片 插入失败不终止产品的同步
  190. if (count($list_img_url) > 0) {
  191. $prodImgValues = [];
  192. $prodImgKeys = ['pro_cate_id', 'img_url', 'redirect_url', 'memo', 'img_type', 'create_time'];
  193. foreach ($list_img_url as $subVal) {
  194. $prodImgVal = [];
  195. $prodImgVal[] = $localProdSign[$key]['pro_cate_id'];//pro_cate_id
  196. $prodImgVal[] = $subVal;//img_url
  197. $prodImgVal[] = '';//redirect_url
  198. $prodImgVal[] = '';//memo
  199. $prodImgVal[] = 1;//产品轮播图 img_type
  200. $prodImgVal[] = date('Y-m-d H:i:s');//create_time
  201. $prodImgValues[] = $prodImgVal;
  202. }
  203. Yii::$app->db->createCommand()->batchInsert('prod_img', $prodImgKeys, $prodImgValues)->execute();
  204. }
  205. $success[] = $key;//添加成功记录
  206. $transaction->commit();
  207. } catch (Exception $e) {
  208. print_r($e);
  209. $errorIds[] = $key . '[3]';//错误ID数组
  210. $transaction->rollBack();
  211. continue;
  212. }
  213. }
  214. }
  215. /**
  216. * Des:删除巴士自由行产品数据
  217. * Name: deleteFreeWalk
  218. * @param $csProdArr
  219. * @param $localProdSign
  220. * @return array
  221. * @author 倪宗锋
  222. */
  223. public
  224. function deleteFreeWalk($csProdArr, $localProdSign)
  225. {
  226. $return = [
  227. 'success' => '',
  228. 'fail' => ''
  229. ];
  230. if (count($localProdSign) == 0) {
  231. return Util::returnArrSu('', $return);
  232. }
  233. $delKey = [];
  234. foreach ($localProdSign as $val) {
  235. if (empty($csProdArr[$val]) == false) {//本地有的数据而cs也有 则不做处理
  236. continue;
  237. }
  238. /**删除本地上架而cs已下架的产品*/
  239. $delKey[] = $val;
  240. }
  241. if (count($delKey) == 0) {
  242. return Util::returnArrSu('', $return);
  243. }
  244. $ProdCategory = new ProdCategory();
  245. $value = ['delete_flag' => 1];
  246. $where = [
  247. 'and',
  248. ['in', 'sign', $delKey],
  249. ['=', 'delete_flag', 0]
  250. ];
  251. $count = $ProdCategory::updateAll($value, $where);
  252. if ($count == 0) {
  253. return Util::returnArrEr('删除数据失败!');
  254. }
  255. $return['success'] = implode(',', $delKey);
  256. return Util::returnArrSu('', $return);
  257. }
  258. }