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 = Store::findOne($store_id);
  938. if ($store) {
  939. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  940. $store_id = 0;
  941. }
  942. }
  943. if ($store_id <= 0) {
  944. $setting = Notice::findOne(['store_id' => 0]);
  945. $store_id = 0;
  946. if (!$setting) {
  947. $setting = Notice::findOne(['store_id' => -1]);
  948. $store_id = -1;
  949. }
  950. } else {
  951. $setting = Notice::findOne(['store_id' => $store_id]);
  952. if (!$setting) {
  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. }
  960. }
  961. if ($setting && $setting->register) {
  962. $tpl = Json::decode($setting->register);
  963. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  964. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $code, $store_id);
  965. if ($res['code'] == 0) {
  966. return ['code' => 0, 'msg' => true];
  967. } else {
  968. return $res;
  969. }
  970. }
  971. } else {
  972. return [
  973. 'code' => 1,
  974. 'msg' => '请检查短信验证码相关配置'
  975. ];
  976. }
  977. }
  978. /**
  979. * @description: 用户下单通知
  980. * @param int $md_id
  981. * @return {*}
  982. */
  983. public static function PlaceOrder($order_no, $md_id = 0, $store_id = 0, $order = '')
  984. {
  985. $store = Store::findOne($store_id);
  986. if ($store) {
  987. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  988. $store_id = 0;
  989. }
  990. }
  991. if ($store_id <= 0) {
  992. $setting = Notice::findOne(['store_id' => 0]);
  993. $store_id = 0;
  994. if (!$setting) {
  995. $setting = Notice::findOne(['store_id' => -1]);
  996. $store_id = -1;
  997. }
  998. } else {
  999. $setting = Notice::findOne(['store_id' => $store_id]);
  1000. if (!$setting) {
  1001. $setting = Notice::findOne(['store_id' => 0]);
  1002. $store_id = 0;
  1003. if (!$setting) {
  1004. $setting = Notice::findOne(['store_id' => -1]);
  1005. $store_id = -1;
  1006. }
  1007. }
  1008. }
  1009. if ($setting && $setting->place_order) {
  1010. $tpl = Json::decode($setting->place_order);
  1011. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1012. try {
  1013. if ($md_id == 0) {
  1014. $mobile = explode(',', $tpl['sms']['receive_mobile']);
  1015. } else {
  1016. $md = Md::findOne($md_id);
  1017. $mobile = [
  1018. $md->mobile
  1019. ];
  1020. }
  1021. foreach($mobile as $val) {
  1022. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  1023. }
  1024. } catch (\Throwable $e) {}
  1025. }
  1026. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1027. try {
  1028. NoticeAction::sendMine($tpl['miapp']['receive_userid'], $tpl['miapp']['template_id'], '', [
  1029. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  1030. $tpl['miapp']['kid_list'][1] => ['value' => date('Y-m-d H:i:s')],
  1031. ]);
  1032. } catch (\Throwable $e) {}
  1033. }
  1034. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1035. try {
  1036. $user_name = '';
  1037. $user = User::findOne($order['user_id']);
  1038. if($user){
  1039. $saas = \app\models\SaasUser::findOne(['mobile' => $user->binding]);
  1040. $saas && $user_name = $saas->name;
  1041. }
  1042. $order_ext = \app\models\WorkerOrderExt::findOne(['order_id' => $order['id']]);
  1043. if($order_ext && $order_ext['worker_id']){
  1044. $worker = Worker::findOne($order_ext['worker_id']);
  1045. NoticeAction::sendMine2($worker['user_id'], $tpl['wxaapi']['template_id'], 'service-home/index/index', [
  1046. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1047. $tpl['wxaapi']['kid_list'][1] => ['value' => $order['pay_price']],
  1048. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  1049. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s')],
  1050. ]);
  1051. }
  1052. NoticeAction::sendMine2($tpl['wxaapi']['receive_userid'], $tpl['wxaapi']['template_id'], '', [
  1053. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1054. $tpl['wxaapi']['kid_list'][1] => ['value' => $order['pay_price']],
  1055. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  1056. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s')],
  1057. ]);
  1058. foreach($tpl['wxaapi']['receive_openids'] as $openid){
  1059. NoticeAction::sendMine2($openid, $tpl['wxaapi']['template_id'], '', [
  1060. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1061. $tpl['wxaapi']['kid_list'][1] => ['value' => $order['pay_price']],
  1062. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  1063. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s')],
  1064. ]);
  1065. }
  1066. } catch (\Throwable $e) {}
  1067. }
  1068. // 客服消息通知
  1069. if ($tpl && $tpl['kefu'] && $tpl['kefu']['is_open']) {
  1070. try {
  1071. $store = Store::findOne($store_id);
  1072. if ($store && $store->kefu_id) {
  1073. $user_name = '';
  1074. $user = User::findOne($order['user_id']);
  1075. if($user){
  1076. $saas = \app\models\SaasUser::findOne(['mobile' => $user->binding]);
  1077. $saas && $user_name = $saas->name;
  1078. }
  1079. \Yii::$app->sendKefuMsg($store->kefu_id, ['title' => '您有新的订单消息, 请及时处理!', 'list' => [
  1080. [
  1081. 'name' => '订单号',
  1082. 'value' => $order_no,
  1083. ],
  1084. [
  1085. 'name' => '订单金额',
  1086. 'value' => '¥' . $order['pay_price'],
  1087. ],
  1088. [
  1089. 'name' => '下单用户',
  1090. 'value' => $user_name,
  1091. ],
  1092. [
  1093. 'name' => '下单时间',
  1094. 'value' => date('Y-m-d H:i:s', $order['created_at']),
  1095. ]
  1096. ]]);
  1097. }
  1098. } catch (\Throwable $e) {}
  1099. }
  1100. }
  1101. }
  1102. /**
  1103. * @description: 入驻商订单通知
  1104. * @return {*}
  1105. */
  1106. public static function MchOrder($order_no, $store_id = 0, $order = '')
  1107. {
  1108. $store = Store::findOne($store_id);
  1109. if ($store) {
  1110. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1111. $store_id = 0;
  1112. }
  1113. }
  1114. if ($store_id <= 0) {
  1115. $setting = Notice::findOne(['store_id' => 0]);
  1116. $store_id = 0;
  1117. if (!$setting) {
  1118. $setting = Notice::findOne(['store_id' => -1]);
  1119. $store_id = -1;
  1120. }
  1121. } else {
  1122. $setting = Notice::findOne(['store_id' => $store_id]);
  1123. if (!$setting) {
  1124. $setting = Notice::findOne(['store_id' => 0]);
  1125. $store_id = 0;
  1126. if (!$setting) {
  1127. $setting = Notice::findOne(['store_id' => -1]);
  1128. $store_id = -1;
  1129. }
  1130. }
  1131. }
  1132. $mch_id = $order['mch_id'] ?? 0;
  1133. if(!$mch_id){
  1134. return;
  1135. }
  1136. $mchConf = (new \app\modules\admin\models\MchForm())->mchSetting();
  1137. $mch_order_notice = $mchConf['mch_order_notice'];
  1138. $mch = Mch::findOne($mch_id);
  1139. if ($setting && $setting->place_order) {
  1140. $tpl = Json::decode($setting->place_order);
  1141. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1142. try {
  1143. if($mch_id && $mch_order_notice){
  1144. $mobile = [
  1145. $mch->tel
  1146. ];
  1147. foreach($mobile as $val) {
  1148. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  1149. }
  1150. }
  1151. } catch (\Throwable $e) {}
  1152. }
  1153. }
  1154. }
  1155. /**
  1156. * @description: 订单退款通知
  1157. * @param int $mch_id
  1158. * @return {*}
  1159. */
  1160. public static function MchCancel($order_no, $mch_id = 0)
  1161. {
  1162. $store_id = get_store_id();
  1163. $store = Store::findOne($store_id);
  1164. if ($store) {
  1165. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1166. $store_id = 0;
  1167. }
  1168. }
  1169. if ($store_id <= 0) {
  1170. $setting = Notice::findOne(['store_id' => 0]);
  1171. $store_id = 0;
  1172. if (!$setting) {
  1173. $setting = Notice::findOne(['store_id' => -1]);
  1174. $store_id = -1;
  1175. }
  1176. } else {
  1177. $setting = Notice::findOne(['store_id' => $store_id]);
  1178. if (!$setting) {
  1179. $setting = Notice::findOne(['store_id' => 0]);
  1180. $store_id = 0;
  1181. if (!$setting) {
  1182. $setting = Notice::findOne(['store_id' => -1]);
  1183. $store_id = -1;
  1184. }
  1185. }
  1186. }
  1187. if ($setting && $setting->mch_cancel) {
  1188. $tpl = Json::decode($setting->mch_cancel);
  1189. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1190. try {
  1191. if ($mch_id == 0) {
  1192. $mobile = explode(',', $tpl['sms']['receive_mobile']);
  1193. } else {
  1194. $mch = Mch::findOne($mch_id);
  1195. $mobile = [
  1196. $mch->tel
  1197. ];
  1198. }
  1199. foreach($mobile as $val) {
  1200. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], '', $store_id);
  1201. }
  1202. } catch (\Throwable $e) {}
  1203. }
  1204. if ($tpl && $tpl['kefu'] && $tpl['kefu']['is_open']) {
  1205. try {
  1206. $order = Order::findOne(['order_no' => $order_no]);
  1207. if ($order) {
  1208. $store = Store::findOne($order->store_id);
  1209. if ($store && $store->kefu_id) {
  1210. \Yii::$app->sendKefuMsg($store->kefu_id, ['title' => '您有新的退款消息, 请及时处理!', 'list' => [
  1211. [
  1212. 'name' => '订单号',
  1213. 'value' => $order_no,
  1214. ]
  1215. ]]);
  1216. }
  1217. }
  1218. } catch (\Throwable $e) {}
  1219. }
  1220. } else {
  1221. return false;
  1222. }
  1223. }
  1224. /**
  1225. * @description: 入驻商审核通知
  1226. * @param {*} $user_id
  1227. * @param {*} $status 状态 0 未通过 1 已通过
  1228. * @param {*} $desc 备注
  1229. * @return {*}
  1230. */
  1231. public static function MchExamine($user_id, $status, $desc)
  1232. {
  1233. $mch = Mch::findOne(['user_id' => $user_id]);
  1234. $mobile = $mch->tel;
  1235. $status = $status == 0 ? '未通过' : '已通过';
  1236. $store_id = $mch->store_id;
  1237. $store = Store::findOne($store_id);
  1238. if ($store) {
  1239. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1240. $store_id = 0;
  1241. }
  1242. }
  1243. if ($store_id <= 0) {
  1244. $setting = Notice::findOne(['store_id' => 0]);
  1245. $store_id = 0;
  1246. if (!$setting) {
  1247. $setting = Notice::findOne(['store_id' => -1]);
  1248. $store_id = -1;
  1249. }
  1250. } else {
  1251. $setting = Notice::findOne(['store_id' => $store_id]);
  1252. if (!$setting) {
  1253. $setting = Notice::findOne(['store_id' => 0]);
  1254. $store_id = 0;
  1255. if (!$setting) {
  1256. $setting = Notice::findOne(['store_id' => -1]);
  1257. $store_id = -1;
  1258. }
  1259. }
  1260. }
  1261. if ($setting && $setting->mch_examine) {
  1262. $tpl = Json::decode($setting->mch_examine);
  1263. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1264. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $desc, $store_id);
  1265. }
  1266. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1267. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], '', [
  1268. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($mch->name,0,18,'utf-8')],
  1269. $tpl['miapp']['kid_list'][1] => ['value' => $status],
  1270. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', $mch->created_at)],
  1271. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($desc,0,18,'utf-8')],
  1272. ]);
  1273. }
  1274. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1275. NoticeAction::sendMine2($user_id, $tpl['miapp']['template_id'], '', [
  1276. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($mch->name,0,18,'utf-8')],
  1277. $tpl['miapp']['kid_list'][1] => ['value' => $status],
  1278. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', $mch->created_at)],
  1279. $tpl['miapp']['kid_list'][3] => ['value' => mb_substr($desc,0,18,'utf-8')],
  1280. ]);
  1281. }
  1282. } else {
  1283. return false;
  1284. }
  1285. }
  1286. /**
  1287. * @description: 订单提交通知
  1288. * @param {*} $user_id
  1289. * @param {*} $room
  1290. * @return {*}
  1291. */
  1292. public static function LiveBegin($user_id, $anchor, $room)
  1293. {
  1294. $page = 'tools/live/player/index?id=' . $room->id;
  1295. $self_mini = 1;
  1296. if ($room->store_id > 0) {
  1297. $self_mini = Option::get('self_mini', $room->store_id, 'store', 0)['value'];
  1298. }
  1299. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  1300. $setting = Notice::findOne(['store_id' => 0]);
  1301. } else {
  1302. $setting = Notice::findOne(['store_id' => $room->store_id]);
  1303. }
  1304. if ($setting && $setting->live_begin) {
  1305. $tpl = Json::decode($setting->live_begin);
  1306. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1307. // NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no, $store_id);
  1308. }
  1309. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1310. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], $page, [
  1311. $tpl['miapp']['kid_list'][0] => ['value' => $room->name],
  1312. $tpl['miapp']['kid_list'][1] => ['value' => $anchor->name],
  1313. $tpl['miapp']['kid_list'][2] => ['value' => date('Y-m-d H:i:s', $room->start_time)],
  1314. ]);
  1315. }
  1316. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1317. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], $page, [
  1318. $tpl['wxaapi']['kid_list'][0] => ['value' => $room->name],
  1319. $tpl['wxaapi']['kid_list'][1] => ['value' => $anchor->name],
  1320. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', $room->start_time)],
  1321. ]);
  1322. }
  1323. } else {
  1324. return false;
  1325. }
  1326. }
  1327. /**
  1328. * @description: 供货商/代理审核通过
  1329. * @param {*} $user_id
  1330. * @param {*} $status 状态 0 未通过 1 已通过
  1331. * @param {*} $desc 备注
  1332. * @return {*}
  1333. */
  1334. public static function AgentExamine($id, $type = 0)
  1335. {
  1336. $setting = Notice::findOne(['store_id' => 0]);
  1337. if ($type === 1) {
  1338. $supplier = Supplier::findOne(['id' => $id]);
  1339. $mobile = $supplier->phone;
  1340. $desc = '供货商';
  1341. $result = ((int)$supplier->status === 1) ? '通过' : '拒绝';
  1342. } elseif ($type === 2) {
  1343. $store_audit = StoreAudit::findOne($id);
  1344. $mobile = $store_audit->mobile;
  1345. $desc = '商城';
  1346. $result = ((int)$store_audit->status === 1) ? '通过' : '拒绝';
  1347. } elseif ($type === 3) {
  1348. $worker = Worker::findOne($id);
  1349. $mobile = $worker->tel;
  1350. $desc = '服务人员';
  1351. $result = ((int)$worker->status === 1) ? '通过' : '拒绝';
  1352. $self_mini = \app\models\Option::get('self_mini', get_store_id(), 'store', 0)['value'];
  1353. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  1354. $store_id = 0;
  1355. } else {
  1356. $store_id = get_store_id();
  1357. }
  1358. $setting_ = Notice::findOne(['store_id' => $store_id]);
  1359. if ($setting_ && $setting_->agent_examine) {
  1360. $tpl = Json::decode($setting_->agent_examine);
  1361. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open'] && $tpl['sms']['template_id'] && $tpl['sms']['template_var']) {
  1362. $setting = $setting_;
  1363. }
  1364. }
  1365. } else {
  1366. $agentApply = AgentApply::findOne(['saas_user_id' => $id, 'is_delete' => 0]);
  1367. $mobile = $agentApply->mobile;
  1368. $desc = '区域代理';
  1369. if ((int)$agentApply->agent_type === 1) {
  1370. $desc = "推广代理";
  1371. }
  1372. if ((int)$agentApply->agent_type === 2) {
  1373. $desc = "产品代理";
  1374. }
  1375. $result = ((int)$agentApply->status === 1) ? '通过' : '拒绝';
  1376. }
  1377. if ($setting && $setting->agent_examine) {
  1378. $tpl = Json::decode($setting->agent_examine);
  1379. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1380. $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'name';
  1381. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], [$tpl['sms']['template_var'], 'result'], [$desc, $result]);
  1382. if ($res['code'] == 0) {
  1383. return ['code' => 0, 'msg' => true];
  1384. } else {
  1385. return $res;
  1386. }
  1387. }
  1388. } else {
  1389. return false;
  1390. }
  1391. }
  1392. /**
  1393. * @description: 预约订单状态通知
  1394. * @param {*} $user_id
  1395. * @param {*} $status 状态 0 未通过 1 已通过
  1396. * @param {*} $desc 备注
  1397. * @return {*}
  1398. */
  1399. public static function bookExamine($id, $type = 0)
  1400. {
  1401. $store_id = get_store_id();
  1402. $store = Store::findOne($store_id);
  1403. if ($store) {
  1404. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1405. $store_id = 0;
  1406. }
  1407. }
  1408. if ($store_id <= 0) {
  1409. $setting = Notice::findOne(['store_id' => 0]);
  1410. $store_id = 0;
  1411. if (!$setting) {
  1412. $setting = Notice::findOne(['store_id' => -1]);
  1413. $store_id = -1;
  1414. }
  1415. } else {
  1416. $setting = Notice::findOne(['store_id' => $store_id]);
  1417. if (!$setting) {
  1418. $setting = Notice::findOne(['store_id' => 0]);
  1419. $store_id = 0;
  1420. if (!$setting) {
  1421. $setting = Notice::findOne(['store_id' => -1]);
  1422. $store_id = -1;
  1423. }
  1424. }
  1425. }
  1426. if ($type === 1) {
  1427. $examine = $setting->book_worker_examine;
  1428. } else {
  1429. $examine = $setting->book_success_examine;
  1430. }
  1431. $order = Order::findOne($id);
  1432. if (!$order) {
  1433. return false;
  1434. }
  1435. $mobile = $order->mobile;
  1436. if ($setting && $examine) {
  1437. $tpl = Json::decode($examine);
  1438. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1439. // $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'name';
  1440. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], '', '', $store_id);
  1441. if ($res['code'] == 0) {
  1442. return ['code' => 0, 'msg' => true];
  1443. } else {
  1444. return $res;
  1445. }
  1446. }
  1447. return false;
  1448. } else {
  1449. return false;
  1450. }
  1451. }
  1452. /**
  1453. * @description: 订单支付通知
  1454. * @param integer $user_id
  1455. * @param string $order_no
  1456. * @param integer $pay_time
  1457. * @param integer $pay_price
  1458. * @param string $goods_name
  1459. * @return {*}
  1460. */
  1461. public static function Adopt($user_id, $mobile, $order_no,$goods_name,$type,$day1,$day2, string $desc = '')
  1462. {
  1463. $setting = Notice::findOne(['store_id' => get_store_id()]);
  1464. $goods_name = $goods_name ?: '订单支付';
  1465. if ($type == 1){
  1466. $sms_type = 'adopt_mature';
  1467. $desc = "已成熟".$day1."天,".$day2."天后将默认选择农场收取";
  1468. }elseif ($type == 2){
  1469. $sms_type = 'adopt_storage';
  1470. $desc = "已入库".$day1."天,".$day2."天后将默认选择农场保管";
  1471. }elseif ($type == 3){
  1472. $sms_type = 'adopt_preserve';
  1473. $desc = "已保管".$day1."天,".$day2."天后将开始收取保管费用";
  1474. }
  1475. if ($setting && $setting->$sms_type) {
  1476. $tpl = Json::decode($setting->$sms_type);
  1477. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1478. NoticeAction::sendAdoptSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $goods_name,$day1,$day2);
  1479. }
  1480. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1481. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'livestockAdoption/my_order/my_order
  1482. ', [
  1483. // $tpl['miapp']['kid_list'][0] => ['value' => $goods_name],
  1484. // $tpl['miapp']['kid_list'][1] => ['value' => $day1],
  1485. // $tpl['miapp']['kid_list'][2] => ['value' => $day2],
  1486. // $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1487. $tpl['miapp']['kid_list'][0] => ['value' => $order_no],
  1488. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1489. $tpl['miapp']['kid_list'][2] => ['value' => $desc],
  1490. $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1491. ]);
  1492. }
  1493. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1494. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'livestockAdoption/my_order/my_order
  1495. ', [
  1496. // $tpl['wxaapi']['kid_list'][0] => ['value' => $goods_name],
  1497. // $tpl['wxaapi']['kid_list'][1] => ['value' => $day1],
  1498. // $tpl['wxaapi']['kid_list'][2] => ['value' => $day2],
  1499. // $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1500. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1501. $tpl['wxaapi']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1502. $tpl['wxaapi']['kid_list'][2] => ['value' => $desc],
  1503. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1504. ]);
  1505. }
  1506. } else {
  1507. return false;
  1508. }
  1509. }
  1510. /**
  1511. * @description: 认养流程状态改变通知
  1512. * @param integer $user_id
  1513. * @param string $order_no
  1514. * @return {*}
  1515. */
  1516. public static function AdoptOrderStateChange($user_id, $mobile, $order_no, $goods_name, $type, string $desc = '')
  1517. {
  1518. $setting = Notice::findOne(['store_id' => get_store_id()]);
  1519. \Yii::error("认养流程状态改变通知");
  1520. if ($type == 1){
  1521. $sms_type = 'adopt_order_confirm_mature';
  1522. $desc = "您的认养已成熟,记得选择采摘方式哦";
  1523. }elseif ($type == 2){
  1524. $sms_type = 'adopt_order_self_pick';
  1525. $desc = "您已选择自采,等待后台确认自采";
  1526. }elseif ($type == 3){
  1527. $sms_type = 'adopt_order_other_pick';
  1528. $desc = "您已选择代采,感谢您的支持";
  1529. }elseif ($type == 4){
  1530. $sms_type = 'adopt_order_confirm_self_pick_book';
  1531. $desc = "后台已确认自采预约,祝您采摘愉快";
  1532. }elseif ($type == 5){
  1533. $sms_type = 'adopt_order_start_self_pick';
  1534. $desc = "您已选择开始采摘,感谢您的支持";
  1535. }elseif ($type == 6){
  1536. $sms_type = 'adopt_order_end_self_pick';
  1537. $desc = "您已选择采摘完成,感谢您的支持";
  1538. }elseif ($type == 7){
  1539. $sms_type = 'adopt_order_confirm_self_pick_finish';
  1540. $desc = "后台已确认您的采摘完成,感谢您的支持";
  1541. }elseif ($type == 8){
  1542. $sms_type = 'adopt_order_pick_take';
  1543. $desc = "您已选择带走,记得及时来提货哦";
  1544. }elseif ($type == 9){
  1545. $sms_type = 'adopt_order_storage';
  1546. $desc = "您已选择入库,感谢您的支持,感谢您的支持";
  1547. }elseif ($type == 10){
  1548. $sms_type = 'adopt_order_confirm_storage';
  1549. $desc = "订单已入库,记得选择是否保管或者领走哦";
  1550. }elseif ($type == 11){
  1551. $sms_type = 'adopt_order_preserve';
  1552. $desc = "您选择保管,感谢您的支持,感谢您的支持";
  1553. }elseif ($type == 12){
  1554. $sms_type = 'adopt_order_no_preserve';
  1555. $desc = "您已选择不保管,记得及时来提货哦";
  1556. }elseif ($type == 13){
  1557. $sms_type = 'adopt_order_finish';
  1558. $desc = "您的订单已全部提货,感谢您的支持";
  1559. }
  1560. if ($setting && $setting->$sms_type) {
  1561. \Yii::error("认养流程状态改变通知1");
  1562. $tpl = Json::decode($setting->$sms_type);
  1563. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1564. NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $order_no);
  1565. }
  1566. \Yii::error($tpl);
  1567. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1568. \Yii::error("小程序认养流程状态改变通知");
  1569. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'livestockAdoption/my_order/my_order
  1570. ', [
  1571. $tpl['miapp']['kid_list'][0] => ['value' => mb_substr($order_no,0,18,'utf-8') ],
  1572. $tpl['miapp']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1573. $tpl['miapp']['kid_list'][2] => ['value' => $desc],
  1574. $tpl['miapp']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1575. ]);
  1576. }
  1577. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1578. NoticeAction::sendMine2($user_id, $tpl['wxaapi']['template_id'], 'livestockAdoption/my_order/my_order
  1579. ', [
  1580. $tpl['wxaapi']['kid_list'][0] => ['value' => mb_substr($order_no,0,18,'utf-8')],
  1581. $tpl['wxaapi']['kid_list'][1] => ['value' => mb_substr($goods_name,0,18,'utf-8')],
  1582. $tpl['wxaapi']['kid_list'][2] => ['value' => $desc],
  1583. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', time())],
  1584. ]);
  1585. }
  1586. } else {
  1587. return false;
  1588. }
  1589. }
  1590. /**
  1591. * @description: 商品降价通知
  1592. * @param integer $user_id
  1593. * @param array $goods
  1594. * @return {*}
  1595. */
  1596. public static function LoweringPrice($user_id, $goods)
  1597. {
  1598. $self_mini = 1;
  1599. if (get_store_id() > 0) {
  1600. $self_mini = Option::get('self_mini', get_store_id(), 'store', 0)['value'];
  1601. }
  1602. if (\Yii::$app->prod_is_dandianpu() && !$self_mini) {
  1603. $setting = Notice::findOne(['store_id' => 0]);
  1604. } else {
  1605. $setting = Notice::findOne(['store_id' => get_store_id()]);
  1606. }
  1607. if ($setting && $setting->lowering_price) {
  1608. $tpl = Json::decode($setting->lowering_price);
  1609. if ($tpl && $tpl['miapp'] && $tpl['miapp']['is_open']) {
  1610. NoticeAction::sendMine($user_id, $tpl['miapp']['template_id'], 'goods/goods/goods?id='.$goods['id'], [
  1611. $tpl['miapp']['kid_list'][0] => ['value' => $goods['name']],
  1612. $tpl['miapp']['kid_list'][1] => ['value' => $goods['diff_price']],
  1613. $tpl['miapp']['kid_list'][2] => ['value' => $goods['user_min_price']],
  1614. ]);
  1615. }
  1616. } else {
  1617. return false;
  1618. }
  1619. }
  1620. /**
  1621. * @description: 注册通知上级
  1622. * @param string $mobile
  1623. * @param int $user_name
  1624. * @return array
  1625. */
  1626. public static function registerTellParent($mobile, $user_name, $is_platform = false)
  1627. {
  1628. if ($is_platform) {
  1629. $store_id = -1;
  1630. } else {
  1631. $store_id = get_store_id();
  1632. }
  1633. $store = Store::findOne($store_id);
  1634. if ($store) {
  1635. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1636. $store_id = 0;
  1637. }
  1638. }
  1639. if ($store_id <= 0) {
  1640. $setting = Notice::findOne(['store_id' => 0]);
  1641. $store_id = 0;
  1642. if (!$setting) {
  1643. $setting = Notice::findOne(['store_id' => -1]);
  1644. $store_id = -1;
  1645. }
  1646. } else {
  1647. $setting = Notice::findOne(['store_id' => $store_id]);
  1648. if (!$setting) {
  1649. $setting = Notice::findOne(['store_id' => 0]);
  1650. $store_id = 0;
  1651. if (!$setting) {
  1652. $setting = Notice::findOne(['store_id' => -1]);
  1653. $store_id = -1;
  1654. }
  1655. }
  1656. }
  1657. if ($setting && $setting->register_tell_parent) {
  1658. $tpl = Json::decode($setting->register_tell_parent);
  1659. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1660. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $user_name, $store_id);
  1661. if ($res['code'] == 0) {
  1662. return ['code' => 0, 'msg' => true];
  1663. } else {
  1664. return $res;
  1665. }
  1666. }
  1667. } else {
  1668. return [
  1669. 'code' => 1,
  1670. 'msg' => '请检查短信验证码相关配置'
  1671. ];
  1672. }
  1673. }
  1674. /**
  1675. * @description: 用户批发审核通过/拒绝通知
  1676. * @return array|boolean
  1677. */
  1678. public static function userAuditStatusNotice($id, $store_id = 0)
  1679. {
  1680. $userAuditLog = UserAuditLog::findOne(['id' => $id, 'status' => [UserAuditLog::STATUS_AGREE, UserAuditLog::STATUS_PASS]]);
  1681. if (!$userAuditLog) {
  1682. return false;
  1683. }
  1684. // $user = User::findOne($userAuditLog->user_id);
  1685. // if (!$user) {
  1686. // return false;
  1687. // }
  1688. // $binding = $user->binding;
  1689. $binding = $userAuditLog->mobile ?: '';
  1690. if (empty($userAuditLog->mobile)) {
  1691. $user = User::findOne($userAuditLog->user_id);
  1692. if (!$user) {
  1693. return false;
  1694. }
  1695. $binding = $user->binding ?: '';
  1696. }
  1697. if (empty($binding)) {
  1698. return false;
  1699. }
  1700. $result = '';
  1701. if (intval($userAuditLog->status) === 1) {
  1702. $result = '通过';
  1703. } elseif (intval($userAuditLog->status) === 2) {
  1704. $result = '拒绝';
  1705. }
  1706. $store = Store::findOne($store_id);
  1707. if ($store) {
  1708. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1709. $store_id = 0;
  1710. }
  1711. }
  1712. if ($store_id <= 0) {
  1713. $setting = Notice::findOne(['store_id' => 0]);
  1714. $store_id = 0;
  1715. if (!$setting) {
  1716. $setting = Notice::findOne(['store_id' => -1]);
  1717. $store_id = -1;
  1718. }
  1719. } else {
  1720. $setting = Notice::findOne(['store_id' => $store_id]);
  1721. if (!$setting) {
  1722. $setting = Notice::findOne(['store_id' => 0]);
  1723. $store_id = 0;
  1724. if (!$setting) {
  1725. $setting = Notice::findOne(['store_id' => -1]);
  1726. $store_id = -1;
  1727. }
  1728. }
  1729. }
  1730. if ($setting && $setting->user_audit_status_notice) {
  1731. $tpl = Json::decode($setting->user_audit_status_notice);
  1732. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1733. $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'status';
  1734. $res = NoticeAction::sendSms($binding, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $result, $store_id);
  1735. if ($res['code'] == 0) {
  1736. return ['code' => 0, 'msg' => true];
  1737. } else {
  1738. return $res;
  1739. }
  1740. }
  1741. } else {
  1742. return false;
  1743. }
  1744. }
  1745. /**
  1746. * @description: 用户进入商城审核通知(商家)
  1747. * @return array|boolean
  1748. */
  1749. public static function userAuditNotice($id, $store_id = 0)
  1750. {
  1751. $userAuditLog = UserAuditLog::findOne(['id' => $id, 'status' => UserAuditLog::STATUS_NOT_AGREE]);
  1752. if (!$userAuditLog) {
  1753. return false;
  1754. }
  1755. $result = $userAuditLog->mobile ?: '';
  1756. if (empty($userAuditLog->mobile)) {
  1757. $user = User::findOne($userAuditLog->user_id);
  1758. if (!$user) {
  1759. return false;
  1760. }
  1761. $result = $user->binding ?: '';
  1762. }
  1763. $store = Store::findOne($store_id);
  1764. if ($store) {
  1765. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1766. $store_id = 0;
  1767. }
  1768. }
  1769. if ($store_id <= 0) {
  1770. $setting = Notice::findOne(['store_id' => 0]);
  1771. $store_id = 0;
  1772. if (!$setting) {
  1773. $setting = Notice::findOne(['store_id' => -1]);
  1774. $store_id = -1;
  1775. }
  1776. } else {
  1777. $setting = Notice::findOne(['store_id' => $store_id]);
  1778. if (!$setting) {
  1779. $setting = Notice::findOne(['store_id' => 0]);
  1780. $store_id = 0;
  1781. if (!$setting) {
  1782. $setting = Notice::findOne(['store_id' => -1]);
  1783. $store_id = -1;
  1784. }
  1785. }
  1786. }
  1787. if ($setting && $setting->user_audit_notice) {
  1788. $tpl = Json::decode($setting->user_audit_notice);
  1789. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1790. $mobile = explode(',', $tpl['sms']['receive_mobile']);;
  1791. $tpl['sms']['template_var'] = $tpl['sms']['template_var'] ?: 'name';
  1792. foreach($mobile as $val) {
  1793. NoticeAction::sendSms($val, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $result, $store_id);
  1794. }
  1795. }
  1796. } else {
  1797. return false;
  1798. }
  1799. }
  1800. /**
  1801. * 服务订单派单通知
  1802. */
  1803. public static function workerOrderReceivedNotice($order_id)
  1804. {
  1805. $workerOrderExt = WorkerOrderExt::findOne($order_id);
  1806. if ($workerOrderExt) {
  1807. $store_id = $workerOrderExt->store_id;
  1808. $store = Store::findOne($store_id);
  1809. if ($store) {
  1810. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1811. $store_id = 0;
  1812. }
  1813. }
  1814. if ($store_id <= 0) {
  1815. $setting = Notice::findOne(['store_id' => 0]);
  1816. $store_id = 0;
  1817. if (!$setting) {
  1818. $setting = Notice::findOne(['store_id' => -1]);
  1819. $store_id = -1;
  1820. }
  1821. } else {
  1822. $setting = Notice::findOne(['store_id' => $store_id]);
  1823. if (!$setting) {
  1824. $setting = Notice::findOne(['store_id' => 0]);
  1825. $store_id = 0;
  1826. if (!$setting) {
  1827. $setting = Notice::findOne(['store_id' => -1]);
  1828. $store_id = -1;
  1829. }
  1830. }
  1831. }
  1832. $tpl = null;
  1833. //
  1834. if ($setting) {
  1835. if (in_array($workerOrderExt->status_ext, [
  1836. WorkerOrderExt::STATUS_EXT_WAIT_BIND_OK,//待接单(有客户下单指定服务人员或者后台分配服务人员)
  1837. WorkerOrderExt::STATUS_EXT_CANCEL,//已取消
  1838. WorkerOrderExt::STATUS_EXT_FINISH//已完成
  1839. ])) {
  1840. $worker = Worker::findOne($workerOrderExt->worker_id);
  1841. if ($setting->user_audit_notice) {
  1842. $tpl = Json::decode($setting->worker_order);
  1843. }
  1844. $mobile = $worker->tel;
  1845. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1846. $template_var = $tpl['sms']['template_var'] ?: 'status,time';
  1847. $template_var = explode(',', $template_var);
  1848. $result = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $template_var, [
  1849. WorkerOrderExt::$getStatusExtName[$workerOrderExt->status_ext],
  1850. date('Y年m月d日 H:i:s')
  1851. ], $store_id);
  1852. return true;
  1853. }
  1854. } else {
  1855. $order = Order::findOne($workerOrderExt->order_id);
  1856. if ($setting->user_audit_notice) {
  1857. $tpl = Json::decode($setting->worker_order_received);
  1858. }
  1859. $mobile = $order->mobile;
  1860. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  1861. $result = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], '', '', $store_id);
  1862. return true;
  1863. }
  1864. }
  1865. }
  1866. }
  1867. return false;
  1868. }
  1869. /* begin 2025/07/11 11:08:47 WPing丶 */
  1870. /**
  1871. * @description: 用户下单通知服务人员抢单
  1872. * @param int $md_id
  1873. * @return {*}
  1874. */
  1875. public static function ServiceNewOrder($order_no, $store_id = 0, $order = null)
  1876. {
  1877. $store = Store::findOne($store_id);
  1878. if ($store) {
  1879. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1880. $store_id = 0;
  1881. }
  1882. }
  1883. if ($store_id <= 0) {
  1884. $setting = Notice::findOne(['store_id' => 0]);
  1885. $store_id = 0;
  1886. if (!$setting) {
  1887. $setting = Notice::findOne(['store_id' => -1]);
  1888. $store_id = -1;
  1889. }
  1890. } else {
  1891. $setting = Notice::findOne(['store_id' => $store_id]);
  1892. if (!$setting) {
  1893. $setting = Notice::findOne(['store_id' => 0]);
  1894. $store_id = 0;
  1895. if (!$setting) {
  1896. $setting = Notice::findOne(['store_id' => -1]);
  1897. $store_id = -1;
  1898. }
  1899. }
  1900. }
  1901. if ($setting && $setting->service_new_order) {
  1902. $tpl = Json::decode($setting->service_new_order);
  1903. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1904. try {
  1905. // 1. 获取订单明细中的商品ID
  1906. $goods_detail = OrderDetail::find()->where(['order_id' => $order->id])->one();
  1907. $goods_id = $goods_detail->goods_id;
  1908. $worker_ids = WorkerGoods::find()->alias('wg')
  1909. ->leftJoin(['w' => Worker::tableName()], 'w.id = wg.worker_id')
  1910. ->where(['wg.goods_id' => $goods_id, 'wg.status' => 1])
  1911. ->select('w.user_id')
  1912. ->column();
  1913. $worker_order = WorkerOrderExt::findOne(['order_id' => $order->id]);
  1914. //获取客户的经纬度
  1915. $lat = $worker_order->lat;
  1916. $lng = $worker_order->lng;
  1917. //获取接单范围
  1918. $setting = WorkerSetting::getByStoreId($store_id);
  1919. $orderSpace = $setting['order_space'];
  1920. $worker = Worker::find()->alias('w')
  1921. ->select([
  1922. 'w.*',
  1923. new \yii\db\Expression("
  1924. acos(
  1925. cos({$lat} * pi() / 180) * cos(w.lat * pi() / 180) *
  1926. cos({$lng} * pi() / 180 - w.lng * pi() / 180) +
  1927. sin({$lat} * pi() / 180) * sin(w.lat * pi() / 180)
  1928. ) * 6370996.81 AS distance
  1929. ")
  1930. ])
  1931. ->where(['store_id' => $store_id])
  1932. ->andWhere(['user_id' => $worker_ids])
  1933. ->andWhere(['and', ['IS NOT', 'w.lng', null],['IS NOT', 'w.lat', null]])
  1934. ->having(['<=', 'distance', $orderSpace])
  1935. ->orderBy('distance ASC')
  1936. ->asArray()
  1937. ->all();
  1938. foreach($worker as $item){
  1939. NoticeAction::sendMine2($item['user_id'], $tpl['wxaapi']['template_id'], 'service-home/rob-order/index', [
  1940. $tpl['wxaapi']['kid_list'][0] => ['value' => $order_no],
  1941. $tpl['wxaapi']['kid_list'][1] => ['value' => date('Y-m-d H:i:s')],
  1942. $tpl['wxaapi']['kid_list'][2] => ['value' => $order['pay_price']],
  1943. ]);
  1944. }
  1945. } catch (\Throwable $e) {
  1946. debug_log($e, 'notice.log');
  1947. }
  1948. }
  1949. }
  1950. }
  1951. /**
  1952. * @description: 服务人员接单通知
  1953. * @param int $worker_id
  1954. * @param int $order_id
  1955. * @return void
  1956. */
  1957. public static function ServiceReceiveOrder($order_id)
  1958. {
  1959. $worker_id = WorkerOrderExt::findOne($order_id)->worker_id;
  1960. $worker = Worker::findOne($worker_id);
  1961. $order = Order::findOne(WorkerOrderExt::findOne($order_id)->order_id);
  1962. if (!$worker || !$order) {
  1963. return false;
  1964. }
  1965. $store_id = $order->store_id;
  1966. $store = Store::findOne($store_id);
  1967. if ($store) {
  1968. if (!in_array($store->business_model, [1, 2])) {//商盟非独立运营店铺也用联盟端配置
  1969. $store_id = 0;
  1970. }
  1971. }
  1972. if ($store_id <= 0) {
  1973. $setting = Notice::findOne(['store_id' => 0]);
  1974. $store_id = 0;
  1975. if (!$setting) {
  1976. $setting = Notice::findOne(['store_id' => -1]);
  1977. $store_id = -1;
  1978. }
  1979. } else {
  1980. $setting = Notice::findOne(['store_id' => $store_id]);
  1981. if (!$setting) {
  1982. $setting = Notice::findOne(['store_id' => 0]);
  1983. $store_id = 0;
  1984. if (!$setting) {
  1985. $setting = Notice::findOne(['store_id' => -1]);
  1986. $store_id = -1;
  1987. }
  1988. }
  1989. }
  1990. if ($setting && $setting->service_receive_order) {
  1991. $tpl = \yii\helpers\Json::decode($setting->service_receive_order);
  1992. if ($tpl && $tpl['wxaapi'] && $tpl['wxaapi']['is_open']) {
  1993. $user_name = '';
  1994. $user = User::findOne($order->user_id);
  1995. if($user){
  1996. $saas = \app\models\SaasUser::findOne(['mobile' => $user->binding]);
  1997. $saas && $user_name = $saas->name;
  1998. }
  1999. NoticeAction::sendMine2($worker->user_id, $tpl['wxaapi']['template_id'], 'service-home/index/index', [
  2000. $tpl['wxaapi']['kid_list'][0] => ['value' => $order->order_no],
  2001. $tpl['wxaapi']['kid_list'][1] => ['value' => $order->pay_price],
  2002. $tpl['wxaapi']['kid_list'][2] => ['value' => $user_name],
  2003. $tpl['wxaapi']['kid_list'][3] => ['value' => date('Y-m-d H:i:s', $order->pay_time)],
  2004. ]);
  2005. }
  2006. } else {
  2007. return false;
  2008. }
  2009. }
  2010. /* end */
  2011. }