CustomBalanceChangeClass.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. <?php
  2. namespace bizGhs\custom\classes;
  3. use bizGhs\ghs\classes\GhsRechargeClass;
  4. use bizGhs\order\classes\OrderClearClass;
  5. use bizHd\purchase\classes\PurchaseClearClass;
  6. use common\components\dict;
  7. use common\components\util;
  8. use bizHd\base\classes\BaseClass;
  9. use Yii;
  10. class CustomBalanceChangeClass extends BaseClass
  11. {
  12. public static $baseFile = '\bizGhs\custom\models\CustomBalanceChange';
  13. /**
  14. * 客户余额变动列表(供货商端 CustomBalanceChangeController)
  15. * becomeBalance:本笔入账后「成为可用余额」的部分 = amount - clearAmount(对照零售 hd)
  16. */
  17. public static function getChangeList($where)
  18. {
  19. $data = self::getList('*', $where, 'addTime DESC,id DESC');
  20. if (!empty($data['list'])) {
  21. foreach ($data['list'] as $k => $v) {
  22. $v = self::fillClearAuditFromRecharge($v);
  23. $clearAmount = $v['clearAmount'] ?? 0;
  24. $amount = $v['amount'] ?? 0;
  25. $io = $v['io'] ?? 0;
  26. $becomeBalance = 0;
  27. if ($io == 1) {
  28. $becomeBalance = bcsub($amount, $clearAmount, 2);
  29. $becomeBalance = floatval($becomeBalance);
  30. }
  31. $data['list'][$k] = $v;
  32. $data['list'][$k]['becomeBalance'] = $becomeBalance;
  33. }
  34. }
  35. return $data;
  36. }
  37. /**
  38. * 入账流水补全结账单(充值清账、选订单销账-客户已转账 等)
  39. */
  40. public static function fillClearAuditFromRecharge($row)
  41. {
  42. if (empty($row) || !is_array($row)) {
  43. return $row;
  44. }
  45. if (intval($row['clearId'] ?? 0) > 0) {
  46. return self::normalizeClearAuditRow($row);
  47. }
  48. if (intval($row['io'] ?? 0) !== 1) {
  49. return $row;
  50. }
  51. $relateId = intval($row['relateId'] ?? 0);
  52. if ($relateId <= 0) {
  53. return $row;
  54. }
  55. // 旧流水:relateId 即结账单 id
  56. if (self::isClearIncomeCapitalType($row['capitalType'] ?? 0)) {
  57. return self::attachClearMetaFromClearId($row, $relateId);
  58. }
  59. if (!self::isRechargeCapitalType($row['capitalType'] ?? 0)
  60. && !self::isGhsSideRechargeCapitalType($row['capitalType'] ?? 0)) {
  61. return $row;
  62. }
  63. $recharge = self::resolveCustomRechargeForBalanceRow($row);
  64. if (!empty($recharge)) {
  65. $customId = intval(is_object($recharge) ? ($recharge->customId ?? 0) : ($recharge['customId'] ?? 0));
  66. if ($customId > 0) {
  67. $row['customId'] = $customId;
  68. }
  69. $clearId = intval(is_object($recharge) ? ($recharge->clearId ?? 0) : ($recharge['clearId'] ?? 0));
  70. if ($clearId > 0) {
  71. $row['clearId'] = $clearId;
  72. $row['clearSn'] = is_object($recharge) ? ($recharge->clearSn ?? '') : ($recharge['clearSn'] ?? '');
  73. $row['clearAmount'] = is_object($recharge) ? ($recharge->clearAmount ?? 0) : ($recharge['clearAmount'] ?? 0);
  74. return self::normalizeClearAuditRow($row);
  75. }
  76. }
  77. // 花店 xhGhsBalanceChange 禁止按金额模糊匹配,避免串到其它结账单
  78. if (self::isFloristGhsBalanceChangeRow($row)) {
  79. return $row;
  80. }
  81. // 供货商侧 CustomBalanceChange:充值单未落库 clearId 时再按金额+时间匹配
  82. return self::fillClearAuditByPaidClearMatch($row, $recharge ?? null);
  83. }
  84. /**
  85. * 供货商帮充:CustomBalanceChange.relateId=CustomRecharge.id;
  86. * 花店线上/帮充的 GhsBalanceChange.relateId=GhsRecharge.id(capitalType 常为 66 线上充)。
  87. */
  88. protected static function resolveCustomRechargeForBalanceRow(array $row)
  89. {
  90. $relateId = intval($row['relateId'] ?? 0);
  91. if ($relateId <= 0) {
  92. return null;
  93. }
  94. $capitalType = intval($row['capitalType'] ?? 0);
  95. if (self::isFloristGhsBalanceChangeRow($row) || self::isGhsSideRechargeCapitalType($capitalType)) {
  96. $ghsRecharge = GhsRechargeClass::getById($relateId, true);
  97. if (!empty($ghsRecharge)) {
  98. return self::findCustomRechargeByGhsRecharge($ghsRecharge);
  99. }
  100. }
  101. if (self::isRechargeCapitalType($capitalType)) {
  102. $customRecharge = CustomRechargeClass::getById($relateId, true);
  103. if (!empty($customRecharge)) {
  104. $linkedGhsRechargeId = intval(is_object($customRecharge)
  105. ? ($customRecharge->ghsRechargeId ?? 0)
  106. : ($customRecharge['ghsRechargeId'] ?? 0));
  107. if ($linkedGhsRechargeId <= 0 || $linkedGhsRechargeId !== $relateId) {
  108. return $customRecharge;
  109. }
  110. }
  111. $ghsRecharge = GhsRechargeClass::getById($relateId, true);
  112. if (!empty($ghsRecharge)) {
  113. return self::findCustomRechargeByGhsRecharge($ghsRecharge);
  114. }
  115. return $customRecharge ?? null;
  116. }
  117. return null;
  118. }
  119. /** 花店端 xhGhsBalanceChange:有 ghsId、无 customId */
  120. protected static function isFloristGhsBalanceChangeRow(array $row)
  121. {
  122. return intval($row['ghsId'] ?? 0) > 0 && intval($row['customId'] ?? 0) <= 0;
  123. }
  124. protected static function findCustomRechargeByGhsRecharge($ghsRecharge)
  125. {
  126. if (empty($ghsRecharge)) {
  127. return null;
  128. }
  129. $ghsRechargeId = intval(is_object($ghsRecharge) ? ($ghsRecharge->id ?? 0) : ($ghsRecharge['id'] ?? 0));
  130. if ($ghsRechargeId > 0) {
  131. $probe = new \bizGhs\custom\models\CustomRecharge();
  132. if (method_exists($probe, 'hasAttribute') && $probe->hasAttribute('ghsRechargeId')) {
  133. $linked = CustomRechargeClass::getByCondition(['ghsRechargeId' => $ghsRechargeId], true, null, 'id DESC');
  134. if (!empty($linked)) {
  135. return $linked;
  136. }
  137. }
  138. }
  139. $customId = intval(is_object($ghsRecharge) ? ($ghsRecharge->customId ?? 0) : ($ghsRecharge['customId'] ?? 0));
  140. $ghsId = intval(is_object($ghsRecharge) ? ($ghsRecharge->ghsId ?? 0) : ($ghsRecharge['ghsId'] ?? 0));
  141. $amount = bcadd((string)(is_object($ghsRecharge) ? ($ghsRecharge->amount ?? 0) : ($ghsRecharge['amount'] ?? 0)), '0', 2);
  142. if ($customId <= 0 || $ghsId <= 0 || bccomp($amount, '0', 2) <= 0) {
  143. return null;
  144. }
  145. $where = [
  146. 'customId' => $customId,
  147. 'ghsId' => $ghsId,
  148. 'amount' => $amount,
  149. ];
  150. $payTime = is_object($ghsRecharge) ? ($ghsRecharge->payTime ?? '') : ($ghsRecharge['payTime'] ?? '');
  151. if (!empty($payTime) && $payTime !== '0000-00-00 00:00:00') {
  152. $where['payTime'] = $payTime;
  153. }
  154. return CustomRechargeClass::getByCondition($where, true, null, 'id DESC');
  155. }
  156. /** 写入流水/充值单时带上结账单(有字段才写,对照 hd 充值即带 settleId) */
  157. public static function mergeClearAuditIntoRowData(array $data, array $audit)
  158. {
  159. $clearId = intval($audit['clearId'] ?? 0);
  160. if ($clearId <= 0) {
  161. return $data;
  162. }
  163. $probe = new \bizGhs\custom\models\CustomBalanceChange();
  164. if (!method_exists($probe, 'hasAttribute') || !$probe->hasAttribute('clearId')) {
  165. return $data;
  166. }
  167. $data['clearId'] = $clearId;
  168. $data['clearSn'] = (string)($audit['clearSn'] ?? '');
  169. $data['clearAmount'] = bcadd((string)($audit['clearAmount'] ?? 0), '0', 2);
  170. if ($probe->hasAttribute('giveAmount')) {
  171. $data['giveAmount'] = '0.00';
  172. }
  173. return $data;
  174. }
  175. public static function mergeClearAuditIntoRechargeData(array $data, array $audit)
  176. {
  177. $clearId = intval($audit['clearId'] ?? 0);
  178. if ($clearId <= 0) {
  179. return $data;
  180. }
  181. $probe = new \bizGhs\custom\models\CustomRecharge();
  182. if (!method_exists($probe, 'hasAttribute') || !$probe->hasAttribute('clearId')) {
  183. return $data;
  184. }
  185. $data['clearId'] = $clearId;
  186. $data['clearSn'] = (string)($audit['clearSn'] ?? '');
  187. $data['clearAmount'] = bcadd((string)($audit['clearAmount'] ?? 0), '0', 2);
  188. return $data;
  189. }
  190. protected static function attachClearMetaFromClearId(array $row, $clearId)
  191. {
  192. $clearId = intval($clearId);
  193. if ($clearId <= 0) {
  194. return $row;
  195. }
  196. $clear = OrderClearClass::getById($clearId, true);
  197. if (empty($clear)) {
  198. return $row;
  199. }
  200. $row['clearId'] = $clearId;
  201. $row['clearSn'] = is_object($clear) ? ($clear->orderSn ?? '') : ($clear['orderSn'] ?? '');
  202. $actPrice = is_object($clear) ? ($clear->actPrice ?? 0) : ($clear['actPrice'] ?? 0);
  203. $row['clearAmount'] = bcadd((string)$actPrice, '0', 2);
  204. return self::normalizeClearAuditRow($row);
  205. }
  206. /**
  207. * 充值入账与结账单关联:同客户、同实收金额、付款时间接近的已付结账单
  208. */
  209. protected static function fillClearAuditByPaidClearMatch(array $row, $recharge = null)
  210. {
  211. $customId = intval($row['customId'] ?? 0);
  212. if ($customId <= 0 && !empty($recharge)) {
  213. $customId = intval(is_object($recharge) ? ($recharge->customId ?? 0) : ($recharge['customId'] ?? 0));
  214. if ($customId > 0) {
  215. $row['customId'] = $customId;
  216. }
  217. }
  218. if ($customId <= 0) {
  219. return $row;
  220. }
  221. $amount = bcadd((string)($row['amount'] ?? 0), '0', 2);
  222. $anchorTime = (string)($row['addTime'] ?? '');
  223. if (!empty($recharge)) {
  224. $amount = bcadd((string)(is_object($recharge) ? ($recharge->amount ?? $amount) : ($recharge['amount'] ?? $amount)), '0', 2);
  225. $payTime = is_object($recharge) ? ($recharge->payTime ?? '') : ($recharge['payTime'] ?? '');
  226. if (!empty($payTime) && $payTime !== '0000-00-00 00:00:00') {
  227. $anchorTime = $payTime;
  228. }
  229. }
  230. $list = OrderClearClass::getAllByCondition([
  231. 'customId' => $customId,
  232. 'status' => PurchaseClearClass::STATUS_HAS_PAY,
  233. 'actPrice' => $amount,
  234. ], 'payTime DESC,id DESC', '*', null, true);
  235. if (empty($list)) {
  236. return $row;
  237. }
  238. $best = null;
  239. $bestDiff = null;
  240. $anchorTs = !empty($anchorTime) ? strtotime($anchorTime) : 0;
  241. foreach ($list as $clear) {
  242. $clearId = intval(is_object($clear) ? ($clear->id ?? 0) : ($clear['id'] ?? 0));
  243. if ($clearId <= 0) {
  244. continue;
  245. }
  246. if ($anchorTs <= 0) {
  247. $best = $clear;
  248. break;
  249. }
  250. $payTime = is_object($clear) ? ($clear->payTime ?? '') : ($clear['payTime'] ?? '');
  251. $payTs = !empty($payTime) ? strtotime($payTime) : 0;
  252. if ($payTs <= 0) {
  253. continue;
  254. }
  255. $diff = abs($anchorTs - $payTs);
  256. if ($bestDiff === null || $diff < $bestDiff) {
  257. $bestDiff = $diff;
  258. $best = $clear;
  259. }
  260. }
  261. if (empty($best) || $bestDiff === null || $bestDiff > 300) {
  262. return $row;
  263. }
  264. $clearId = intval(is_object($best) ? ($best->id ?? 0) : ($best['id'] ?? 0));
  265. return self::attachClearMetaFromClearId($row, $clearId);
  266. }
  267. protected static function normalizeClearAuditRow(array $row)
  268. {
  269. if (intval($row['clearId'] ?? 0) > 0 && (empty($row['clearSn']) || bccomp((string)($row['clearAmount'] ?? 0), '0', 2) <= 0)) {
  270. $row = self::attachClearMetaFromClearId($row, intval($row['clearId']));
  271. }
  272. return $row;
  273. }
  274. /** 供货商帮充 / 线上充 / 售后返充 */
  275. protected static function isRechargeCapitalType($capitalType)
  276. {
  277. $capitalType = intval($capitalType);
  278. $ids = [
  279. dict::getDict('capitalType', 'ghsHelpCustomRecharge', 'id'),
  280. dict::getDict('capitalType', 'ghsHelpCustomRechargeReturn', 'id'),
  281. dict::getDict('capitalType', 'customRechargeToGhs', 'id'),
  282. ];
  283. return in_array($capitalType, $ids, true);
  284. }
  285. /** 花店侧 xhGhsBalanceChange:relateId 为 GhsRecharge.id */
  286. protected static function isGhsSideRechargeCapitalType($capitalType)
  287. {
  288. $capitalType = intval($capitalType);
  289. $ids = [
  290. dict::getDict('capitalType', 'customAskGhsRecharge', 'id'),
  291. dict::getDict('capitalType', 'customAskGhsRechargeReturn', 'id'),
  292. ];
  293. return in_array($capitalType, $ids, true);
  294. }
  295. /** 结账类入账(relateId=结账单 id) */
  296. protected static function isClearIncomeCapitalType($capitalType)
  297. {
  298. $capitalType = intval($capitalType);
  299. $ids = [
  300. dict::getDict('capitalType', 'ghsXsClear', 'id'),
  301. dict::getDict('capitalType', 'ghsHelpCustomUseBalanceClear', 'id'),
  302. dict::getDict('capitalType', 'customAskGhsUseBalanceClear', 'id'),
  303. ];
  304. return in_array($capitalType, $ids, true);
  305. }
  306. /**
  307. * 充值销账后回写流水上的 clearId(GhsRechargeSettleService 调用)
  308. */
  309. public static function patchClearAuditByRechargeId($customId, $rechargeId, $clearId, $clearSn, $clearAmount, $finalBalance = null)
  310. {
  311. $customId = intval($customId);
  312. $rechargeId = intval($rechargeId);
  313. $clearId = intval($clearId);
  314. if ($customId <= 0 || $rechargeId <= 0 || $clearId <= 0) {
  315. return;
  316. }
  317. $row = self::getByCondition([
  318. 'customId' => $customId,
  319. 'relateId' => $rechargeId,
  320. 'io' => 1,
  321. ], true, null, 'id DESC');
  322. if (empty($row) || !method_exists($row, 'hasAttribute') || !$row->hasAttribute('clearId')) {
  323. return;
  324. }
  325. $row->clearId = $clearId;
  326. $row->clearSn = (string)$clearSn;
  327. $row->clearAmount = bcadd((string)$clearAmount, '0', 2);
  328. if ($finalBalance !== null && $row->hasAttribute('balance')) {
  329. $row->balance = $finalBalance;
  330. }
  331. if ($row->hasAttribute('giveAmount')) {
  332. $row->giveAmount = '0.00';
  333. }
  334. $row->save(false);
  335. }
  336. public static function exportData($respond, $mainId)
  337. {
  338. $orderList = $respond['list'] ?? [];
  339. if (empty($orderList)) {
  340. util::fail('没有数据需要导出');
  341. }
  342. $phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
  343. require_once($phpExcelFile . 'Classes/PHPExcel.php');
  344. $objPHPExcel = new \PHPExcel();
  345. $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
  346. ->setLastModifiedBy("Maarten Balliauw")
  347. ->setTitle("Office 2007 XLSX Document")
  348. ->setSubject("Office 2007 XLSX Document")
  349. ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
  350. ->setKeywords("office 2007 openxml php")
  351. ->setCategory("file");
  352. $ghsTitle = '余额变动记录';
  353. $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
  354. $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
  355. $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
  356. $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
  357. $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
  358. $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
  359. $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
  360. $objPHPExcel->getActiveSheet()->setCellValue('A1', 'ID');
  361. $objPHPExcel->getActiveSheet()->setCellValue('B1', '日期');
  362. $objPHPExcel->getActiveSheet()->setCellValue('C1', '客户ID');
  363. $objPHPExcel->getActiveSheet()->setCellValue('D1', '客户名称');
  364. $objPHPExcel->getActiveSheet()->setCellValue('E1', '类型');
  365. $objPHPExcel->getActiveSheet()->setCellValue('F1', '支付方式');
  366. $objPHPExcel->getActiveSheet()->setCellValue('G1', '事项');
  367. $objPHPExcel->getActiveSheet()->setCellValue('H1', '人员');
  368. $objPHPExcel->getActiveSheet()->setCellValue('I1', '变动');
  369. $objPHPExcel->getActiveSheet()->setCellValue('J1', '余额');
  370. $objPHPExcel->getActiveSheet()->setCellValue('K1', '备注');
  371. //设置宽度
  372. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  373. $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  374. $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
  375. $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
  376. $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  377. $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  378. $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  379. //加粗
  380. $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
  381. $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
  382. $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
  383. $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(9)->setBold(true);
  384. $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setSize(9)->setBold(true);
  385. $objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setSize(9)->setBold(true);
  386. $objPHPExcel->getActiveSheet()->getStyle('G1')->getFont()->setSize(9)->setBold(true);
  387. $objPHPExcel->getActiveSheet()->getStyle('H1')->getFont()->setSize(9)->setBold(true);
  388. $objPHPExcel->getActiveSheet()->getStyle('I1')->getFont()->setSize(9)->setBold(true);
  389. $objPHPExcel->getActiveSheet()->getStyle('J1')->getFont()->setSize(9)->setBold(true);
  390. $objPHPExcel->getActiveSheet()->getStyle('K1')->getFont()->setSize(9)->setBold(true);
  391. $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  392. $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  393. $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  394. $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  395. $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  396. $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  397. $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  398. $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  399. $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  400. $objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  401. $objPHPExcel->getActiveSheet()->getStyle('K1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  402. $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  403. $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  404. $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  405. $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  406. $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  407. $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  408. $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  409. $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  410. $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  411. $objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  412. $objPHPExcel->getActiveSheet()->getStyle('K1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
  413. $baseRow = 2;
  414. foreach ($orderList as $key => $order) {
  415. $i = $baseRow + $key;
  416. $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $order['id']);
  417. $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $order['addTime']);
  418. $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $order['customId']);
  419. $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $order['customName']);
  420. $capitalType = $order['capitalType'];
  421. $capName = '-';
  422. if ($capitalType == 75) {
  423. $capName = '售后返充';
  424. }
  425. if ($capitalType == 62) {
  426. $capName = '线下充值';
  427. }
  428. if ($capitalType == 66) {
  429. $capName = '线上充值';
  430. }
  431. if ($capitalType == 64) {
  432. $capName = '结账';
  433. }
  434. $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $capName);
  435. $payWay = $order['payWay'];
  436. $payName = '-';
  437. if ($capitalType == 62 || $capitalType == 66) {
  438. if ($payWay == 0) {
  439. $payName = '微信';
  440. }
  441. if ($payWay == 1) {
  442. $payName = '支付宝';
  443. }
  444. if ($payWay == 2) {
  445. $payName = '余额';
  446. }
  447. if ($payWay == 4) {
  448. $payName = '现金';
  449. }
  450. if ($payWay == 5) {
  451. $payName = '银行卡';
  452. }
  453. }
  454. $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $payName);
  455. $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $order['event']);
  456. $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $order['staffName']);
  457. $amount = isset($order['io']) && $order['io'] == 1 ? '+'.$order['amount'] : '-'.$order['amount'];
  458. $objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $amount);
  459. $objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $order['balance']);
  460. $objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $order['remark']);
  461. //居中
  462. $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  463. $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  464. $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  465. $objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  466. $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  467. $objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  468. $objPHPExcel->getActiveSheet()->getStyle('G' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  469. $objPHPExcel->getActiveSheet()->getStyle('H' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  470. $objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  471. $objPHPExcel->getActiveSheet()->getStyle('J' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  472. $objPHPExcel->getActiveSheet()->getStyle('K' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  473. }
  474. $fileName = '余额变动记录-' . time();
  475. $objPHPExcel->getActiveSheet()->setTitle($fileName);
  476. $objPHPExcel->setActiveSheetIndex(0);
  477. $dir = './priceTable/' . $mainId;
  478. if (file_exists($dir) == false) {
  479. mkdir($dir, 0777, true);
  480. }
  481. $date = $fileName;
  482. $file = $date . '.xls';
  483. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  484. if (file_exists($dir . '/' . $file)) {
  485. unlink($dir . '/' . $file);
  486. }
  487. $objWriter->save($dir . '/' . $file);
  488. $fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
  489. util::success(['file' => $fileUrl, 'shortFile' => $file]);
  490. }
  491. }