Category.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\shopcomponent\model;
  11. use app\model\BaseModel;
  12. use think\facade\Cache;
  13. class Category extends BaseModel
  14. {
  15. private $statusName = [
  16. '0' => '待提交',
  17. '1' => '审核成功',
  18. '9' => '审核拒绝'
  19. ];
  20. private $type = [
  21. '0' => '不需要',
  22. '1' => '需要',
  23. '2' => '可选'
  24. ];
  25. /**
  26. * 获取类目列表
  27. * @param array $condition
  28. * @param bool $field
  29. * @param string $order
  30. * @param int $page
  31. * @param int $list_rows
  32. * @param string $alias
  33. * @param array $join
  34. * @return array
  35. */
  36. public function getCategoryPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [])
  37. {
  38. $check_condition = array_column($condition, 2, 0);
  39. $site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : 0;
  40. $site_id_index = array_search('site_id', array_keys(array_column($condition, 2, 0)));
  41. unset($condition[ $site_id_index ]);
  42. $data = model('shopcompoent_category')->pageList($condition, $field, $order, $page, $list_rows, $alias, $join);
  43. if (!empty($data[ 'list' ])) {
  44. foreach ($data[ 'list' ] as $k => $item) {
  45. $audit_info = model('shopcompoent_category_audit')->getInfo([ [ 'site_id', '=', $site_id ], [ 'third_cat_id', '=', $item[ 'third_cat_id' ] ] ]);
  46. if (empty($audit_info)) {
  47. $audit_info = [
  48. 'certificate' => '',
  49. 'qualification_pics' => '',
  50. 'audit_id' => '',
  51. 'audit_time' => 0,
  52. 'status' => 0,
  53. 'reject_reason' => ''
  54. ];
  55. }
  56. $item = array_merge($item, $audit_info);
  57. $data[ 'list' ][ $k ] = $item;
  58. if ($item[ 'audit_time' ] > 0 && $item[ 'status' ] == 0) {
  59. $data[ 'list' ][ $k ][ 'status_name' ] = '审核中';
  60. } else if ($item[ 'qualification_type' ] == 0 && $item[ 'product_qualification_type' ] == 0) {
  61. $data[ 'list' ][ $k ][ 'status_name' ] = '--';
  62. } else {
  63. $data[ 'list' ][ $k ][ 'status_name' ] = $this->statusName[ $item[ 'status' ] ] ?? '';
  64. }
  65. $data[ 'list' ][ $k ][ 'create_time' ] = $item[ 'create_time' ] > 0 ? time_to_date($item[ 'create_time' ]) : '--';
  66. $data[ 'list' ][ $k ][ 'audit_time' ] = $item[ 'audit_time' ] > 0 ? time_to_date($item[ 'audit_time' ]) : '--';
  67. $data[ 'list' ][ $k ][ 'leimu' ] = $item[ 'first_cat_name' ] . '>' . $item[ 'second_cat_name' ] . '>' . $item[ 'third_cat_name' ];
  68. $data[ 'list' ][ $k ][ 'product_qualification_type_name' ] = $this->type[ $item[ 'product_qualification_type' ] ] ?? '';
  69. $data[ 'list' ][ $k ][ 'qualification_type_name' ] = $this->type[ $item[ 'qualification_type' ] ] ?? '';
  70. $data[ 'list' ][ $k ][ 'license' ] = Cache::get('license_' . $item[ 'third_cat_id' ]);
  71. $data[ 'list' ][ $k ][ 'reject_reason' ] = str_replace('https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/audit/audit_brand.html', '', $item[ 'reject_reason' ]);
  72. }
  73. }
  74. return $this->success($data);
  75. }
  76. /**
  77. * 同步商品类目
  78. */
  79. public function syncCategory($site_id)
  80. {
  81. $res = ( new Weapp($site_id) )->getCatList();
  82. if ($res[ 'code' ] < 0) return $res;
  83. if (!empty($res[ 'data' ])) {
  84. model('shopcompoent_category')->delete([ [ 'create_time', '<', time() ] ]);
  85. $data = [];
  86. foreach ($res[ 'data' ] as $item) {
  87. array_push($data, [
  88. 'first_cat_id' => $item[ 'first_cat_id' ],
  89. 'second_cat_id' => $item[ 'second_cat_id' ],
  90. 'third_cat_id' => $item[ 'third_cat_id' ],
  91. 'first_cat_name' => $item[ 'first_cat_name' ],
  92. 'second_cat_name' => $item[ 'second_cat_name' ],
  93. 'third_cat_name' => $item[ 'third_cat_name' ],
  94. 'qualification' => $item[ 'qualification' ],
  95. 'qualification_type' => $item[ 'qualification_type' ],
  96. 'product_qualification_type' => $item[ 'product_qualification_type' ],
  97. 'product_qualification' => $item[ 'product_qualification' ],
  98. 'create_time' => time(),
  99. ]);
  100. }
  101. model('shopcompoent_category')->addList($data);
  102. Cache::tag('wxCategory')->clear();
  103. return $this->success(1);
  104. }
  105. }
  106. /**
  107. * 上传类目资质
  108. */
  109. public function uploadQualifications($param, $site_id)
  110. {
  111. $category = model('shopcompoent_category')->getInfo([ [ 'third_cat_id', '=', $param[ 'third_cat_id' ] ] ]);
  112. $img1 = "";
  113. if (!empty($param[ 'leimu_qualification' ])) {
  114. $img_info1 = ( new Weapp($site_id) )->getImg(img($param[ 'leimu_qualification' ]));
  115. if ($img_info1[ 'code' ] == 0) {
  116. $img1 = $img_info1[ 'data' ][ 'img_info' ][ 'temp_img_url' ];
  117. }
  118. }
  119. $img2 = "";
  120. if (!empty($param[ 'product_qualification' ])) {
  121. $img_info2 = ( new Weapp($site_id) )->getImg(img($param[ 'product_qualification' ]));
  122. if ($img_info2[ 'code' ] == 0) {
  123. $img2 = $img_info2[ 'data' ][ 'img_info' ][ 'temp_img_url' ];
  124. }
  125. }
  126. if ($category[ 'qualification_type' ] != 0) {
  127. $zhengshu = "";
  128. if (isset($param[ 'zhengshu' ])) {
  129. $zhengshu_info = ( new Weapp($site_id) )->getImg(img($param[ 'zhengshu' ]));
  130. if ($zhengshu_info[ 'code' ] == 0) {
  131. $zhengshu = $zhengshu_info[ 'data' ][ 'img_info' ][ 'temp_img_url' ];
  132. }
  133. }
  134. $data = [
  135. 'license' => $zhengshu ?? '',
  136. 'category_info' => [
  137. 'level1' => $param[ 'first_cat_id' ],
  138. 'level2' => $param[ 'second_cat_id' ],
  139. 'level3' => $param[ 'third_cat_id' ],
  140. 'certificate' => []
  141. ]
  142. ];
  143. if (isset($param[ 'leimu_qualification' ])) {
  144. array_push($data[ 'category_info' ][ 'certificate' ], $img1);
  145. }
  146. if (isset($param[ 'product_qualification' ])) {
  147. array_push($data[ 'category_info' ][ 'certificate' ], $img2);
  148. }
  149. $res = ( new Weapp($site_id) )->auditCategory($data);
  150. if ($res[ 'code' ] < 0 && $res[ 'data' ] != '1050003') return $res;
  151. } else {
  152. $res = $this->success();
  153. }
  154. $audit_data = [
  155. 'site_id' => $site_id,
  156. 'third_cat_id' => $param[ 'third_cat_id' ],
  157. 'audit_id' => $res[ 'data' ],
  158. 'audit_time' => time(),
  159. 'certificate' => $img1,
  160. 'qualification_pics' => $img2,
  161. 'status' => 0
  162. ];
  163. if ($category[ 'qualification_type' ] == 0 || $res[ 'data' ] == '1050003') {
  164. $audit_data[ 'status' ] = 1;
  165. $audit_data[ 'audit_time' ] = time();
  166. }
  167. Cache::set('license_' . $param[ 'third_cat_id' ], img($param[ 'zhengshu' ]));
  168. $is_exit = model('shopcompoent_category_audit')->getCount([ [ 'site_id', '=', $site_id ], [ 'third_cat_id', '=', $param[ 'third_cat_id' ] ] ]);
  169. if ($is_exit) {
  170. model('shopcompoent_category_audit')->update($audit_data, [ [ 'site_id', '=', $site_id ], [ 'third_cat_id', '=', $param[ 'third_cat_id' ] ] ]);
  171. } else {
  172. model('shopcompoent_category_audit')->add($audit_data);
  173. }
  174. return $this->success();
  175. }
  176. /**
  177. * 获取类目通过上级类目ID
  178. * @param $level
  179. * @param int $pid
  180. * @return array
  181. */
  182. public function getCategoryByParent($level, $pid = 0)
  183. {
  184. $cache = Cache::get("wxCategory_{$level}_{$pid}");
  185. if ($cache) return $cache;
  186. switch ( $level ) {
  187. case 1:
  188. $list = model('shopcompoent_category')->getList([], '*', '', '', null, 'first_cat_id');
  189. break;
  190. case 2:
  191. $list = model('shopcompoent_category')->getList([ [ 'first_cat_id', '=', $pid ] ], '*', '', '', null, 'second_cat_id');
  192. break;
  193. case 3:
  194. $list = model('shopcompoent_category')->getList([ [ 'second_cat_id', '=', $pid ] ], '*', '', '', null, 'third_cat_name');
  195. break;
  196. }
  197. $data = $this->success($list);
  198. Cache::tag('wxCategory')->set("wxCategory_{$level}_{$pid}", $data);
  199. return $data;
  200. }
  201. /**
  202. * 查询分类是否需要上传资质
  203. * @param $param
  204. * @return array
  205. */
  206. public function isQualifications($param)
  207. {
  208. $info = model('shopcompoent_category')->getInfo([ [ 'third_cat_id', '=', $param[ 'third_cat_id' ] ] ], 'qualification_type,product_qualification_type');
  209. if ($info[ 'qualification_type' ] != 0 || $info[ 'product_qualification_type' ] != 0) {
  210. $audit_info = model('shopcompoent_category_audit')->getInfo([ [ 'status', '=', 1 ], [ 'site_id', '=', $param[ 'site_id' ] ], [ 'third_cat_id', '=', $param[ 'third_cat_id' ] ] ]);
  211. if (empty($audit_info)) return $this->error();
  212. }
  213. return $this->success();
  214. }
  215. /**
  216. * 获取分类信息
  217. * @param $third_cat_id
  218. * @param $site_id
  219. */
  220. public function getCategoryInfo($third_cat_id, $site_id)
  221. {
  222. $info = model('shopcompoent_category')->getInfo([ [ 'third_cat_id', '=', $third_cat_id ] ]);
  223. if (empty($info)) return $info;
  224. $audit_info = model('shopcompoent_category_audit')->getInfo([ [ 'site_id', '=', $site_id ], [ 'third_cat_id', '=', $third_cat_id ] ]);
  225. if (empty($audit_info)) {
  226. $audit_info = [
  227. 'certificate' => '',
  228. 'qualification_pics' => '',
  229. 'audit_id' => '',
  230. 'audit_time' => 0,
  231. 'status' => 0,
  232. 'reject_reason' => ''
  233. ];
  234. if (( $info[ 'qualification_type' ] == 0 && $info[ 'product_qualification_type' ] == 0 ) || ( $info[ 'qualification_type' ] == 2 && $info[ 'product_qualification_type' ] == 2 )) $audit_info[ 'status' ] = 1;
  235. }
  236. return array_merge($info, $audit_info);
  237. }
  238. /**
  239. * 同步类目审核状态
  240. * @param $site_id
  241. */
  242. public function syncCategoryAuditStatus($site_id)
  243. {
  244. $audit_list = model('shopcompoent_category_audit')->getList([ [ 'site_id', '=', $site_id ], [ 'audit_id', '<>', '' ], [ 'status', '=', 0 ] ]);
  245. if (!empty($audit_list)) {
  246. $weapp = new Weapp($site_id);
  247. foreach ($audit_list as $item) {
  248. $audit_result = $weapp->getAuditResult($item[ 'audit_id' ]);
  249. if ($audit_result[ 'code' ] == 0) {
  250. model('shopcompoent_category_audit')->update([ 'status' => $audit_result[ 'data' ][ 'status' ], 'audit_time' => time(), 'reject_reason' => $audit_result[ 'data' ][ 'reject_reason' ] ], [ [ 'id', '=', $item[ 'id' ] ] ]);
  251. }
  252. }
  253. }
  254. }
  255. }