CustomClass.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798
  1. <?php
  2. namespace bizHd\custom\classes;
  3. use biz\wx\classes\WxMessageClass;
  4. use bizHd\balance\classes\BalanceChangeClass;
  5. use bizHd\balance\classes\BalanceGiveChangeClass;
  6. use bizHd\balance\classes\BalancePayChangeClass;
  7. use bizHd\member\classes\MemberChangeClass;
  8. use bizHd\member\classes\MemberLevelClass;
  9. use bizHd\member\classes\MemberWealClass;
  10. use bizHd\order\classes\OrderClass;
  11. use bizHd\order\classes\SettleClass;
  12. use bizHd\shop\classes\ShopClass;
  13. use common\components\dict;
  14. use common\components\imgUtil;
  15. use common\components\stringUtil;
  16. use common\components\util;
  17. use Yii;
  18. use bizHd\base\classes\BaseClass;
  19. class CustomClass extends BaseClass
  20. {
  21. public static $baseFile = '\bizHd\custom\models\Custom';
  22. //用余额支付,客户余额减少 ssh 20250410
  23. public static function payToChangeBalance($order)
  24. {
  25. $actPrice = $order->actPrice ?? 0;
  26. $hdId = $order->hdId ?? 0;
  27. $hd = HdClass::getLockById($hdId);
  28. $balance = $hd->balance ?? 0;
  29. if ($actPrice > $balance) {
  30. util::fail('余额不足');
  31. }
  32. $remain = bcsub($balance, $actPrice, 2);
  33. $hd->balance = $remain;
  34. $hd->save();
  35. $hdName = $hd->name;
  36. $customId = $order->customId ?? 0;
  37. $custom = self::getLockById($customId);
  38. $balance = $custom->balance ?? 0;
  39. if ($actPrice > $balance) {
  40. util::fail('余额不足哦');
  41. }
  42. $remain = bcsub($balance, $actPrice, 2);
  43. $custom->balance = $remain;
  44. $custom->save();
  45. $customName = $custom->name;
  46. if ($custom->balance != $hd->balance) {
  47. util::fail('余额有问题哦');
  48. }
  49. $relateId = $order->id ?? 0;
  50. //0 花店操作 1 客户操作
  51. $payWay = $order->payWay;
  52. $side = 1;
  53. $shopId = $order->shopId;
  54. $mainId = $order->mainId;
  55. $staffId = $order->shopAdminId;
  56. $staffName = $order->shopAdminName;
  57. $orderSn = $order->orderSn;
  58. $event = '买花,单号:' . $orderSn;
  59. $capitalType = dict::getDict('capitalType', 'xhOrder', 'id');
  60. $change = [
  61. 'hdId' => $hdId,
  62. 'hdName' => $hdName,
  63. 'customId' => $customId,
  64. 'customName' => $customName,
  65. 'relateId' => $relateId,
  66. 'onlinePay' => 1,
  67. 'capitalType' => $capitalType,
  68. 'amount' => $actPrice,
  69. 'balance' => $hd->balance,
  70. 'io' => 0,
  71. 'side' => $side,
  72. 'payWay' => $payWay,
  73. 'event' => $event,
  74. 'staffId' => $staffId,
  75. 'staffName' => $staffName,
  76. 'shopId' => $shopId,
  77. 'mainId' => $mainId,
  78. 'remark' => '',
  79. ];
  80. BalanceChangeClass::add($change, true);
  81. $order->balance = $actPrice;
  82. $order->save();
  83. // 多处需要同步修改 balance_pay_give
  84. if ($hd->balancePay >= $actPrice) {
  85. $payAmount = $actPrice;
  86. $mustUseGiveAmount = 0;
  87. } else {
  88. $payAmount = $hd->balancePay;
  89. $mustUseGiveAmount = bcsub($actPrice, $payAmount, 2);
  90. if ($mustUseGiveAmount > $hd->balanceGive) {
  91. util::fail('赠送余额异常,不够扣');
  92. }
  93. }
  94. /************************* 充值余额 *****************************/
  95. $customBalancePay = bcsub($custom->balancePay, $payAmount, 2);
  96. $custom->balancePay = $customBalancePay;
  97. $custom->save();
  98. $hdBalancePay = bcsub($hd->balancePay, $payAmount, 2);
  99. $hd->balancePay = $hdBalancePay;
  100. $hd->save();
  101. $payChange = [
  102. 'hdId' => $hdId,
  103. 'hdName' => $hdName,
  104. 'customId' => $customId,
  105. 'customName' => $customName,
  106. 'relateId' => $relateId,
  107. 'onlinePay' => 1,
  108. 'capitalType' => $capitalType,
  109. 'amount' => $payAmount,
  110. 'balance' => $customBalancePay,
  111. 'io' => 0,
  112. 'side' => $side,
  113. 'payWay' => $payWay,
  114. 'event' => $event,
  115. 'staffId' => $staffId,
  116. 'staffName' => $staffName,
  117. 'shopId' => $shopId,
  118. 'mainId' => $mainId,
  119. 'remark' => '',
  120. ];
  121. BalancePayChangeClass::add($payChange, true);
  122. $order->payBalance = $payAmount;
  123. $order->save();
  124. /***************************** 赠送余额 ******************************/
  125. //应用掉的赠送金额
  126. if ($mustUseGiveAmount > 0) {
  127. $customBalanceGive = bcsub($custom->balanceGive, $mustUseGiveAmount, 2);
  128. if ($customBalanceGive < 0) {
  129. util::fail('余额异常哈!请联系管理员,编号' . $hdId . ' ' . $custom->balanceGive);
  130. }
  131. $custom->balanceGive = $customBalanceGive;
  132. $custom->save();
  133. $hdBalanceGive = bcsub($hd->balanceGive, $mustUseGiveAmount, 2);
  134. $hd->balanceGive = $hdBalanceGive;
  135. $hd->save();
  136. if (floatval($customBalanceGive) != floatval($hdBalanceGive)) {
  137. util::fail('余额有问题呢!请联系管理员,编号' . $hdId);
  138. }
  139. $giveChange = [
  140. 'hdId' => $hdId,
  141. 'hdName' => $hdName,
  142. 'customId' => $customId,
  143. 'customName' => $customName,
  144. 'relateId' => $relateId,
  145. 'onlinePay' => 1,
  146. 'capitalType' => $capitalType,
  147. 'amount' => $mustUseGiveAmount,
  148. 'balance' => $customBalanceGive,
  149. 'io' => 0,
  150. 'side' => $side,
  151. 'payWay' => $payWay,
  152. 'event' => $event,
  153. 'staffId' => $staffId,
  154. 'staffName' => $staffName,
  155. 'shopId' => $shopId,
  156. 'mainId' => $mainId,
  157. 'remark' => '',
  158. ];
  159. BalanceGiveChangeClass::add($giveChange, true);
  160. $order->giveBalance = $mustUseGiveAmount;
  161. $order->save();
  162. }
  163. $addBalance = bcadd($hd->balancePay, $hd->balanceGive, 2);
  164. if (floatval($addBalance) != floatval($custom->balance)) {
  165. util::fail('账户余额有问题!请检查,编号' . $customId);
  166. }
  167. }
  168. //会员等级变化,包括手动修改、自动降会员和充值升会员等 ssh 20250324
  169. public static function levelChange($oldLevel, $newLevel, $shop, $custom, $hd, $params)
  170. {
  171. $staffId = $params['staffId'] ?? 0;
  172. $staffName = $params['staffName'] ?? '';
  173. $style = $params['style'] ?? 0;
  174. $target = $params['target'] ?? [];
  175. $rechargeAmount = $params['rechargeAmount'] ?? 0;
  176. $targetId = $target->id ?? 0;
  177. $mainId = $shop->mainId;
  178. $shopId = $shop->id;
  179. $levelData = MemberLevelClass::getAllByCondition(['mainId' => $mainId], null, '*', 'level');
  180. $current = $levelData[$newLevel] ?? [];
  181. $before = $levelData[$oldLevel] ?? [];
  182. $beforeName = $before['name'] ?? '普通客户';
  183. $discount = $current['discount'] ?? 1;
  184. $memberName = $current['name'] ?? '';
  185. $custom->member = $newLevel;
  186. $custom->discount = $discount;
  187. $custom->memberName = $memberName;
  188. $custom->save();
  189. $hd->member = $newLevel;
  190. $hd->discount = $discount;
  191. $hd->memberName = $memberName;
  192. $hd->save();
  193. $event = '手动修改';
  194. if ($style == 0) {
  195. util::fail('充值不支持升级会员');
  196. }
  197. $change = [
  198. 'customId' => $custom->id,
  199. 'customName' => $custom->name,
  200. 'hdId' => $hd->id,
  201. 'hdName' => $hd->name,
  202. 'mainId' => $mainId,
  203. 'shopId' => $shopId,
  204. 'targetId' => $targetId,
  205. 'rechargeAmount' => $rechargeAmount,
  206. 'days' => 0,
  207. 'daysBefore' => '0000-00-00 00:00:00',
  208. 'daysAfter' => '0000-00-00 00:00:00',
  209. 'beforeLevel' => $oldLevel,
  210. 'afterLevel' => $newLevel,
  211. 'beforeName' => $beforeName,
  212. 'afterName' => $memberName,
  213. 'style' => $style,
  214. 'event' => $event,
  215. 'staffId' => $staffId,
  216. 'staffName' => $staffName,
  217. ];
  218. MemberChangeClass::add($change);
  219. }
  220. //客户采购欠款金额增加,如果有余额时,要进行欠款销账 ssh 20250715
  221. //todo 这边开欠款单时,如果还有余额,会产生结账动作,结账动作也可以用赠送余额来结账,所以要分出赠送余额的占比
  222. //todo 结账消余额,不是下单时消余额,不涉及售后时余额回滚问题,所以不需要设置 xhOrder 的 giveBalance payBalance balance等值
  223. public static function skCgDebtAmountAdd($custom, $order)
  224. {
  225. $clearAmount = 0;
  226. $amount = $order->remainDebtPrice ?? 0;
  227. $staffId = $order->shopAdminId ?? 0;
  228. $staffName = $order->shopAdminName ?? '';
  229. $orderId = $order->id;
  230. $orderSn = $order->orderSn ?? '';
  231. $shopId = $order->shopId;
  232. $settleNo = '';
  233. $settleId = 0;
  234. $settleAmount = 0;
  235. $hdId = $custom->hdId ?? 0;
  236. $hd = HdClass::getLockById($hdId);
  237. if (empty($hd)) {
  238. util::fail('花店信息缺失,编号6325');
  239. }
  240. $hdName = $hd->name ?? '';
  241. //结账时用了多少赠送的余额
  242. $settleUseGiveAmount = 0;
  243. if ($custom->balance > 0) {
  244. if ($amount > $custom->balance) {
  245. $clearAmount = $custom->balance;
  246. $settleUseGiveAmount = $custom->balanceGive;
  247. } else {
  248. util::fail('余额充足,请用余额支付');
  249. }
  250. }
  251. if ($clearAmount > 0) {
  252. $shop = ShopClass::getById($shopId, true);
  253. $needClearIdMap[] = ['orderId' => $orderId, 'clearAmount' => $clearAmount, 'orderSn' => $orderSn];
  254. $setParams = ['staffId' => $staffId, 'staffName' => $staffName];
  255. $set = SettleClass::addSettle($needClearIdMap, $shop, $custom, $hd, $setParams);
  256. $ret = SettleClass::clearSettle($set);
  257. $settleAmount = $ret['totalClearAmount'] ?? 0;
  258. $settleNo = $set->orderSn ?? '';
  259. $settleId = $set->id;
  260. $newSettle = $ret['settle'];
  261. //结账时用了多少赠送的余额
  262. $newSettle->giveBalance = bcadd($newSettle->giveBalance, $settleUseGiveAmount, 2);
  263. $newSettle->save();
  264. }
  265. /************************ 总余额 *********************************/
  266. $customBalance = bcsub($custom->balance, $amount, 2);
  267. $custom->balance = $customBalance;
  268. if ($custom->balance < 0) {
  269. $custom->isDebt = 1;
  270. }
  271. $custom->save();
  272. $hdBalance = bcsub($hd->balance, $amount, 2);
  273. $hd->balance = $hdBalance;
  274. if ($hd->balance < 0) {
  275. $hd->debt = 2;
  276. }
  277. $hd->save();
  278. if (floatval($customBalance) != floatval($hdBalance)) {
  279. util::fail('余额有错,请联系管理员,编号' . $hdId);
  280. }
  281. $relateId = $order->id ?? 0;
  282. $customId = $custom->id ?? 0;
  283. $orderSn = $order->orderSn ?? '';
  284. $capitalType = dict::getDict('capitalType', 'xhOrder', 'id');
  285. $event = '购买花材,单号:' . $orderSn;
  286. $customName = $custom->name ?? '';
  287. $onlinePay = 1;
  288. $side = 0;
  289. $payWay = 0;
  290. $change = [
  291. 'hdId' => $hdId,
  292. 'hdName' => $hdName,
  293. 'customId' => $customId,
  294. 'customName' => $customName,
  295. 'relateId' => $relateId,
  296. 'onlinePay' => $onlinePay,
  297. 'capitalType' => $capitalType,
  298. 'amount' => $amount,
  299. 'balance' => $customBalance,
  300. 'io' => 0,
  301. 'side' => $side,
  302. 'payWay' => $payWay,
  303. 'event' => $event,
  304. 'staffId' => $staffId,
  305. 'staffName' => $staffName,
  306. 'shopId' => $shopId,
  307. 'mainId' => $order->mainId,
  308. 'settleId' => $settleId,
  309. 'settleNo' => $settleNo,
  310. 'settleAmount' => $settleAmount,
  311. 'remark' => '',
  312. ];
  313. BalanceChangeClass::add($change, true);
  314. $mustUseGiveAmount = 0;
  315. // 多处需要同步修改 balance_pay_give
  316. if ($hd->balancePay >= $amount) {
  317. util::fail('请用余额支付哈');
  318. } else {
  319. // todo 如果【充值金额】小于订单欠款金额,则用全部【充值金额】消单,同时必须用上【赠送金额】,够抵,则【充值金额】还是正数,不够抵,则是负数
  320. if ($hd->balanceGive <= 0) {
  321. //没有【赠送金额】,则用【充值金额】来消全部的欠款金额,不够则变成负数
  322. $payAmount = $amount;
  323. } else {
  324. //这个是【总余额】,包括【充值金额】和【赠送金额】
  325. $currentAdd = bcadd($hd->balancePay, $hd->balanceGive, 2);
  326. if ($currentAdd >= $amount) {
  327. util::fail('请使用余额支付哦');
  328. } else {
  329. //【总余额】不够抵欠款金额,先用掉全部的【赠送金额】,其他的全部算在【充值金额】名下,因为充值金额也不够扣,会出现负数
  330. $mustUseGiveAmount = $hd->balanceGive;
  331. $payAmount = bcsub($amount, $mustUseGiveAmount, 2);
  332. }
  333. }
  334. }
  335. /************************* 充值余额 *****************************/
  336. $customBalancePay = bcsub($custom->balancePay, $payAmount, 2);
  337. $custom->balancePay = $customBalancePay;
  338. $custom->save();
  339. $hdBalancePay = bcsub($hd->balancePay, $payAmount, 2);
  340. $hd->balancePay = $hdBalancePay;
  341. $hd->save();
  342. if (floatval($customBalancePay) != floatval($hdBalancePay)) {
  343. util::fail('余额有错呢,请联系管理员,编号' . $hdId);
  344. }
  345. $relateId = $order->id ?? 0;
  346. $customId = $custom->id ?? 0;
  347. $orderSn = $order->orderSn ?? '';
  348. $capitalType = dict::getDict('capitalType', 'xhOrder', 'id');
  349. $event = '购买花材,单号:' . $orderSn;
  350. $customName = $custom->name ?? '';
  351. $onlinePay = 1;
  352. $side = 0;
  353. $payWay = 0;
  354. $payChange = [
  355. 'hdId' => $hdId,
  356. 'hdName' => $hdName,
  357. 'customId' => $customId,
  358. 'customName' => $customName,
  359. 'relateId' => $relateId,
  360. 'onlinePay' => $onlinePay,
  361. 'capitalType' => $capitalType,
  362. 'amount' => $payAmount,
  363. 'balance' => $customBalancePay,
  364. 'io' => 0,
  365. 'side' => $side,
  366. 'payWay' => $payWay,
  367. 'event' => $event,
  368. 'staffId' => $staffId,
  369. 'staffName' => $staffName,
  370. 'shopId' => $shopId,
  371. 'mainId' => $order->mainId,
  372. 'settleId' => $settleId,
  373. 'settleNo' => $settleNo,
  374. 'settleAmount' => $settleAmount,
  375. 'remark' => '',
  376. ];
  377. BalancePayChangeClass::add($payChange, true);
  378. /***************************** 赠送余额 ******************************/
  379. //应用掉的赠送金额
  380. if ($mustUseGiveAmount > 0) {
  381. $customBalanceGive = bcsub($custom->balanceGive, $mustUseGiveAmount, 2);
  382. if ($customBalanceGive < 0) {
  383. util::fail('余额异常哈,请联系管理员,编号' . $hdId . ' ' . $custom->balanceGive);
  384. }
  385. $custom->balanceGive = $customBalanceGive;
  386. $custom->save();
  387. $hdBalanceGive = bcsub($hd->balanceGive, $mustUseGiveAmount, 2);
  388. $hd->balanceGive = $hdBalanceGive;
  389. $hd->save();
  390. if (floatval($customBalanceGive) != floatval($hdBalanceGive)) {
  391. util::fail('余额有问题呢,请联系管理员,编号' . $hdId);
  392. }
  393. $relateId = $order->id ?? 0;
  394. $customId = $custom->id ?? 0;
  395. $orderSn = $order->orderSn ?? '';
  396. $capitalType = dict::getDict('capitalType', 'xhOrder', 'id');
  397. $event = '购买花材,单号:' . $orderSn;
  398. $customName = $custom->name ?? '';
  399. $onlinePay = 1;
  400. $side = 0;
  401. $payWay = 0;
  402. $giveChange = [
  403. 'hdId' => $hdId,
  404. 'hdName' => $hdName,
  405. 'customId' => $customId,
  406. 'customName' => $customName,
  407. 'relateId' => $relateId,
  408. 'onlinePay' => $onlinePay,
  409. 'capitalType' => $capitalType,
  410. 'amount' => $mustUseGiveAmount,
  411. 'balance' => $customBalanceGive,
  412. 'io' => 0,
  413. 'side' => $side,
  414. 'payWay' => $payWay,
  415. 'event' => $event,
  416. 'staffId' => $staffId,
  417. 'staffName' => $staffName,
  418. 'shopId' => $shopId,
  419. 'mainId' => $order->mainId,
  420. 'settleId' => $settleId,
  421. 'settleNo' => $settleNo,
  422. 'settleAmount' => $settleAmount,
  423. 'remark' => '',
  424. ];
  425. BalanceGiveChangeClass::add($giveChange, true);
  426. }
  427. $addBalance = bcadd($hd->balancePay, $hd->balanceGive, 2);
  428. if (floatval($addBalance) != floatval($custom->balance)) {
  429. util::fail('账户余额有问题,请检查,编号' . $customId);
  430. }
  431. }
  432. //欠款和余额支付的售后 ssh 20250803
  433. public static function skRefundDebtAmountReduce($custom, $amount, $refund, $payWay)
  434. {
  435. $hdId = $custom->hdId ?? 0;
  436. $hd = HdClass::getLockById($hdId);
  437. if (empty($hd)) {
  438. util::fail('花店信息缺失,编号5362');
  439. }
  440. $customBalance = bcadd($custom->balance, $amount, 2);
  441. $custom->balance = $customBalance;
  442. if ($custom->balance < 0) {
  443. $custom->isDebt = 1;
  444. }
  445. $custom->save();
  446. $hdBalance = bcadd($hd->balance, $amount, 2);
  447. $hd->balance = $hdBalance;
  448. if ($hd->balance < 0) {
  449. $hd->debt = 2;
  450. }
  451. $hd->save();
  452. if (floatval($customBalance) !== floatval($hdBalance)) {
  453. util::fail('余额错误,请联系管理员,编号' . $hdId);
  454. }
  455. $relateId = $refund->id ?? 0;
  456. $customId = $custom->id ?? 0;
  457. $refundSn = $refund->refundSn ?? '';
  458. $orderSn = $refund->orderSn ?? '';
  459. $orderId = $refund->orderId ?? 0;
  460. $order = OrderClass::getLockById($orderId);
  461. if (empty($order)) {
  462. util::fail('没有找到订单哈!');
  463. }
  464. // 多处需要同步修改 balance_pay_give
  465. $mustUseGiveAmount = 0;
  466. $buyAmount = 0;
  467. if ($payWay == 3) {
  468. //如果是欠款单售后,没有退款到赠送余额的情况
  469. $buyAmount = $amount;
  470. } elseif ($payWay == 2) {
  471. //这个是总消费余额中充值余额部分
  472. $payBalance = $order->payBalance ?? 0;
  473. //这个是累计已经退还的余额
  474. $balanceTk = $order->balanceTk ?? 0;
  475. $currentBalanceTk = bcadd($balanceTk, $amount, 2);
  476. //当前累计退还的余额如果超过了充值余额的话,说明要退还赠送的余额了
  477. if ($currentBalanceTk > $payBalance) {
  478. $pastAmount = bcsub($currentBalanceTk, $payBalance, 2);
  479. if ($pastAmount > $amount) {
  480. $mustUseGiveAmount = $amount;
  481. } else {
  482. $buyAmount = bcsub($amount, $pastAmount, 2);
  483. $mustUseGiveAmount = bcsub($amount, $buyAmount, 2);
  484. }
  485. } else {
  486. //累计退还的余额,还没超过充值余额,还是退充值余额部分
  487. $buyAmount = $amount;
  488. }
  489. } else {
  490. util::fail('无效的支付方式!编号69880');
  491. }
  492. $staffId = $refund->shopAdminId ?? 0;
  493. $staffName = $refund->shopAdminName ?? '';
  494. $capitalType = dict::getDict('capitalType', 'hdRefund', 'id');
  495. $event = "订单售后 " . $refundSn;
  496. $customName = $custom->name ?? '';
  497. $onlinePay = 1;
  498. $side = 0;
  499. $payWay = 2;//余额支付
  500. $change = [
  501. 'customId' => $customId,
  502. 'customName' => $customName,
  503. 'relateId' => $relateId,
  504. 'relateSn' => $refundSn,
  505. 'onlinePay' => $onlinePay,
  506. 'capitalType' => $capitalType,
  507. 'amount' => $amount,
  508. 'balance' => $customBalance,
  509. 'io' => 1,
  510. 'side' => $side,
  511. 'payWay' => $payWay,
  512. 'event' => $event,
  513. 'staffId' => $staffId,
  514. 'staffName' => $staffName,
  515. 'shopId' => $refund->shopId,
  516. 'mainId' => $refund->mainId,
  517. 'refundOrderId' => $orderId,
  518. 'refundOrderSn' => $orderSn,
  519. 'remark' => '',
  520. ];
  521. BalanceChangeClass::add($change, true);
  522. $order->balanceTk = bcadd($order->balanceTk, $amount, 2);
  523. if ($order->balanceTk < 0) {
  524. util::fail('不能小于0,编号88672');
  525. }
  526. $order->save();
  527. if ($buyAmount > 0) {
  528. $customBalancePay = bcadd($custom->balancePay, $buyAmount, 2);
  529. $custom->balancePay = $customBalancePay;
  530. $custom->save();
  531. $hdBalancePay = bcadd($hd->balancePay, $buyAmount, 2);
  532. $hd->balancePay = $hdBalancePay;
  533. $hd->save();
  534. $payChange = [
  535. 'customId' => $customId,
  536. 'customName' => $customName,
  537. 'relateId' => $relateId,
  538. 'relateSn' => $refundSn,
  539. 'onlinePay' => $onlinePay,
  540. 'capitalType' => $capitalType,
  541. 'amount' => $buyAmount,
  542. 'balance' => $hdBalancePay,
  543. 'io' => 1,
  544. 'side' => $side,
  545. 'payWay' => $payWay,
  546. 'event' => $event,
  547. 'staffId' => $staffId,
  548. 'staffName' => $staffName,
  549. 'shopId' => $refund->shopId,
  550. 'mainId' => $refund->mainId,
  551. 'refundOrderId' => $orderId,
  552. 'refundOrderSn' => $orderSn,
  553. 'remark' => '',
  554. ];
  555. BalancePayChangeClass::add($payChange, true);
  556. $order->payBalanceTk = bcadd($order->payBalanceTk, $buyAmount, 2);
  557. if ($order->payBalanceTk < 0) {
  558. util::fail('不能小于0,编号88673');
  559. }
  560. $order->save();
  561. }
  562. if ($mustUseGiveAmount > 0) {
  563. $customBalanceGive = bcadd($custom->balanceGive, $mustUseGiveAmount, 2);
  564. $custom->balanceGive = $customBalanceGive;
  565. $custom->save();
  566. $hdBalanceGive = bcadd($hd->balanceGive, $mustUseGiveAmount, 2);
  567. $hd->balanceGive = $hdBalanceGive;
  568. $hd->save();
  569. $giveChange = [
  570. 'customId' => $customId,
  571. 'customName' => $customName,
  572. 'relateId' => $relateId,
  573. 'relateSn' => $refundSn,
  574. 'onlinePay' => $onlinePay,
  575. 'capitalType' => $capitalType,
  576. 'amount' => $mustUseGiveAmount,
  577. 'balance' => $hdBalanceGive,
  578. 'io' => 1,
  579. 'side' => $side,
  580. 'payWay' => $payWay,
  581. 'event' => $event,
  582. 'staffId' => $staffId,
  583. 'staffName' => $staffName,
  584. 'shopId' => $refund->shopId,
  585. 'mainId' => $refund->mainId,
  586. 'refundOrderId' => $orderId,
  587. 'refundOrderSn' => $orderSn,
  588. 'remark' => '',
  589. ];
  590. BalanceGiveChangeClass::add($giveChange, true);
  591. $order->giveBalanceTk = bcadd($order->giveBalanceTk, $mustUseGiveAmount, 2);
  592. if ($order->giveBalanceTk < 0) {
  593. util::fail('不能小于0,编号88675');
  594. }
  595. $order->save();
  596. }
  597. }
  598. //添加客户 ssh 2021.2.28
  599. public static function addCustom($data)
  600. {
  601. return self::add($data, true);
  602. }
  603. //创建或获取客户信息 ssh 2021.3.19
  604. public static function buildRelation($shop, $user)
  605. {
  606. if (empty($user)) {
  607. return false;
  608. }
  609. if (empty($shop)) {
  610. return false;
  611. }
  612. if ($shop->ptStyle == 2) {
  613. util::fail('有问题,批发店状态');
  614. }
  615. $salt = stringUtil::charsShuffleLowerCase(8);
  616. $isNewCustom = 0;
  617. $userId = $user->id;
  618. $name = $user->name ?? '';
  619. $mobile = $user->mobile ?? '';
  620. $shopId = $shop->id ?? 0;
  621. $hdAvatar = $shop->avatar ?? '';
  622. $sjId = $shop->sjId ?? 0;
  623. $sjName = $shop->merchantName ?? '';
  624. $shopName = $shop->shopName ?? '';
  625. $hdMobile = $shop->mobile ?? '';
  626. $hdName = $shopName == '首店' ? $sjName : $sjName . ' ' . $shopName;
  627. $hdPy = stringUtil::py($hdName);
  628. $custom = self::getByCondition(['shopId' => $shopId, 'userId' => $userId], true);
  629. if (empty($custom)) {
  630. $py = stringUtil::py($name);
  631. $visitTime = date("Y-m-d H:i:s");
  632. $data = [
  633. 'userId' => $userId,
  634. 'sjId' => $sjId,
  635. 'shopId' => $shopId,
  636. 'name' => $name,
  637. 'originName' => $name,
  638. 'py' => $py,
  639. 'mobile' => $mobile,
  640. 'visitTime' => $visitTime,
  641. 'salt' => $salt,
  642. ];
  643. $custom = self::addCustom($data);
  644. $isNewCustom = 1;
  645. }
  646. $customId = $custom->id ?? 0;
  647. $hd = HdClass::getByCondition(['shopId' => $shopId, 'userId' => $userId], true);
  648. if (empty($hd)) {
  649. $hdData = [
  650. 'shopId' => $shopId,
  651. 'userId' => $userId,
  652. 'name' => $hdName,
  653. 'sjId' => $sjId,
  654. 'customId' => $customId,
  655. 'avatar' => $hdAvatar,
  656. 'py' => $hdPy,
  657. 'mobile' => $hdMobile,
  658. 'province' => $shop->province ?? '',
  659. 'city' => $shop->city ?? '',
  660. 'dist' => $shop->dist ?? '',
  661. 'address' => $shop->address ?? '',
  662. 'floor' => $shop->floor ?? '',
  663. 'fullAddress' => $shop->fullAddress ?? '',
  664. 'showAddress' => $shop->showAddress ?? '',
  665. 'lat' => $shop->lat ?? '',
  666. 'long' => $shop->long ?? '',
  667. 'salt' => $salt,
  668. ];
  669. $hd = HdClass::addData($hdData);
  670. $isNewCustom = 1;
  671. }
  672. $hdId = $hd->id ?? 0;
  673. $custom->hdId = $hdId;
  674. $custom->save();
  675. if ($isNewCustom == 1) {
  676. WxMessageClass::newHdCustomInform($shop, $custom);
  677. }
  678. return ['custom' => $custom, 'hd' => $hd];
  679. }
  680. //获取客户信息
  681. public static function getCustom($data)
  682. {
  683. $custom = self::getByCondition($data);
  684. if (empty($custom)) {
  685. $custom = self::add($data);
  686. }
  687. return $custom;
  688. }
  689. //获取客户信息 ssh 2021.2.1
  690. public static function getCustomInfo($id)
  691. {
  692. $custom = self::getById($id);
  693. if (empty($custom)) {
  694. return $custom;
  695. }
  696. $list = self::groupBaseInfo([$custom]);
  697. return current($list);
  698. }
  699. //获取客户信息 ssh 2021.3.19
  700. public static function getCustomByIds($ids)
  701. {
  702. $list = self::getByIds($ids);
  703. $list = self::groupBaseInfo($list);
  704. return $list;
  705. }
  706. public static function valid($info, $shopId)
  707. {
  708. if (isset($info['shopId']) && $info['shopId'] == $shopId) {
  709. return true;
  710. }
  711. util::fail('客户信息无效');
  712. }
  713. //整合基本信息 ssh 2021.1.31
  714. public static function groupBaseInfo($list)
  715. {
  716. if (empty($list)) {
  717. return $list;
  718. }
  719. foreach ($list as $key => $val) {
  720. $shortAvatar = $val['avatar'] ?? '';
  721. $avatar = imgUtil::groupImg($shortAvatar) . "?x-oss-process=image/resize,m_fill,h_800,w_800";
  722. $smallAvatar = imgUtil::groupImg($shortAvatar) . "?x-oss-process=image/resize,m_fill,h_130,w_130";
  723. $bigAvatar = imgUtil::groupImg($shortAvatar) . "?x-oss-process=image/resize,m_fill,h_700,w_700";
  724. $list[$key]['shortAvatar'] = $shortAvatar;
  725. $list[$key]['avatar'] = $avatar;
  726. $list[$key]['smallAvatar'] = $smallAvatar;
  727. $list[$key]['bigAvatar'] = $bigAvatar;
  728. //超时未下单
  729. $recentExpend = $val['recentExpend'] ?? '';
  730. $list[$key]['overTimeUnExpend'] = 0;
  731. if ($recentExpend == '0000-00-00 00:00:00') {
  732. $list[$key]['overTimeUnExpend'] = 10000;
  733. } else {
  734. $recentExpendTime = strtotime($recentExpend);
  735. $seven = bcmul(86400, 7);
  736. $sevenTime = bcadd($recentExpendTime, $seven);
  737. if ($sevenTime < time()) {
  738. $list[$key]['overTimeUnExpend'] = 7;
  739. }
  740. $month = bcmul(86400, 30);
  741. $monthTime = bcadd($recentExpendTime, $month);
  742. if ($monthTime < time()) {
  743. $list[$key]['overTimeUnExpend'] = 30;
  744. }
  745. $halfYear = bcmul(86400, 180);
  746. $halfYearTime = bcadd($recentExpendTime, $halfYear);
  747. if ($halfYearTime < time()) {
  748. $list[$key]['overTimeUnExpend'] = 180;
  749. }
  750. $year = bcmul(86400, 365);
  751. $yearTime = bcmul($recentExpendTime, $year);
  752. if ($yearTime < time()) {
  753. $list[$key]['overTimeUnExpend'] = 365;
  754. }
  755. }
  756. }
  757. return $list;
  758. }
  759. }