CustomClass.php 30 KB

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