NoticeSend.php 87 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. /*
  8. * @Author: 凯
  9. * @Date: 2021-04-21 10:02:14
  10. * @LastEditTime: 2021-04-23 17:22:47
  11. * @LastEditors: Please set LastEditors
  12. * @Description: In User Settings Edit
  13. * @FilePath: \admin_php\utils\NoticeSend.php
  14. */
  15. namespace app\utils\Notice;
  16. use app\models\AgentApply;
  17. use app\models\Mch;
  18. use app\models\Md;
  19. use app\models\Notice;
  20. use app\models\Option;
  21. use app\models\Order;
  22. use app\models\OrderDetail;
  23. use app\models\Shop;
  24. use app\models\Store;
  25. use app\models\StoreAudit;
  26. use app\models\Supplier;
  27. use app\models\User;
  28. use app\models\UserAuditLog;
  29. use app\models\Worker;
  30. use app\models\WorkerGoods;
  31. use app\models\WorkerOrderExt;
  32. use app\models\WorkerSetting;
  33. use yii\helpers\Json;
  34. /**
  35. * user_id 会员ID
  36. * order_no 订单号
  37. * status 状态 0 未通过 1通过
  38. * type 类型
  39. * desc 备注、通知内容
  40. */
  41. class NoticeSend
  42. {
  43. /**
  44. * @description: 订单提交通知
  45. * @param {*} $user_id
  46. * @param {*} $order_no
  47. * @param {*} $addtime 订单提交时间
  48. * @return {*}
  49. */
  50. public static function OrderSubmit($user_id, $mobile,$order_no, $pay_price, $goods_name, $order_type = 0, $store_id = -1)
  51. {
  52. if ($order_type == 1) {
  53. $page = 'livestockAdoption/my_order/my_order';
  54. }elseif ($order_type == 2) {
  55. $page = 'livestockAdoption/cost_list/list';
  56. }elseif ($order_type == 6) {
  57. $page = 'marketing/serviceHome/order/list/index';
  58. } else {
  59. $page = 'order/order/order';
  60. }
  61. $store = Store::findOne($store_id);
  62. if ($store) {
  63. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  64. $store_id = 0;
  65. }
  66. }
  67. if ($store_id <= 0) {
  68. $setting = Notice::findOne(['store_id' => 0]);
  69. $store_id = 0;
  70. if (!$setting) {
  71. $setting = Notice::findOne(['store_id' => -1]);
  72. $store_id = -1;
  73. }
  74. } else {
  75. $setting = Notice::findOne(['store_id' => $store_id]);
  76. if (!$setting) {
  77. $setting = Notice::findOne(['store_id' => 0]);
  78. $store_id = 0;
  79. if (!$setting) {
  80. $setting = Notice::findOne(['store_id' => -1]);
  81. $store_id = -1;
  82. }
  83. }
  84. }
  85. $goods_name = $goods_name ?: '订单提交';
  86. if ($setting && $setting->order_submit) {
  87. $tpl = Json::decode($setting->order_submit);
  88. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  89. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  90. }
  91. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  92. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], $page, [
  93. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  94. $tpl['miapp']['kid_list'][1] => ['value' => $pay_price],
  95. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  96. $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  97. ]);
  98. }
  99. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  100. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], $page, [
  101. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  102. $tpl['wxaapi']['kid_list'][1] => ['value' => $pay_price],
  103. $tpl['wxaapi']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  104. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  105. ]);
  106. }
  107. } else {
  108. return false;
  109. }
  110. }
  111. /**
  112. * @description: 订单支付通知
  113. * @param integer $user_id
  114. * @param string $order_no
  115. * @param integer $pay_time
  116. * @param integer $pay_price
  117. * @param string $goods_name
  118. * @return {*}
  119. */
  120. public static function OrderPay($user_id, $mobile, $order_no, $pay_price, $goods_name, $order_type = 0)
  121. {
  122. if ($order_type == 1) {
  123. $page = 'livestockAdoption/my_order/my_order';
  124. }elseif ($order_type == 2) {
  125. $page = 'livestockAdoption/cost_list/list';
  126. } else {
  127. $page = 'order/order/order';
  128. }
  129. $self_mini = 1;
  130. $user = User::findOne($user_id);
  131. $store_id = $user->store_id;
  132. $store = Store::findOne($store_id);
  133. if ($store) {
  134. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  135. $store_id = 0;
  136. }
  137. }
  138. if ($store_id <= 0) {
  139. $setting = Notice::findOne(['store_id' => 0]);
  140. $store_id = 0;
  141. if (!$setting) {
  142. $setting = Notice::findOne(['store_id' => -1]);
  143. $store_id = -1;
  144. }
  145. } else {
  146. $setting = Notice::findOne(['store_id' => $store_id]);
  147. if (!$setting) {
  148. $setting = Notice::findOne(['store_id' => 0]);
  149. $store_id = 0;
  150. if (!$setting) {
  151. $setting = Notice::findOne(['store_id' => -1]);
  152. $store_id = -1;
  153. }
  154. }
  155. }
  156. $goods_name = $goods_name ?: '订单支付';
  157. if ($setting && $setting->order_pay) {
  158. $tpl = Json::decode($setting->order_pay);
  159. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  160. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  161. }
  162. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  163. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], $page, [
  164. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  165. $tpl['miapp']['kid_list'][1] => ['value' => $pay_price],
  166. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', time())],
  167. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  168. ]);
  169. }
  170. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  171. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], $page, [
  172. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  173. $tpl['wxaapi']['kid_list'][1] => ['value' => $pay_price],
  174. $tpl['wxaapi']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', time())],
  175. $tpl['wxaapi']['kid_list'][3] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  176. ]);
  177. }
  178. } else {
  179. return false;
  180. }
  181. }
  182. /**
  183. * @description: 订单取消通知
  184. * @param integer $user_id
  185. * @param string $order_no
  186. * @param integer $order_price
  187. * @param string $desc
  188. * @return {*}
  189. */
  190. public static function OrderCancel($user_id, $mobile, $order_no, $pay_price, $goods_name, $order_type = 0)
  191. {
  192. if ($order_type == 1) {
  193. $page = 'livestockAdoption/my_order/my_order';
  194. }elseif ($order_type == 2) {
  195. $page = 'livestockAdoption/cost_list/list';
  196. } else {
  197. $page = 'order/order/order';
  198. }
  199. $store_id = get_store_id();
  200. $store = Store::findOne($store_id);
  201. if ($store) {
  202. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  203. $store_id = 0;
  204. }
  205. }
  206. if ($store_id <= 0) {
  207. $setting = Notice::findOne(['store_id' => 0]);
  208. $store_id = 0;
  209. if (!$setting) {
  210. $setting = Notice::findOne(['store_id' => -1]);
  211. $store_id = -1;
  212. }
  213. } else {
  214. $setting = Notice::findOne(['store_id' => $store_id]);
  215. if (!$setting) {
  216. $setting = Notice::findOne(['store_id' => 0]);
  217. $store_id = 0;
  218. if (!$setting) {
  219. $setting = Notice::findOne(['store_id' => -1]);
  220. $store_id = -1;
  221. }
  222. }
  223. }
  224. $goods_name = $goods_name ?: '订单取消通知';
  225. if ($setting && $setting->order_cancel) {
  226. $tpl = Json::decode($setting->order_cancel);
  227. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  228. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  229. }
  230. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  231. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], $page, [
  232. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  233. $tpl['miapp']['kid_list'][1] => ['value' => $pay_price],
  234. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  235. $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  236. ]);
  237. }
  238. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  239. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], $page, [
  240. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  241. $tpl['wxaapi']['kid_list'][1] => ['value' => $pay_price],
  242. $tpl['wxaapi']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  243. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  244. ]);
  245. }
  246. } else {
  247. return false;
  248. }
  249. }
  250. /**
  251. * @description: 订单退款通知
  252. * @param integer $user_id
  253. * @param string $order_no
  254. * @param integer $price
  255. * @param string $goods_name
  256. * @return {*}
  257. */
  258. public static function OrderRefund($user_id, $mobile, $order_no, $refund_price, $goods_name)
  259. {
  260. $store_id = get_store_id();
  261. $store = Store::findOne($store_id);
  262. if ($store) {
  263. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  264. $store_id = 0;
  265. }
  266. }
  267. if ($store_id <= 0) {
  268. $setting = Notice::findOne(['store_id' => 0]);
  269. $store_id = 0;
  270. if (!$setting) {
  271. $setting = Notice::findOne(['store_id' => -1]);
  272. $store_id = -1;
  273. }
  274. } else {
  275. $setting = Notice::findOne(['store_id' => $store_id]);
  276. if (!$setting) {
  277. $setting = Notice::findOne(['store_id' => 0]);
  278. $store_id = 0;
  279. if (!$setting) {
  280. $setting = Notice::findOne(['store_id' => -1]);
  281. $store_id = -1;
  282. }
  283. }
  284. }
  285. $goods_name = $goods_name ?: '订单退款通知';
  286. if ($setting && $setting->order_refund) {
  287. $tpl = Json::decode($setting->order_refund);
  288. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  289. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  290. }
  291. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  292. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'pages/order/order', [
  293. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  294. $tpl['miapp']['kid_list'][1] => ['value' => $refund_price],
  295. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  296. $tpl['miapp']['kid_list'][3] => ['value' => '退款成功'],
  297. ]);
  298. }
  299. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  300. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'pages/order/order', [
  301. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  302. $tpl['wxaapi']['kid_list'][1] => ['value' => $refund_price],
  303. $tpl['wxaapi']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  304. $tpl['wxaapi']['kid_list'][3] => ['value' => '退款成功'],
  305. ]);
  306. }
  307. } else {
  308. return false;
  309. }
  310. }
  311. /**
  312. * @description: 订单退款通知
  313. * @param integer $user_id
  314. * @return {*}
  315. */
  316. public static function OrderRefundCancel($mobile)
  317. {
  318. $store_id = get_store_id();
  319. $store = Store::findOne($store_id);
  320. if ($store) {
  321. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  322. $store_id = 0;
  323. }
  324. }
  325. if ($store_id <= 0) {
  326. $setting = Notice::findOne(['store_id' => 0]);
  327. $store_id = 0;
  328. if (!$setting) {
  329. $setting = Notice::findOne(['store_id' => -1]);
  330. $store_id = -1;
  331. }
  332. } else {
  333. $setting = Notice::findOne(['store_id' => $store_id]);
  334. if (!$setting) {
  335. $setting = Notice::findOne(['store_id' => 0]);
  336. $store_id = 0;
  337. if (!$setting) {
  338. $setting = Notice::findOne(['store_id' => -1]);
  339. $store_id = -1;
  340. }
  341. }
  342. }
  343. if ($setting && $setting->order_refund_cancel) {
  344. $tpl = Json::decode($setting->order_refund_cancel);
  345. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  346. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], '' , '', $store_id);
  347. }
  348. // if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  349. // NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'pages/order/order', [
  350. // $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  351. // $tpl['miapp']['kid_list'][1] => ['value' => $refund_price],
  352. // $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  353. // $tpl['miapp']['kid_list'][3] => ['value' => '退款成功'],
  354. //
  355. // ]);
  356. // }
  357. // if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  358. // NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'pages/order/order', [
  359. // $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  360. // $tpl['wxaapi']['kid_list'][1] => ['value' => $refund_price],
  361. // $tpl['wxaapi']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  362. // $tpl['wxaapi']['kid_list'][3] => ['value' => '退款成功'],
  363. // ]);
  364. // }
  365. } else {
  366. return false;
  367. }
  368. }
  369. /**
  370. * @description: 订单发货通知
  371. * @param integer $user_id
  372. * @param string $order_no
  373. * @param string $express
  374. * @param string $express_no
  375. * @return {*}
  376. */
  377. public static function OrderSend($user_id, $mobile, $order_no, $goods_name, $express, $express_no, $order_type = 0)
  378. {
  379. if ($order_type == 1) {
  380. $page = 'livestockAdoption/cost_list/list';
  381. } else if ($order_type == Order::ORDER_TYPE_GIVING_GIFTS) {
  382. $page = 'givingGifts/myGift/myGift';
  383. } else {
  384. $page = 'order/order/order';
  385. }
  386. $express = $express ?: '-';
  387. $express_no = $express_no ?: '-';
  388. $store_id = get_store_id();
  389. $store = Store::findOne($store_id);
  390. if ($store) {
  391. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  392. $store_id = 0;
  393. }
  394. }
  395. if ($store_id <= 0) {
  396. $setting = Notice::findOne(['store_id' => 0]);
  397. $store_id = 0;
  398. if (!$setting) {
  399. $setting = Notice::findOne(['store_id' => -1]);
  400. $store_id = -1;
  401. }
  402. } else {
  403. $setting = Notice::findOne(['store_id' => $store_id]);
  404. if (!$setting) {
  405. $setting = Notice::findOne(['store_id' => 0]);
  406. $store_id = 0;
  407. if (!$setting) {
  408. $setting = Notice::findOne(['store_id' => -1]);
  409. $store_id = -1;
  410. }
  411. }
  412. }
  413. $goods_name = $goods_name ?: '订单退款通知';
  414. if ($setting && $setting->order_send) {
  415. $tpl = Json::decode($setting->order_send);
  416. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  417. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  418. }
  419. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  420. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], $page, [
  421. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  422. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  423. $tpl['miapp']['kid_list'][2] => ['value' => $express],
  424. $tpl['miapp']['kid_list'][3] => ['value' => $express_no],
  425. ]);
  426. }
  427. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  428. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], $page, [
  429. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  430. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  431. $tpl['miapp']['kid_list'][2] => ['value' => $express],
  432. $tpl['miapp']['kid_list'][3] => ['value' => $express_no],
  433. ]);
  434. }
  435. } else {
  436. return false;
  437. }
  438. }
  439. /**
  440. * @description: 门店到货通知
  441. * @param integer $user_id
  442. * @param string $order_no
  443. * @param string $shop_name
  444. * @return {*}
  445. */
  446. public static function ShopArrive($user_id, $mobile, $order_no, $goods_name, $shop_name)
  447. {
  448. $store_id = get_store_id();
  449. $store = Store::findOne($store_id);
  450. if ($store) {
  451. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  452. $store_id = 0;
  453. }
  454. }
  455. if ($store_id <= 0) {
  456. $setting = Notice::findOne(['store_id' => 0]);
  457. $store_id = 0;
  458. if (!$setting) {
  459. $setting = Notice::findOne(['store_id' => -1]);
  460. $store_id = -1;
  461. }
  462. } else {
  463. $setting = Notice::findOne(['store_id' => $store_id]);
  464. if (!$setting) {
  465. $setting = Notice::findOne(['store_id' => 0]);
  466. $store_id = 0;
  467. if (!$setting) {
  468. $setting = Notice::findOne(['store_id' => -1]);
  469. $store_id = -1;
  470. }
  471. }
  472. }
  473. $goods_name = $goods_name ?: '订单退款通知';
  474. if ($setting && $setting->shop_arrive) {
  475. $tpl = Json::decode($setting->shop_arrive);
  476. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  477. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  478. }
  479. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  480. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'pages/order/order', [
  481. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  482. $tpl['miapp']['kid_list'][1] => ['value' => '您的商品已到自提点'],
  483. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', time())],
  484. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($shop_name,0,18,'utf-8')],
  485. ]);
  486. }
  487. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  488. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'pages/order/order', [
  489. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  490. $tpl['miapp']['kid_list'][1] => ['value' => '您的商品已到自提点'],
  491. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', time())],
  492. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($shop_name,0,18,'utf-8')],
  493. ]);
  494. }
  495. } else {
  496. return false;
  497. }
  498. }
  499. /**
  500. * @description: 订单自提通知
  501. * @param integer $user_id
  502. * @param string $order_no
  503. * @param string $shop_name
  504. * @return {*}
  505. */
  506. public static function ShopOffline($user_id, $mobile, $order_no, $shop_id)
  507. {
  508. $shop = Shop::findOne($shop_id);
  509. if (empty($shop)) {
  510. return false;
  511. }
  512. $store_id = get_store_id();
  513. $store = Store::findOne($store_id);
  514. if ($store) {
  515. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  516. $store_id = 0;
  517. }
  518. }
  519. if ($store_id <= 0) {
  520. $setting = Notice::findOne(['store_id' => 0]);
  521. $store_id = 0;
  522. if (!$setting) {
  523. $setting = Notice::findOne(['store_id' => -1]);
  524. $store_id = -1;
  525. }
  526. } else {
  527. $setting = Notice::findOne(['store_id' => $store_id]);
  528. if (!$setting) {
  529. $setting = Notice::findOne(['store_id' => 0]);
  530. $store_id = 0;
  531. if (!$setting) {
  532. $setting = Notice::findOne(['store_id' => -1]);
  533. $store_id = -1;
  534. }
  535. }
  536. }
  537. if ($setting && $setting->shop_offline) {
  538. $tpl = Json::decode($setting->shop_offline);
  539. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  540. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no);
  541. }
  542. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  543. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'pages/order/order', [
  544. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($shop->name,0,18,'utf-8')],
  545. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($shop->address,0,18,'utf-8')],
  546. $tpl['miapp']['kid_list'][2] => ['value' => $order_no],
  547. $tpl['miapp']['kid_list'][3] => ['value' => $shop->mobile],
  548. ]);
  549. }
  550. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  551. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'pages/order/order', [
  552. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($shop->name,0,18,'utf-8')],
  553. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($shop->address,0,18,'utf-8')],
  554. $tpl['miapp']['kid_list'][2] => ['value' => $order_no],
  555. $tpl['miapp']['kid_list'][3] => ['value' => $shop->mobile],
  556. ]);
  557. }
  558. } else {
  559. return false;
  560. }
  561. }
  562. /**
  563. * @description: 账户变动通知
  564. * @param integer $user_id
  565. * @param string $type
  566. * @param string $desc
  567. * @return {*}
  568. */
  569. public static function UserChang($user_id, $mobile, $price, $desc = '充值')
  570. {
  571. $user = User::findOne($user_id);
  572. $store_id = $user->store_id;
  573. $store = Store::findOne($store_id);
  574. if ($store) {
  575. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  576. $store_id = 0;
  577. }
  578. }
  579. if ($store_id <= 0) {
  580. $setting = Notice::findOne(['store_id' => 0]);
  581. $store_id = 0;
  582. if (!$setting) {
  583. $setting = Notice::findOne(['store_id' => -1]);
  584. $store_id = -1;
  585. }
  586. } else {
  587. $setting = Notice::findOne(['store_id' => $store_id]);
  588. if (!$setting) {
  589. $setting = Notice::findOne(['store_id' => 0]);
  590. $store_id = 0;
  591. if (!$setting) {
  592. $setting = Notice::findOne(['store_id' => -1]);
  593. $store_id = -1;
  594. }
  595. }
  596. }
  597. if ($setting && $setting->user_chang) {
  598. $tpl = Json::decode($setting->user_chang);
  599. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  600. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $price, $store_id);
  601. }
  602. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  603. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'pages/order/order', [
  604. $tpl['miapp']['kid_list'][0] => ['value' => $price],
  605. $tpl['miapp']['kid_list'][1] => ['value' => date('Y-m-d H:i:s', time())],
  606. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($desc,0,18,'utf-8')],
  607. $tpl['miapp']['kid_list'][3] => ['value' => $user->money],
  608. ]);
  609. }
  610. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  611. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'pages/order/order', [
  612. $tpl['miapp']['kid_list'][0] => ['value' => $price],
  613. $tpl['miapp']['kid_list'][1] => ['value' => date('Y-m-d H:i:s', time())],
  614. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($desc,0,18,'utf-8')],
  615. $tpl['miapp']['kid_list'][3] => ['value' => $user->money],
  616. ]);
  617. }
  618. } else {
  619. return false;
  620. }
  621. }
  622. /**
  623. * @description: 提现成功
  624. * @param {*} $user_id
  625. * @param {*} $mobile
  626. * @param {*} $price 提现金额
  627. * @param {string} $type 打款方式
  628. * @param {*} $service_price 手续费
  629. * @return {*}
  630. */
  631. public static function CashSuccess($user_id, $mobile, $price, string $type, $service_price)
  632. {
  633. $store_id = get_store_id();
  634. $store = Store::findOne($store_id);
  635. if ($store) {
  636. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  637. $store_id = 0;
  638. }
  639. }
  640. if ($store_id <= 0) {
  641. $setting = Notice::findOne(['store_id' => 0]);
  642. $store_id = 0;
  643. if (!$setting) {
  644. $setting = Notice::findOne(['store_id' => -1]);
  645. $store_id = -1;
  646. }
  647. } else {
  648. $setting = Notice::findOne(['store_id' => $store_id]);
  649. if (!$setting) {
  650. $setting = Notice::findOne(['store_id' => 0]);
  651. $store_id = 0;
  652. if (!$setting) {
  653. $setting = Notice::findOne(['store_id' => -1]);
  654. $store_id = -1;
  655. }
  656. }
  657. }
  658. if ($setting && $setting->cash_success) {
  659. $tpl = Json::decode($setting->cash_success);
  660. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open'] && $tpl['sms']['template_id'] && $tpl['sms']['template_var']) {
  661. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $price, $store_id);
  662. }
  663. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open'] && $tpl['miapp']['template_id']) {
  664. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  665. $tpl['miapp']['kid_list'][0] => ['value' => $price],
  666. $tpl['miapp']['kid_list'][1] => ['value' => '已打款'],
  667. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($type,0,18,'utf-8')],
  668. $tpl['miapp']['kid_list'][3] => ['value' => $service_price],
  669. ]);
  670. }
  671. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open'] && $tpl['wxaapi']['template_id']) {
  672. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], '', [
  673. $tpl['miapp']['kid_list'][0] => ['value' => $price],
  674. $tpl['miapp']['kid_list'][1] => ['value' => '已打款'],
  675. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($type,0,18,'utf-8')],
  676. $tpl['miapp']['kid_list'][3] => ['value' => $service_price],
  677. ]);
  678. }
  679. } else {
  680. return false;
  681. }
  682. }
  683. /**
  684. * @description: 提现失败
  685. * @param {*} $user_id
  686. * @param {*} $mobile
  687. * @param {*} $price 提现金额
  688. * @param {string} $desc 失败原因
  689. * @param {*} $type
  690. * @return {*}
  691. */
  692. public static function CashFail($user_id, $mobile, $price, string $desc,$type, $store_id = null)
  693. {
  694. $store_id = $store_id ?? get_store_id();
  695. $store = Store::findOne($store_id);
  696. if ($store) {
  697. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  698. $store_id = 0;
  699. }
  700. }
  701. if ($store_id <= 0) {
  702. $setting = Notice::findOne(['store_id' => 0]);
  703. $store_id = 0;
  704. if (!$setting) {
  705. $setting = Notice::findOne(['store_id' => -1]);
  706. $store_id = -1;
  707. }
  708. } else {
  709. $setting = Notice::findOne(['store_id' => $store_id]);
  710. if (!$setting) {
  711. $setting = Notice::findOne(['store_id' => 0]);
  712. $store_id = 0;
  713. if (!$setting) {
  714. $setting = Notice::findOne(['store_id' => -1]);
  715. $store_id = -1;
  716. }
  717. }
  718. }
  719. if ($setting && $setting->cash_fail) {
  720. $tpl = Json::decode($setting->cash_fail);
  721. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  722. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $desc, $store_id);
  723. }
  724. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  725. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  726. $tpl['miapp']['kid_list'][0] => ['value' => $price],
  727. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($desc,0,18,'utf-8')],
  728. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($type,0,18,'utf-8')],
  729. ]);
  730. }
  731. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  732. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], '', [
  733. $tpl['miapp']['kid_list'][0] => ['value' => '提现失败'],
  734. $tpl['miapp']['kid_list'][1] => ['value' => $price],
  735. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($desc,0,18,'utf-8')],
  736. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($type,0,18,'utf-8')],
  737. ]);
  738. }
  739. } else {
  740. return false;
  741. }
  742. }
  743. /**
  744. * @description: 分销商审核
  745. * @param {*} $user_id
  746. * @param {*} $mobile
  747. * @param {*} $status 状态 通过 、 不通过
  748. * @param {*} $desc 备注信息
  749. * @return {*}
  750. */
  751. public static function ShareExamine($user_id, $mobile, string $status, string $desc = '')
  752. {
  753. $user = User::findOne($user_id);
  754. $store_id = $user->store_id;
  755. $store = Store::findOne($store_id);
  756. if ($store) {
  757. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  758. $store_id = 0;
  759. }
  760. }
  761. if ($store_id <= 0) {
  762. $setting = Notice::findOne(['store_id' => 0]);
  763. $store_id = 0;
  764. if (!$setting) {
  765. $setting = Notice::findOne(['store_id' => -1]);
  766. $store_id = -1;
  767. }
  768. } else {
  769. $setting = Notice::findOne(['store_id' => $store_id]);
  770. if (!$setting) {
  771. $setting = Notice::findOne(['store_id' => 0]);
  772. $store_id = 0;
  773. if (!$setting) {
  774. $setting = Notice::findOne(['store_id' => -1]);
  775. $store_id = -1;
  776. }
  777. }
  778. }
  779. $desc = $desc ?: $status;
  780. if ($setting && $setting->share_examine) {
  781. $tpl = Json::decode($setting->share_examine);
  782. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  783. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $status, $store_id);
  784. }
  785. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  786. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  787. $tpl['miapp']['kid_list'][0] => ['value' => $user->nickname],
  788. $tpl['miapp']['kid_list'][1] => ['value' => date('Y-m-d H:i:s', time())],
  789. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($status,0,18,'utf-8')],
  790. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($desc,0,18,'utf-8')],
  791. ]);
  792. }
  793. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  794. NoticeAction::sendMine2($user_id, $tpl['miapp']['template_id'], '', [
  795. $tpl['miapp']['kid_list'][0] => ['value' => $user->nickname],
  796. $tpl['miapp']['kid_list'][1] => ['value' => date('Y-m-d H:i:s', time())],
  797. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($status,0,18,'utf-8')],
  798. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($desc,0,18,'utf-8')],
  799. ]);
  800. }
  801. } else {
  802. return false;
  803. }
  804. }
  805. /**
  806. * @description: 拼团成功
  807. * @param {*} $user_id
  808. * @param {*} $mobile
  809. * @param {*} $order_no
  810. * @param {*} $goods_name
  811. * @return {*}
  812. */
  813. public static function PtSuccess($user_id, $mobile, $order_no, $goods_name)
  814. {
  815. $store_id = get_store_id();
  816. $store = Store::findOne($store_id);
  817. if ($store) {
  818. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  819. $store_id = 0;
  820. }
  821. }
  822. if ($store_id <= 0) {
  823. $setting = Notice::findOne(['store_id' => 0]);
  824. $store_id = 0;
  825. if (!$setting) {
  826. $setting = Notice::findOne(['store_id' => -1]);
  827. $store_id = -1;
  828. }
  829. } else {
  830. $setting = Notice::findOne(['store_id' => $store_id]);
  831. if (!$setting) {
  832. $setting = Notice::findOne(['store_id' => 0]);
  833. $store_id = 0;
  834. if (!$setting) {
  835. $setting = Notice::findOne(['store_id' => -1]);
  836. $store_id = -1;
  837. }
  838. }
  839. }
  840. if ($setting && $setting->pt_success) {
  841. $tpl = Json::decode($setting->pt_success);
  842. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  843. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  844. }
  845. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  846. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  847. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  848. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  849. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', time())],
  850. $tpl['miapp']['kid_list'][3] => ['value' => '恭喜拼团成功'],
  851. ]);
  852. }
  853. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  854. NoticeAction::sendMine2($user_id, $tpl['miapp']['template_id'], '', [
  855. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  856. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  857. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', time())],
  858. $tpl['miapp']['kid_list'][3] => ['value' => '恭喜拼团成功'],
  859. ]);
  860. }
  861. } else {
  862. return false;
  863. }
  864. }
  865. /**
  866. * @description: 拼团失败通知
  867. * @param int $user_id
  868. * @param string $order_no
  869. * @param string $goods_name
  870. * @return {*}
  871. */
  872. public static function PtFail($user_id, $mobile, $order_no, $pay_price, $goods_name, $desc = '超时未成团')
  873. {
  874. $store_id = get_store_id();
  875. $store = Store::findOne($store_id);
  876. if ($store) {
  877. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  878. $store_id = 0;
  879. }
  880. }
  881. if ($store_id <= 0) {
  882. $setting = Notice::findOne(['store_id' => 0]);
  883. $store_id = 0;
  884. if (!$setting) {
  885. $setting = Notice::findOne(['store_id' => -1]);
  886. $store_id = -1;
  887. }
  888. } else {
  889. $setting = Notice::findOne(['store_id' => $store_id]);
  890. if (!$setting) {
  891. $setting = Notice::findOne(['store_id' => 0]);
  892. $store_id = 0;
  893. if (!$setting) {
  894. $setting = Notice::findOne(['store_id' => -1]);
  895. $store_id = -1;
  896. }
  897. }
  898. }
  899. if ($setting && $setting->pt_fail) {
  900. $tpl = Json::decode($setting->pt_fail);
  901. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  902. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  903. }
  904. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  905. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  906. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  907. $tpl['miapp']['kid_list'][1] => ['value' => $pay_price],
  908. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  909. $tpl['miapp']['kid_list'][3] => ['value' => $desc],
  910. ]);
  911. }
  912. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  913. NoticeAction::sendMine2($user_id, $tpl['miapp']['template_id'], '', [
  914. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  915. $tpl['miapp']['kid_list'][1] => ['value' => $pay_price],
  916. $tpl['miapp']['kid_list'][2] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  917. $tpl['miapp']['kid_list'][3] => ['value' => $desc],
  918. ]);
  919. }
  920. } else {
  921. return false;
  922. }
  923. }
  924. /**
  925. * @description: 验证码
  926. * @param string $mobile
  927. * @param int $code
  928. * @return array
  929. */
  930. public static function VerifyCode($mobile, $code, $is_platform = false)
  931. {
  932. if ($is_platform) {
  933. $store_id = -1;
  934. } else {
  935. $store_id = get_store_id();
  936. }
  937. $store_id = -1;
  938. $self_mini = 1;
  939. if ($store_id > 0) {
  940. $self_mini = Option::get('self_mini', $store_id, 'store', 0)['value'];
  941. }
  942. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  943. $setting = Notice::findOne(['store_id' => 0]);
  944. if (!$setting) {
  945. $setting = Notice::findOne(['store_id' => -1]);
  946. }
  947. } else {
  948. $store = Store::findOne($store_id);
  949. if ($store->business_model != 1) {//商盟非独立运营店铺也用联盟端配置
  950. $store_id = 0;
  951. }
  952. if ($store_id <= 0) {
  953. $setting = Notice::findOne(['store_id' => 0]);
  954. $store_id = 0;
  955. if (!$setting) {
  956. $setting = Notice::findOne(['store_id' => -1]);
  957. $store_id = -1;
  958. }
  959. } else {
  960. $setting = Notice::findOne(['store_id' => $store_id]);
  961. }
  962. }
  963. if ($setting && $setting->register) {
  964. $tpl = Json::decode($setting->register);
  965. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  966. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $code, $store_id);
  967. if ($res['code'] == 0) {
  968. return ['code' => 0, 'msg' => true];
  969. } else {
  970. return $res;
  971. }
  972. }
  973. } else {
  974. return [
  975. 'code' => 1,
  976. 'msg' => '请检查短信验证码相关配置'
  977. ];
  978. }
  979. }
  980. /**
  981. * @description: 用户下单通知
  982. * @param int $md_id
  983. * @return {*}
  984. */
  985. public static function PlaceOrder($order_no, $md_id = 0, $store_id = 0, $order = '')
  986. {
  987. $store = Store::findOne($store_id);
  988. if ($store) {
  989. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  990. $store_id = 0;
  991. }
  992. }
  993. if ($store_id <= 0) {
  994. $setting = Notice::findOne(['store_id' => 0]);
  995. $store_id = 0;
  996. if (!$setting) {
  997. $setting = Notice::findOne(['store_id' => -1]);
  998. $store_id = -1;
  999. }
  1000. } else {
  1001. $setting = Notice::findOne(['store_id' => $store_id]);
  1002. if (!$setting) {
  1003. $setting = Notice::findOne(['store_id' => 0]);
  1004. $store_id = 0;
  1005. if (!$setting) {
  1006. $setting = Notice::findOne(['store_id' => -1]);
  1007. $store_id = -1;
  1008. }
  1009. }
  1010. }
  1011. if ($setting && $setting->place_order) {
  1012. $tpl = Json::decode($setting->place_order);
  1013. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1014. try {
  1015. if ($md_id == 0) {
  1016. $mobile = explode(',', $tpl['sms']['receive_mobile']);
  1017. } else {
  1018. $md = Md::findOne($md_id);
  1019. $mobile = [
  1020. $md->mobile
  1021. ];
  1022. }
  1023. foreach($mobile as $val) {
  1024. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  1025. }
  1026. } catch (\Throwable $e) {}
  1027. }
  1028. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1029. try {
  1030. NoticeAction::sendMine($tpl['miapp']['receive_userid'], $tpl['miapp']['template_id'], '', [
  1031. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  1032. $tpl['miapp']['kid_list'][1] => ['value' => date('Y-m-d H:i:s')],
  1033. ]);
  1034. } catch (\Throwable $e) {}
  1035. }
  1036. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1037. try {
  1038. $user_name = '';
  1039. $user = User::findOne($order['user_id']);
  1040. if($user){
  1041. $saas = \app\models\SaasUser::findOne(['mobile' => $user->binding]);
  1042. $saas && $user_name = $saas->name;
  1043. }
  1044. $order_ext = \app\models\WorkerOrderExt::findOne(['order_id' => $order['id']]);
  1045. if($order_ext && $order_ext['worker_id']){
  1046. $worker = Worker::findOne($order_ext['worker_id']);
  1047. NoticeAction::sendMine2($worker['user_id'], $tpl['wxaapi']['template_id'], 'service-home/index/index', [
  1048. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1049. $tpl['wxaapi']['kid_list'][1] => ['value' => $order['pay_price']],
  1050. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  1051. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s')],
  1052. ]);
  1053. }
  1054. NoticeAction::sendMine2($tpl['wxaapi']['receive_userid'], $tpl['wxaapi']['template_id'], '', [
  1055. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1056. $tpl['wxaapi']['kid_list'][1] => ['value' => $order['pay_price']],
  1057. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  1058. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s')],
  1059. ]);
  1060. foreach($tpl['wxaapi']['receive_openids'] as $openid){
  1061. NoticeAction::sendMine2($openid, $tpl['wxaapi']['template_id'], '', [
  1062. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1063. $tpl['wxaapi']['kid_list'][1] => ['value' => $order['pay_price']],
  1064. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  1065. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s')],
  1066. ]);
  1067. }
  1068. } catch (\Throwable $e) {}
  1069. }
  1070. // 客服消息通知
  1071. if ($tpl && $tpl['kefu'] && $tpl['kefu']['is_open']) {
  1072. try {
  1073. $store = Store::findOne($store_id);
  1074. if ($store && $store->kefu_id) {
  1075. $user_name = '';
  1076. $user = User::findOne($order['user_id']);
  1077. if($user){
  1078. $saas = \app\models\SaasUser::findOne(['mobile' => $user->binding]);
  1079. $saas && $user_name = $saas->name;
  1080. }
  1081. \Yii::$app->sendKefuMsg($store->kefu_id, ['title' => '您有新的订单消息, 请及时处理!', 'list' => [
  1082. [
  1083. 'name' => '订单号',
  1084. 'value' => $order_no,
  1085. ],
  1086. [
  1087. 'name' => '订单金额',
  1088. 'value' => '¥' . $order['pay_price'],
  1089. ],
  1090. [
  1091. 'name' => '下单用户',
  1092. 'value' => $user_name,
  1093. ],
  1094. [
  1095. 'name' => '下单时间',
  1096. 'value' => date('Y-m-d H:i:s', $order['created_at']),
  1097. ]
  1098. ]]);
  1099. }
  1100. } catch (\Throwable $e) {}
  1101. }
  1102. }
  1103. }
  1104. /**
  1105. * @description: 入驻商订单通知
  1106. * @return {*}
  1107. */
  1108. public static function MchOrder($order_no, $store_id = 0, $order = '')
  1109. {
  1110. $store = Store::findOne($store_id);
  1111. if ($store) {
  1112. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1113. $store_id = 0;
  1114. }
  1115. }
  1116. if ($store_id <= 0) {
  1117. $setting = Notice::findOne(['store_id' => 0]);
  1118. $store_id = 0;
  1119. if (!$setting) {
  1120. $setting = Notice::findOne(['store_id' => -1]);
  1121. $store_id = -1;
  1122. }
  1123. } else {
  1124. $setting = Notice::findOne(['store_id' => $store_id]);
  1125. if (!$setting) {
  1126. $setting = Notice::findOne(['store_id' => 0]);
  1127. $store_id = 0;
  1128. if (!$setting) {
  1129. $setting = Notice::findOne(['store_id' => -1]);
  1130. $store_id = -1;
  1131. }
  1132. }
  1133. }
  1134. $mch_id = $order['mch_id'] ?? 0;
  1135. if(!$mch_id){
  1136. return;
  1137. }
  1138. $mchConf = (new \app\modules\admin\models\MchForm())->mchSetting();
  1139. $mch_order_notice = $mchConf['mch_order_notice'];
  1140. $mch = Mch::findOne($mch_id);
  1141. if ($setting && $setting->place_order) {
  1142. $tpl = Json::decode($setting->place_order);
  1143. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1144. try {
  1145. if($mch_id && $mch_order_notice){
  1146. $mobile = [
  1147. $mch->tel
  1148. ];
  1149. foreach($mobile as $val) {
  1150. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  1151. }
  1152. }
  1153. } catch (\Throwable $e) {}
  1154. }
  1155. }
  1156. }
  1157. /**
  1158. * @description: 订单退款通知
  1159. * @param int $mch_id
  1160. * @return {*}
  1161. */
  1162. public static function MchCancel($order_no, $mch_id = 0)
  1163. {
  1164. $store_id = get_store_id();
  1165. $store = Store::findOne($store_id);
  1166. if ($store) {
  1167. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1168. $store_id = 0;
  1169. }
  1170. }
  1171. if ($store_id <= 0) {
  1172. $setting = Notice::findOne(['store_id' => 0]);
  1173. $store_id = 0;
  1174. if (!$setting) {
  1175. $setting = Notice::findOne(['store_id' => -1]);
  1176. $store_id = -1;
  1177. }
  1178. } else {
  1179. $setting = Notice::findOne(['store_id' => $store_id]);
  1180. if (!$setting) {
  1181. $setting = Notice::findOne(['store_id' => 0]);
  1182. $store_id = 0;
  1183. if (!$setting) {
  1184. $setting = Notice::findOne(['store_id' => -1]);
  1185. $store_id = -1;
  1186. }
  1187. }
  1188. }
  1189. if ($setting && $setting->mch_cancel) {
  1190. $tpl = Json::decode($setting->mch_cancel);
  1191. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1192. try {
  1193. if ($mch_id == 0) {
  1194. $mobile = explode(',', $tpl['sms']['receive_mobile']);
  1195. } else {
  1196. $mch = Mch::findOne($mch_id);
  1197. $mobile = [
  1198. $mch->tel
  1199. ];
  1200. }
  1201. foreach($mobile as $val) {
  1202. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], '', $store_id);
  1203. }
  1204. } catch (\Throwable $e) {}
  1205. }
  1206. if ($tpl && $tpl['kefu'] && $tpl['kefu']['is_open']) {
  1207. try {
  1208. $order = Order::findOne(['order_no' => $order_no]);
  1209. if ($order) {
  1210. $store = Store::findOne($order->store_id);
  1211. if ($store && $store->kefu_id) {
  1212. \Yii::$app->sendKefuMsg($store->kefu_id, ['title' => '您有新的退款消息, 请及时处理!', 'list' => [
  1213. [
  1214. 'name' => '订单号',
  1215. 'value' => $order_no,
  1216. ]
  1217. ]]);
  1218. }
  1219. }
  1220. } catch (\Throwable $e) {}
  1221. }
  1222. } else {
  1223. return false;
  1224. }
  1225. }
  1226. /**
  1227. * @description: 入驻商审核通知
  1228. * @param {*} $user_id
  1229. * @param {*} $status 状态 0 未通过 1 已通过
  1230. * @param {*} $desc 备注
  1231. * @return {*}
  1232. */
  1233. public static function MchExamine($user_id, $status, $desc)
  1234. {
  1235. $mch = Mch::findOne(['user_id' => $user_id]);
  1236. $mobile = $mch->tel;
  1237. $status = $status == 0 ? '未通过' : '已通过';
  1238. $store_id = $mch->store_id;
  1239. $store = Store::findOne($store_id);
  1240. if ($store) {
  1241. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1242. $store_id = 0;
  1243. }
  1244. }
  1245. if ($store_id <= 0) {
  1246. $setting = Notice::findOne(['store_id' => 0]);
  1247. $store_id = 0;
  1248. if (!$setting) {
  1249. $setting = Notice::findOne(['store_id' => -1]);
  1250. $store_id = -1;
  1251. }
  1252. } else {
  1253. $setting = Notice::findOne(['store_id' => $store_id]);
  1254. if (!$setting) {
  1255. $setting = Notice::findOne(['store_id' => 0]);
  1256. $store_id = 0;
  1257. if (!$setting) {
  1258. $setting = Notice::findOne(['store_id' => -1]);
  1259. $store_id = -1;
  1260. }
  1261. }
  1262. }
  1263. if ($setting && $setting->mch_examine) {
  1264. $tpl = Json::decode($setting->mch_examine);
  1265. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1266. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $desc, $store_id);
  1267. }
  1268. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1269. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  1270. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($mch->name,0,18,'utf-8')],
  1271. $tpl['miapp']['kid_list'][1] => ['value' => $status],
  1272. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', $mch->created_at)],
  1273. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($desc,0,18,'utf-8')],
  1274. ]);
  1275. }
  1276. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1277. NoticeAction::sendMine2($user_id, $tpl['miapp']['template_id'], '', [
  1278. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($mch->name,0,18,'utf-8')],
  1279. $tpl['miapp']['kid_list'][1] => ['value' => $status],
  1280. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', $mch->created_at)],
  1281. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($desc,0,18,'utf-8')],
  1282. ]);
  1283. }
  1284. } else {
  1285. return false;
  1286. }
  1287. }
  1288. /**
  1289. * @description: 订单提交通知
  1290. * @param {*} $user_id
  1291. * @param {*} $room
  1292. * @return {*}
  1293. */
  1294. public static function LiveBegin($user_id, $anchor, $room)
  1295. {
  1296. $page = 'tools/live/player/index?id=' . $room->id;
  1297. $self_mini = 1;
  1298. if ($room->store_id > 0) {
  1299. $self_mini = Option::get('self_mini', $room->store_id, 'store', 0)['value'];
  1300. }
  1301. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  1302. $setting = Notice::findOne(['store_id' => 0]);
  1303. } else {
  1304. $setting = Notice::findOne(['store_id' => $room->store_id]);
  1305. }
  1306. if ($setting && $setting->live_begin) {
  1307. $tpl = Json::decode($setting->live_begin);
  1308. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1309. // NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  1310. }
  1311. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1312. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], $page, [
  1313. $tpl['miapp']['kid_list'][0] => ['value' => $room->name],
  1314. $tpl['miapp']['kid_list'][1] => ['value' => $anchor->name],
  1315. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', $room->start_time)],
  1316. ]);
  1317. }
  1318. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1319. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], $page, [
  1320. $tpl['wxaapi']['kid_list'][0] => ['value' => $room->name],
  1321. $tpl['wxaapi']['kid_list'][1] => ['value' => $anchor->name],
  1322. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', $room->start_time)],
  1323. ]);
  1324. }
  1325. } else {
  1326. return false;
  1327. }
  1328. }
  1329. /**
  1330. * @description: 供货商/代理审核通过
  1331. * @param {*} $user_id
  1332. * @param {*} $status 状态 0 未通过 1 已通过
  1333. * @param {*} $desc 备注
  1334. * @return {*}
  1335. */
  1336. public static function AgentExamine($id, $type = 0)
  1337. {
  1338. $setting = Notice::findOne(['store_id' => 0]);
  1339. if ($type === 1) {
  1340. $supplier = Supplier::findOne(['id' => $id]);
  1341. $mobile = $supplier->phone;
  1342. $desc = '供货商';
  1343. $result = ((int)$supplier->status === 1) ? '通过' : '拒绝';
  1344. } elseif ($type === 2) {
  1345. $store_audit = StoreAudit::findOne($id);
  1346. $mobile = $store_audit->mobile;
  1347. $desc = '商城';
  1348. $result = ((int)$store_audit->status === 1) ? '通过' : '拒绝';
  1349. } elseif ($type === 3) {
  1350. $worker = Worker::findOne($id);
  1351. $mobile = $worker->tel;
  1352. $desc = '服务人员';
  1353. $result = ((int)$worker->status === 1) ? '通过' : '拒绝';
  1354. $self_mini = \app\models\Option::get('self_mini', get_store_id(), 'store', 0)['value'];
  1355. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  1356. $store_id = 0;
  1357. } else {
  1358. $store_id = get_store_id();
  1359. }
  1360. $setting_ = Notice::findOne(['store_id' => $store_id]);
  1361. if ($setting_ && $setting_->agent_examine) {
  1362. $tpl = Json::decode($setting_->agent_examine);
  1363. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open'] && $tpl['sms']['template_id'] && $tpl['sms']['template_var']) {
  1364. $setting = $setting_;
  1365. }
  1366. }
  1367. } else {
  1368. $agentApply = AgentApply::findOne(['saas_user_id' => $id, 'is_delete' => 0]);
  1369. $mobile = $agentApply->mobile;
  1370. $desc = '区域代理';
  1371. if ((int)$agentApply->agent_type === 1) {
  1372. $desc = "推广代理";
  1373. }
  1374. if ((int)$agentApply->agent_type === 2) {
  1375. $desc = "产品代理";
  1376. }
  1377. $result = ((int)$agentApply->status === 1) ? '通过' : '拒绝';
  1378. }
  1379. if ($setting && $setting->agent_examine) {
  1380. $tpl = Json::decode($setting->agent_examine);
  1381. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1382. $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'name';
  1383. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], [$tpl['sms']['template_var'], 'result'], [$desc, $result]);
  1384. if ($res['code'] == 0) {
  1385. return ['code' => 0, 'msg' => true];
  1386. } else {
  1387. return $res;
  1388. }
  1389. }
  1390. } else {
  1391. return false;
  1392. }
  1393. }
  1394. /**
  1395. * @description: 预约订单状态通知
  1396. * @param {*} $user_id
  1397. * @param {*} $status 状态 0 未通过 1 已通过
  1398. * @param {*} $desc 备注
  1399. * @return {*}
  1400. */
  1401. public static function bookExamine($id, $type = 0)
  1402. {
  1403. $store_id = get_store_id();
  1404. $store = Store::findOne($store_id);
  1405. if ($store) {
  1406. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1407. $store_id = 0;
  1408. }
  1409. }
  1410. if ($store_id <= 0) {
  1411. $setting = Notice::findOne(['store_id' => 0]);
  1412. $store_id = 0;
  1413. if (!$setting) {
  1414. $setting = Notice::findOne(['store_id' => -1]);
  1415. $store_id = -1;
  1416. }
  1417. } else {
  1418. $setting = Notice::findOne(['store_id' => $store_id]);
  1419. if (!$setting) {
  1420. $setting = Notice::findOne(['store_id' => 0]);
  1421. $store_id = 0;
  1422. if (!$setting) {
  1423. $setting = Notice::findOne(['store_id' => -1]);
  1424. $store_id = -1;
  1425. }
  1426. }
  1427. }
  1428. if ($type === 1) {
  1429. $examine = $setting->book_worker_examine;
  1430. } else {
  1431. $examine = $setting->book_success_examine;
  1432. }
  1433. $order = Order::findOne($id);
  1434. if (!$order) {
  1435. return false;
  1436. }
  1437. $mobile = $order->mobile;
  1438. if ($setting && $examine) {
  1439. $tpl = Json::decode($examine);
  1440. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1441. // $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'name';
  1442. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], '', '', $store_id);
  1443. if ($res['code'] == 0) {
  1444. return ['code' => 0, 'msg' => true];
  1445. } else {
  1446. return $res;
  1447. }
  1448. }
  1449. return false;
  1450. } else {
  1451. return false;
  1452. }
  1453. }
  1454. /**
  1455. * @description: 订单支付通知
  1456. * @param integer $user_id
  1457. * @param string $order_no
  1458. * @param integer $pay_time
  1459. * @param integer $pay_price
  1460. * @param string $goods_name
  1461. * @return {*}
  1462. */
  1463. public static function Adopt($user_id, $mobile, $order_no,$goods_name,$type,$day1,$day2, string $desc = '')
  1464. {
  1465. $setting = Notice::findOne(['store_id' => get_store_id()]);
  1466. $goods_name = $goods_name ?: '订单支付';
  1467. if ($type == 1){
  1468. $sms_type = 'adopt_mature';
  1469. $desc = "已成熟".$day1."天,".$day2."天后将默认选择农场收取";
  1470. }elseif ($type == 2){
  1471. $sms_type = 'adopt_storage';
  1472. $desc = "已入库".$day1."天,".$day2."天后将默认选择农场保管";
  1473. }elseif ($type == 3){
  1474. $sms_type = 'adopt_preserve';
  1475. $desc = "已保管".$day1."天,".$day2."天后将开始收取保管费用";
  1476. }
  1477. if ($setting && $setting->$sms_type) {
  1478. $tpl = Json::decode($setting->$sms_type);
  1479. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1480. NoticeAction::sendAdoptSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $goods_name,$day1,$day2);
  1481. }
  1482. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1483. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'livestockAdoption/my_order/my_order
  1484. ', [
  1485. // $tpl['miapp']['kid_list'][0] => ['value' => $goods_name],
  1486. // $tpl['miapp']['kid_list'][1] => ['value' => $day1],
  1487. // $tpl['miapp']['kid_list'][2] => ['value' => $day2],
  1488. // $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1489. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  1490. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1491. $tpl['miapp']['kid_list'][2] => ['value' => $desc],
  1492. $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1493. ]);
  1494. }
  1495. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1496. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'livestockAdoption/my_order/my_order
  1497. ', [
  1498. // $tpl['wxaapi']['kid_list'][0] => ['value' => $goods_name],
  1499. // $tpl['wxaapi']['kid_list'][1] => ['value' => $day1],
  1500. // $tpl['wxaapi']['kid_list'][2] => ['value' => $day2],
  1501. // $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1502. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1503. $tpl['wxaapi']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1504. $tpl['wxaapi']['kid_list'][2] => ['value' => $desc],
  1505. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1506. ]);
  1507. }
  1508. } else {
  1509. return false;
  1510. }
  1511. }
  1512. /**
  1513. * @description: 认养流程状态改变通知
  1514. * @param integer $user_id
  1515. * @param string $order_no
  1516. * @return {*}
  1517. */
  1518. public static function AdoptOrderStateChange($user_id, $mobile, $order_no, $goods_name, $type, string $desc = '')
  1519. {
  1520. $setting = Notice::findOne(['store_id' => get_store_id()]);
  1521. \Yii::error("认养流程状态改变通知");
  1522. if ($type == 1){
  1523. $sms_type = 'adopt_order_confirm_mature';
  1524. $desc = "您的认养已成熟,记得选择采摘方式哦";
  1525. }elseif ($type == 2){
  1526. $sms_type = 'adopt_order_self_pick';
  1527. $desc = "您已选择自采,等待后台确认自采";
  1528. }elseif ($type == 3){
  1529. $sms_type = 'adopt_order_other_pick';
  1530. $desc = "您已选择代采,感谢您的支持";
  1531. }elseif ($type == 4){
  1532. $sms_type = 'adopt_order_confirm_self_pick_book';
  1533. $desc = "后台已确认自采预约,祝您采摘愉快";
  1534. }elseif ($type == 5){
  1535. $sms_type = 'adopt_order_start_self_pick';
  1536. $desc = "您已选择开始采摘,感谢您的支持";
  1537. }elseif ($type == 6){
  1538. $sms_type = 'adopt_order_end_self_pick';
  1539. $desc = "您已选择采摘完成,感谢您的支持";
  1540. }elseif ($type == 7){
  1541. $sms_type = 'adopt_order_confirm_self_pick_finish';
  1542. $desc = "后台已确认您的采摘完成,感谢您的支持";
  1543. }elseif ($type == 8){
  1544. $sms_type = 'adopt_order_pick_take';
  1545. $desc = "您已选择带走,记得及时来提货哦";
  1546. }elseif ($type == 9){
  1547. $sms_type = 'adopt_order_storage';
  1548. $desc = "您已选择入库,感谢您的支持,感谢您的支持";
  1549. }elseif ($type == 10){
  1550. $sms_type = 'adopt_order_confirm_storage';
  1551. $desc = "订单已入库,记得选择是否保管或者领走哦";
  1552. }elseif ($type == 11){
  1553. $sms_type = 'adopt_order_preserve';
  1554. $desc = "您选择保管,感谢您的支持,感谢您的支持";
  1555. }elseif ($type == 12){
  1556. $sms_type = 'adopt_order_no_preserve';
  1557. $desc = "您已选择不保管,记得及时来提货哦";
  1558. }elseif ($type == 13){
  1559. $sms_type = 'adopt_order_finish';
  1560. $desc = "您的订单已全部提货,感谢您的支持";
  1561. }
  1562. if ($setting && $setting->$sms_type) {
  1563. \Yii::error("认养流程状态改变通知1");
  1564. $tpl = Json::decode($setting->$sms_type);
  1565. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1566. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no);
  1567. }
  1568. \Yii::error($tpl);
  1569. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1570. \Yii::error("小程序认养流程状态改变通知");
  1571. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'livestockAdoption/my_order/my_order
  1572. ', [
  1573. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($order_no,0,18,'utf-8') ],
  1574. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1575. $tpl['miapp']['kid_list'][2] => ['value' => $desc],
  1576. $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1577. ]);
  1578. }
  1579. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1580. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'livestockAdoption/my_order/my_order
  1581. ', [
  1582. $tpl['wxaapi']['kid_list'][0] => ['value' => mb_substr($order_no,0,18,'utf-8')],
  1583. $tpl['wxaapi']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1584. $tpl['wxaapi']['kid_list'][2] => ['value' => $desc],
  1585. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1586. ]);
  1587. }
  1588. } else {
  1589. return false;
  1590. }
  1591. }
  1592. /**
  1593. * @description: 商品降价通知
  1594. * @param integer $user_id
  1595. * @param array $goods
  1596. * @return {*}
  1597. */
  1598. public static function LoweringPrice($user_id, $goods)
  1599. {
  1600. $self_mini = 1;
  1601. if (get_store_id() > 0) {
  1602. $self_mini = Option::get('self_mini', get_store_id(), 'store', 0)['value'];
  1603. }
  1604. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  1605. $setting = Notice::findOne(['store_id' => 0]);
  1606. } else {
  1607. $setting = Notice::findOne(['store_id' => get_store_id()]);
  1608. }
  1609. if ($setting && $setting->lowering_price) {
  1610. $tpl = Json::decode($setting->lowering_price);
  1611. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1612. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'goods/goods/goods?id='.$goods['id'], [
  1613. $tpl['miapp']['kid_list'][0] => ['value' => $goods['name']],
  1614. $tpl['miapp']['kid_list'][1] => ['value' => $goods['diff_price']],
  1615. $tpl['miapp']['kid_list'][2] => ['value' => $goods['user_min_price']],
  1616. ]);
  1617. }
  1618. } else {
  1619. return false;
  1620. }
  1621. }
  1622. /**
  1623. * @description: 注册通知上级
  1624. * @param string $mobile
  1625. * @param int $user_name
  1626. * @return array
  1627. */
  1628. public static function registerTellParent($mobile, $user_name, $is_platform = false)
  1629. {
  1630. if ($is_platform) {
  1631. $store_id = -1;
  1632. } else {
  1633. $store_id = get_store_id();
  1634. }
  1635. $store = Store::findOne($store_id);
  1636. if ($store) {
  1637. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1638. $store_id = 0;
  1639. }
  1640. }
  1641. if ($store_id <= 0) {
  1642. $setting = Notice::findOne(['store_id' => 0]);
  1643. $store_id = 0;
  1644. if (!$setting) {
  1645. $setting = Notice::findOne(['store_id' => -1]);
  1646. $store_id = -1;
  1647. }
  1648. } else {
  1649. $setting = Notice::findOne(['store_id' => $store_id]);
  1650. if (!$setting) {
  1651. $setting = Notice::findOne(['store_id' => 0]);
  1652. $store_id = 0;
  1653. if (!$setting) {
  1654. $setting = Notice::findOne(['store_id' => -1]);
  1655. $store_id = -1;
  1656. }
  1657. }
  1658. }
  1659. if ($setting && $setting->register_tell_parent) {
  1660. $tpl = Json::decode($setting->register_tell_parent);
  1661. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1662. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $user_name, $store_id);
  1663. if ($res['code'] == 0) {
  1664. return ['code' => 0, 'msg' => true];
  1665. } else {
  1666. return $res;
  1667. }
  1668. }
  1669. } else {
  1670. return [
  1671. 'code' => 1,
  1672. 'msg' => '请检查短信验证码相关配置'
  1673. ];
  1674. }
  1675. }
  1676. /**
  1677. * @description: 用户批发审核通过/拒绝通知
  1678. * @return array|boolean
  1679. */
  1680. public static function userAuditStatusNotice($id, $store_id = 0)
  1681. {
  1682. $userAuditLog = UserAuditLog::findOne(['id' => $id, 'status' => [UserAuditLog::STATUS_AGREE, UserAuditLog::STATUS_PASS]]);
  1683. if (!$userAuditLog) {
  1684. return false;
  1685. }
  1686. // $user = User::findOne($userAuditLog->user_id);
  1687. // if (!$user) {
  1688. // return false;
  1689. // }
  1690. // $binding = $user->binding;
  1691. $binding = $userAuditLog->mobile ?: '';
  1692. if (empty($userAuditLog->mobile)) {
  1693. $user = User::findOne($userAuditLog->user_id);
  1694. if (!$user) {
  1695. return false;
  1696. }
  1697. $binding = $user->binding ?: '';
  1698. }
  1699. if (empty($binding)) {
  1700. return false;
  1701. }
  1702. $result = '';
  1703. if (intval($userAuditLog->status) === 1) {
  1704. $result = '通过';
  1705. } elseif (intval($userAuditLog->status) === 2) {
  1706. $result = '拒绝';
  1707. }
  1708. $store = Store::findOne($store_id);
  1709. if ($store) {
  1710. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1711. $store_id = 0;
  1712. }
  1713. }
  1714. if ($store_id <= 0) {
  1715. $setting = Notice::findOne(['store_id' => 0]);
  1716. $store_id = 0;
  1717. if (!$setting) {
  1718. $setting = Notice::findOne(['store_id' => -1]);
  1719. $store_id = -1;
  1720. }
  1721. } else {
  1722. $setting = Notice::findOne(['store_id' => $store_id]);
  1723. if (!$setting) {
  1724. $setting = Notice::findOne(['store_id' => 0]);
  1725. $store_id = 0;
  1726. if (!$setting) {
  1727. $setting = Notice::findOne(['store_id' => -1]);
  1728. $store_id = -1;
  1729. }
  1730. }
  1731. }
  1732. if ($setting && $setting->user_audit_status_notice) {
  1733. $tpl = Json::decode($setting->user_audit_status_notice);
  1734. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1735. $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'status';
  1736. $res = NoticeAction::sendSms($binding, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $result, $store_id);
  1737. if ($res['code'] == 0) {
  1738. return ['code' => 0, 'msg' => true];
  1739. } else {
  1740. return $res;
  1741. }
  1742. }
  1743. } else {
  1744. return false;
  1745. }
  1746. }
  1747. /**
  1748. * @description: 用户进入商城审核通知(商家)
  1749. * @return array|boolean
  1750. */
  1751. public static function userAuditNotice($id, $store_id = 0)
  1752. {
  1753. $userAuditLog = UserAuditLog::findOne(['id' => $id, 'status' => UserAuditLog::STATUS_NOT_AGREE]);
  1754. if (!$userAuditLog) {
  1755. return false;
  1756. }
  1757. $result = $userAuditLog->mobile ?: '';
  1758. if (empty($userAuditLog->mobile)) {
  1759. $user = User::findOne($userAuditLog->user_id);
  1760. if (!$user) {
  1761. return false;
  1762. }
  1763. $result = $user->binding ?: '';
  1764. }
  1765. $store = Store::findOne($store_id);
  1766. if ($store) {
  1767. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1768. $store_id = 0;
  1769. }
  1770. }
  1771. if ($store_id <= 0) {
  1772. $setting = Notice::findOne(['store_id' => 0]);
  1773. $store_id = 0;
  1774. if (!$setting) {
  1775. $setting = Notice::findOne(['store_id' => -1]);
  1776. $store_id = -1;
  1777. }
  1778. } else {
  1779. $setting = Notice::findOne(['store_id' => $store_id]);
  1780. if (!$setting) {
  1781. $setting = Notice::findOne(['store_id' => 0]);
  1782. $store_id = 0;
  1783. if (!$setting) {
  1784. $setting = Notice::findOne(['store_id' => -1]);
  1785. $store_id = -1;
  1786. }
  1787. }
  1788. }
  1789. if ($setting && $setting->user_audit_notice) {
  1790. $tpl = Json::decode($setting->user_audit_notice);
  1791. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1792. $mobile = explode(',', $tpl['sms']['receive_mobile']);;
  1793. $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'name';
  1794. foreach($mobile as $val) {
  1795. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $result, $store_id);
  1796. }
  1797. }
  1798. } else {
  1799. return false;
  1800. }
  1801. }
  1802. /**
  1803. * 服务订单派单通知
  1804. */
  1805. public static function workerOrderReceivedNotice($order_id)
  1806. {
  1807. $workerOrderExt = WorkerOrderExt::findOne($order_id);
  1808. if ($workerOrderExt) {
  1809. $store_id = $workerOrderExt->store_id;
  1810. $store = Store::findOne($store_id);
  1811. if ($store) {
  1812. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1813. $store_id = 0;
  1814. }
  1815. }
  1816. if ($store_id <= 0) {
  1817. $setting = Notice::findOne(['store_id' => 0]);
  1818. $store_id = 0;
  1819. if (!$setting) {
  1820. $setting = Notice::findOne(['store_id' => -1]);
  1821. $store_id = -1;
  1822. }
  1823. } else {
  1824. $setting = Notice::findOne(['store_id' => $store_id]);
  1825. if (!$setting) {
  1826. $setting = Notice::findOne(['store_id' => 0]);
  1827. $store_id = 0;
  1828. if (!$setting) {
  1829. $setting = Notice::findOne(['store_id' => -1]);
  1830. $store_id = -1;
  1831. }
  1832. }
  1833. }
  1834. $tpl = null;
  1835. //
  1836. if ($setting) {
  1837. if (in_array($workerOrderExt->status_ext, [
  1838. WorkerOrderExt::STATUS_EXT_WAIT_BIND_OK,//待接单(有客户下单指定服务人员或者后台分配服务人员)
  1839. WorkerOrderExt::STATUS_EXT_CANCEL,//已取消
  1840. WorkerOrderExt::STATUS_EXT_FINISH//已完成
  1841. ])) {
  1842. $worker = Worker::findOne($workerOrderExt->worker_id);
  1843. if ($setting->user_audit_notice) {
  1844. $tpl = Json::decode($setting->worker_order);
  1845. }
  1846. $mobile = $worker->tel;
  1847. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1848. $template_var = $tpl['sms']['template_var'] ?: 'status,time';
  1849. $template_var = explode(',', $template_var);
  1850. $result = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $template_var, [
  1851. WorkerOrderExt::$getStatusExtName[$workerOrderExt->status_ext],
  1852. date('Y年m月d日 H:i:s')
  1853. ], $store_id);
  1854. return true;
  1855. }
  1856. } else {
  1857. $order = Order::findOne($workerOrderExt->order_id);
  1858. if ($setting->user_audit_notice) {
  1859. $tpl = Json::decode($setting->worker_order_received);
  1860. }
  1861. $mobile = $order->mobile;
  1862. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1863. $result = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], '', '', $store_id);
  1864. return true;
  1865. }
  1866. }
  1867. }
  1868. }
  1869. return false;
  1870. }
  1871. /* begin 2025/07/11 11:08:47 WPing丶 */
  1872. /**
  1873. * @description: 用户下单通知服务人员抢单
  1874. * @param int $md_id
  1875. * @return {*}
  1876. */
  1877. public static function ServiceNewOrder($order_no, $store_id = 0, $order = null)
  1878. {
  1879. $store = Store::findOne($store_id);
  1880. if ($store) {
  1881. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1882. $store_id = 0;
  1883. }
  1884. }
  1885. if ($store_id <= 0) {
  1886. $setting = Notice::findOne(['store_id' => 0]);
  1887. $store_id = 0;
  1888. if (!$setting) {
  1889. $setting = Notice::findOne(['store_id' => -1]);
  1890. $store_id = -1;
  1891. }
  1892. } else {
  1893. $setting = Notice::findOne(['store_id' => $store_id]);
  1894. if (!$setting) {
  1895. $setting = Notice::findOne(['store_id' => 0]);
  1896. $store_id = 0;
  1897. if (!$setting) {
  1898. $setting = Notice::findOne(['store_id' => -1]);
  1899. $store_id = -1;
  1900. }
  1901. }
  1902. }
  1903. if ($setting && $setting->service_new_order) {
  1904. $tpl = Json::decode($setting->service_new_order);
  1905. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1906. try {
  1907. // 1. 获取订单明细中的商品ID
  1908. $goods_detail = OrderDetail::find()->where(['order_id' => $order->id])->one();
  1909. $goods_id = $goods_detail->goods_id;
  1910. $worker_ids = WorkerGoods::find()->alias('wg')
  1911. ->leftJoin(['w' => Worker::tableName()], 'w.id = wg.worker_id')
  1912. ->where(['wg.goods_id' => $goods_id, 'wg.status' => 1])
  1913. ->select('w.user_id')
  1914. ->column();
  1915. $worker_order = WorkerOrderExt::findOne(['order_id' => $order->id]);
  1916. //获取客户的经纬度
  1917. $lat = $worker_order->lat;
  1918. $lng = $worker_order->lng;
  1919. //获取接单范围
  1920. $setting = WorkerSetting::getByStoreId($store_id);
  1921. $orderSpace = $setting['order_space'];
  1922. $worker = Worker::find()->alias('w')
  1923. ->select([
  1924. 'w.*',
  1925. new \yii\db\Expression("
  1926. acos(
  1927. cos({$lat} * pi() / 180) * cos(w.lat * pi() / 180) *
  1928. cos({$lng} * pi() / 180 - w.lng * pi() / 180) +
  1929. sin({$lat} * pi() / 180) * sin(w.lat * pi() / 180)
  1930. ) * 6370996.81 AS distance
  1931. ")
  1932. ])
  1933. ->where(['store_id' => $store_id])
  1934. ->andWhere(['user_id' => $worker_ids])
  1935. ->andWhere(['and', ['IS NOT', 'w.lng', null],['IS NOT', 'w.lat', null]])
  1936. ->having(['<=', 'distance', $orderSpace])
  1937. ->orderBy('distance ASC')
  1938. ->asArray()
  1939. ->all();
  1940. foreach($worker as $item){
  1941. NoticeAction::sendMine2($item['user_id'], $tpl['wxaapi']['template_id'], 'service-home/rob-order/index', [
  1942. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1943. $tpl['wxaapi']['kid_list'][1] => ['value' => date('Y-m-d H:i:s')],
  1944. $tpl['wxaapi']['kid_list'][2] => ['value' => $order['pay_price']],
  1945. ]);
  1946. }
  1947. } catch (\Throwable $e) {
  1948. debug_log($e, 'notice.log');
  1949. }
  1950. }
  1951. }
  1952. }
  1953. /**
  1954. * @description: 服务人员接单通知
  1955. * @param int $worker_id
  1956. * @param int $order_id
  1957. * @return void
  1958. */
  1959. public static function ServiceReceiveOrder($order_id)
  1960. {
  1961. $worker_id = WorkerOrderExt::findOne($order_id)->worker_id;
  1962. $worker = Worker::findOne($worker_id);
  1963. $order = Order::findOne(WorkerOrderExt::findOne($order_id)->order_id);
  1964. if (!$worker || !$order) {
  1965. return false;
  1966. }
  1967. $store_id = $order->store_id;
  1968. $store = Store::findOne($store_id);
  1969. if ($store) {
  1970. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1971. $store_id = 0;
  1972. }
  1973. }
  1974. if ($store_id <= 0) {
  1975. $setting = Notice::findOne(['store_id' => 0]);
  1976. $store_id = 0;
  1977. if (!$setting) {
  1978. $setting = Notice::findOne(['store_id' => -1]);
  1979. $store_id = -1;
  1980. }
  1981. } else {
  1982. $setting = Notice::findOne(['store_id' => $store_id]);
  1983. if (!$setting) {
  1984. $setting = Notice::findOne(['store_id' => 0]);
  1985. $store_id = 0;
  1986. if (!$setting) {
  1987. $setting = Notice::findOne(['store_id' => -1]);
  1988. $store_id = -1;
  1989. }
  1990. }
  1991. }
  1992. if ($setting && $setting->service_receive_order) {
  1993. $tpl = \yii\helpers\Json::decode($setting->service_receive_order);
  1994. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1995. $user_name = '';
  1996. $user = User::findOne($order->user_id);
  1997. if($user){
  1998. $saas = \app\models\SaasUser::findOne(['mobile' => $user->binding]);
  1999. $saas && $user_name = $saas->name;
  2000. }
  2001. NoticeAction::sendMine2($worker->user_id, $tpl['wxaapi']['template_id'], 'service-home/index/index', [
  2002. $tpl['wxaapi']['kid_list'][0] => ['value' => $order->order_no],
  2003. $tpl['wxaapi']['kid_list'][1] => ['value' => $order->pay_price],
  2004. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  2005. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', $order->pay_time)],
  2006. ]);
  2007. }
  2008. } else {
  2009. return false;
  2010. }
  2011. }
  2012. /* end */
  2013. }