CustomClass.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. <?php
  2. namespace bizHd\custom\classes;
  3. use biz\wx\classes\WxMessageClass;
  4. use bizGhs\shop\classes\TotalDebtChangeClass;
  5. use bizHd\balance\classes\BalanceChangeClass;
  6. use bizHd\member\classes\MemberChangeClass;
  7. use bizHd\member\classes\MemberWealClass;
  8. use bizHd\order\classes\SettleClass;
  9. use bizHd\shop\classes\MainClass;
  10. use bizHd\shop\classes\ShopClass;
  11. use bizMall\user\classes\UserClass;
  12. use common\components\dict;
  13. use common\components\imgUtil;
  14. use common\components\noticeUtil;
  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. return BalanceChangeClass::add($change, true);
  81. }
  82. //会员等级变化,包括手动修改、自动降会员和充值升会员等 ssh 20250324
  83. public static function levelChange($oldLevel, $newLevel, $shop, $custom, $hd, $params)
  84. {
  85. $staffId = $params['staffId'] ?? 0;
  86. $staffName = $params['staffName'] ?? '';
  87. $style = $params['style'] ?? 0;
  88. $target = $params['target'] ?? [];
  89. $onlinePay = $params['onlinePay'] ?? 1;
  90. $rechargeAmount = $params['rechargeAmount'] ?? 0;
  91. $targetId = $target->id ?? 0;
  92. $mainId = $shop->mainId;
  93. $shopId = $shop->id;
  94. $weal = MemberWealClass::getAllByCondition(['mainId' => $mainId], null, '*', 'level');
  95. $current = $weal[$newLevel] ?? [];
  96. $before = $weal[$oldLevel] ?? [];
  97. $beforeName = $before['name'] ?? '普通客户';
  98. $discount = $current['discount'] ?? 1;
  99. $memberName = $current['name'] ?? '';
  100. $custom->member = $newLevel;
  101. $custom->discount = $discount;
  102. $custom->memberName = $memberName;
  103. $custom->save();
  104. $hd->member = $newLevel;
  105. $hd->discount = $discount;
  106. $hd->memberName = $memberName;
  107. $hd->save();
  108. $event = '手动修改';
  109. if ($style == 0) {
  110. if ($onlinePay == 2) {
  111. $event = '线上充值' . $rechargeAmount . '元';
  112. } else {
  113. $event = '线下充值' . $rechargeAmount . '元';
  114. }
  115. }
  116. $change = [
  117. 'customId' => $custom->id,
  118. 'customName' => $custom->name,
  119. 'hdId' => $hd->id,
  120. 'hdName' => $hd->name,
  121. 'mainId' => $mainId,
  122. 'shopId' => $shopId,
  123. 'targetId' => $targetId,
  124. 'rechargeAmount' => $rechargeAmount,
  125. 'days' => 0,
  126. 'daysBefore' => '0000-00-00 00:00:00',
  127. 'daysAfter' => '0000-00-00 00:00:00',
  128. 'beforeLevel' => $oldLevel,
  129. 'afterLevel' => $newLevel,
  130. 'beforeName' => $beforeName,
  131. 'afterName' => $memberName,
  132. 'style' => $style,
  133. 'event' => $event,
  134. 'staffId' => $staffId,
  135. 'staffName' => $staffName,
  136. ];
  137. MemberChangeClass::add($change);
  138. }
  139. //客户采购欠款金额增加,如果有余额时,要进行欠款销账 ssh 20250715
  140. public static function cgDebtAmountAdd($custom, $order)
  141. {
  142. $clearAmount = 0;
  143. $amount = $order->remainDebtPrice ?? 0;
  144. $staffId = $order->shopAdminId ?? 0;
  145. $staffName = $order->shopAdminName ?? '';
  146. $orderId = $order->id;
  147. $orderSn = $order->orderSn ?? '';
  148. $shopId = $order->shopId;
  149. $settleNo = '';
  150. $settleId = 0;
  151. $settleAmount = 0;
  152. $hdId = $custom->hdId ?? 0;
  153. $hd = HdClass::getLockById($hdId);
  154. if (empty($hd)) {
  155. util::fail('花店信息缺失,编号6331');
  156. }
  157. if ($custom->balance > 0) {
  158. if ($amount >= $custom->balance) {
  159. $clearAmount = $custom->balance;
  160. } else {
  161. $clearAmount = $amount;
  162. }
  163. }
  164. if ($clearAmount > 0) {
  165. $shop = ShopClass::getById($shopId, true);
  166. $needClearIdMap[] = ['orderId' => $orderId, 'clearAmount' => $clearAmount, 'orderSn' => $orderSn];
  167. $setParams = ['staffId' => $staffId, 'staffName' => $staffName];
  168. $set = SettleClass::addSettle($needClearIdMap, $shop, $custom, $hd, $setParams);
  169. $ret = SettleClass::clearSettle($set);
  170. $settleAmount = $ret['totalClearAmount'] ?? 0;
  171. $settleNo = $set->orderSn ?? '';
  172. $settleId = $set->id;
  173. }
  174. $customBalance = bcsub($custom->balance, $amount, 2);
  175. $custom->balance = $customBalance;
  176. if ($custom->balance < 0) {
  177. $custom->isDebt = 1;
  178. }
  179. $custom->save();
  180. $hdBalance = bcsub($hd->balance, $amount, 2);
  181. $hd->balance = $hdBalance;
  182. if ($hd->balance < 0) {
  183. $hd->debt = 2;
  184. }
  185. $hd->save();
  186. if (floatval($customBalance) != floatval($hdBalance)) {
  187. util::fail('余额有错,请联系管理员,编号' . $hdId);
  188. }
  189. $relateId = $order->id ?? 0;
  190. $customId = $custom->id ?? 0;
  191. $orderSn = $order->orderSn ?? '';
  192. $capitalType = dict::getDict('capitalType', 'xhOrder', 'id');
  193. $event = '购买花材,单号:' . $orderSn;
  194. $customName = $custom->name ?? '';
  195. $onlinePay = 1;
  196. $side = 0;
  197. $payWay = 0;
  198. $change = [
  199. 'customId' => $customId,
  200. 'customName' => $customName,
  201. 'relateId' => $relateId,
  202. 'onlinePay' => $onlinePay,
  203. 'capitalType' => $capitalType,
  204. 'amount' => $amount,
  205. 'balance' => $customBalance,
  206. 'io' => 0,
  207. 'side' => $side,
  208. 'payWay' => $payWay,
  209. 'event' => $event,
  210. 'staffId' => $staffId,
  211. 'staffName' => $staffName,
  212. 'shopId' => $shopId,
  213. 'mainId' => $order->mainId,
  214. 'settleId' => $settleId,
  215. 'settleNo' => $settleNo,
  216. 'settleAmount' => $settleAmount,
  217. 'remark' => '',
  218. ];
  219. BalanceChangeClass::add($change, true);
  220. }
  221. //欠款和余额支付的售后 ssh 20250803
  222. public static function refundDebtAmountReduce($custom, $amount, $refund)
  223. {
  224. $hdId = $custom->hdId ?? 0;
  225. $hd = HdClass::getLockById($hdId);
  226. if (empty($hd)) {
  227. util::fail('花店信息缺失,编号520');
  228. }
  229. $customBalance = bcadd($custom->balance, $amount, 2);
  230. $custom->balance = $customBalance;
  231. if ($custom->balance < 0) {
  232. $custom->isDebt = 1;
  233. }
  234. $custom->save();
  235. $hdBalance = bcadd($hd->balance, $amount, 2);
  236. $hd->balance = $hdBalance;
  237. if ($hd->balance < 0) {
  238. $hd->debt = 2;
  239. }
  240. $hd->save();
  241. if (floatval($customBalance) !== floatval($hdBalance)) {
  242. util::fail('余额错误,请联系管理员,编号' . $hdId);
  243. }
  244. $relateId = $refund->id ?? 0;
  245. $customId = $custom->id ?? 0;
  246. $refundSn = $refund->refundSn ?? '';
  247. $orderSn = $refund->orderSn ?? '';
  248. $orderId = $refund->orderId ?? 0;
  249. $staffId = $refund->shopAdminId ?? 0;
  250. $staffName = $refund->shopAdminName ?? '';
  251. $capitalType = dict::getDict('capitalType', 'hdRefund', 'id');
  252. $event = "订单售后 " . $refundSn;
  253. $customName = $custom->name ?? '';
  254. $onlinePay = 1;
  255. $side = 0;
  256. $payWay = 2;//余额支付
  257. $change = [
  258. 'customId' => $customId,
  259. 'customName' => $customName,
  260. 'relateId' => $relateId,
  261. 'relateSn' => $refundSn,
  262. 'onlinePay' => $onlinePay,
  263. 'capitalType' => $capitalType,
  264. 'amount' => $amount,
  265. 'balance' => $customBalance,
  266. 'io' => 1,
  267. 'side' => $side,
  268. 'payWay' => $payWay,
  269. 'event' => $event,
  270. 'staffId' => $staffId,
  271. 'staffName' => $staffName,
  272. 'shopId' => $refund->shopId,
  273. 'mainId' => $refund->mainId,
  274. 'refundOrderId' => $orderId,
  275. 'refundOrderSn' => $orderSn,
  276. 'remark' => '',
  277. ];
  278. BalanceChangeClass::add($change, true);
  279. }
  280. //添加客户 ssh 2021.2.28
  281. public static function addCustom($data)
  282. {
  283. return self::add($data, true);
  284. }
  285. //创建或获取客户信息 ssh 2021.3.19
  286. public static function buildRelation($shop, $user)
  287. {
  288. if (empty($user)) {
  289. return false;
  290. }
  291. if (empty($shop)) {
  292. return false;
  293. }
  294. if ($shop->ptStyle == 2) {
  295. util::fail('有问题,批发店状态');
  296. }
  297. $salt = stringUtil::charsShuffleLowerCase(8);
  298. $isNewCustom = 0;
  299. $userId = $user->id;
  300. $name = $user->name ?? '';
  301. $mobile = $user->mobile ?? '';
  302. $shopId = $shop->id ?? 0;
  303. $hdAvatar = $shop->avatar ?? '';
  304. $sjId = $shop->sjId ?? 0;
  305. $sjName = $shop->merchantName ?? '';
  306. $shopName = $shop->shopName ?? '';
  307. $hdMobile = $shop->mobile ?? '';
  308. $hdName = $shopName == '首店' ? $sjName : $sjName . ' ' . $shopName;
  309. $hdPy = stringUtil::py($hdName);
  310. $custom = self::getByCondition(['shopId' => $shopId, 'userId' => $userId], true);
  311. if (empty($custom)) {
  312. $py = stringUtil::py($name);
  313. $visitTime = date("Y-m-d H:i:s");
  314. $data = [
  315. 'userId' => $userId,
  316. 'sjId' => $sjId,
  317. 'shopId' => $shopId,
  318. 'name' => $name,
  319. 'originName' => $name,
  320. 'py' => $py,
  321. 'mobile' => $mobile,
  322. 'visitTime' => $visitTime,
  323. 'salt' => $salt,
  324. ];
  325. $custom = self::addCustom($data);
  326. $isNewCustom = 1;
  327. }
  328. $customId = $custom->id ?? 0;
  329. $hd = HdClass::getByCondition(['shopId' => $shopId, 'userId' => $userId], true);
  330. if (empty($hd)) {
  331. $hdData = [
  332. 'shopId' => $shopId,
  333. 'userId' => $userId,
  334. 'name' => $hdName,
  335. 'sjId' => $sjId,
  336. 'customId' => $customId,
  337. 'avatar' => $hdAvatar,
  338. 'py' => $hdPy,
  339. 'mobile' => $hdMobile,
  340. 'province' => $shop->province ?? '',
  341. 'city' => $shop->city ?? '',
  342. 'dist' => $shop->dist ?? '',
  343. 'address' => $shop->address ?? '',
  344. 'floor' => $shop->floor ?? '',
  345. 'fullAddress' => $shop->fullAddress ?? '',
  346. 'showAddress' => $shop->showAddress ?? '',
  347. 'lat' => $shop->lat ?? '',
  348. 'long' => $shop->long ?? '',
  349. 'salt' => $salt,
  350. ];
  351. $hd = HdClass::addData($hdData);
  352. $isNewCustom = 1;
  353. }
  354. $hdId = $hd->id ?? 0;
  355. $custom->hdId = $hdId;
  356. $custom->save();
  357. if ($isNewCustom == 1) {
  358. WxMessageClass::newHdCustomInform($shop, $custom);
  359. }
  360. return ['custom' => $custom, 'hd' => $hd];
  361. }
  362. //获取客户信息
  363. public static function getCustom($data)
  364. {
  365. $custom = self::getByCondition($data);
  366. if (empty($custom)) {
  367. $custom = self::add($data);
  368. }
  369. return $custom;
  370. }
  371. //获取客户信息 ssh 2021.2.1
  372. public static function getCustomInfo($id)
  373. {
  374. $custom = self::getById($id);
  375. if (empty($custom)) {
  376. return $custom;
  377. }
  378. $list = self::groupBaseInfo([$custom]);
  379. return current($list);
  380. }
  381. //获取客户信息 ssh 2021.3.19
  382. public static function getCustomByIds($ids)
  383. {
  384. $list = self::getByIds($ids);
  385. $list = self::groupBaseInfo($list);
  386. return $list;
  387. }
  388. public static function valid($info, $shopId)
  389. {
  390. if (isset($info['shopId']) && $info['shopId'] == $shopId) {
  391. return true;
  392. }
  393. util::fail('客户信息无效');
  394. }
  395. //整合基本信息 ssh 2021.1.31
  396. public static function groupBaseInfo($list)
  397. {
  398. if (empty($list)) {
  399. return $list;
  400. }
  401. foreach ($list as $key => $val) {
  402. $list[$key]['avatar'] = imgUtil::groupImg($val['avatar']);
  403. }
  404. return $list;
  405. }
  406. }