StatCgClass.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. namespace bizGhs\stat\classes;
  3. use bizGhs\order\classes\PurchaseOrderClass;
  4. use bizGhs\order\classes\PurchaseOrderItemClass;
  5. use bizGhs\product\classes\ProductClass;
  6. use common\components\arrayUtil;
  7. use common\components\dateUtil;
  8. use common\components\util;
  9. use Yii;
  10. use bizGhs\base\classes\BaseClass;
  11. class StatCgClass extends BaseClass
  12. {
  13. public static function statCg($mainId)
  14. {
  15. $get = Yii::$app->request->get();
  16. $where = [];
  17. $where['mainId'] = $mainId;
  18. $searchTime = isset($get['searchTime']) && !empty($get['searchTime']) ? $get['searchTime'] : 'today';
  19. $startTime = $get['startTime'] ?? '';
  20. $endTime = $get['endTime'] ?? '';
  21. $period = dateUtil::formatTime($searchTime, $startTime, $endTime, true);
  22. $start = $period['startTime'];
  23. $end = $period['endTime'];
  24. $where['time'] = ['between', [$start, $end]];
  25. $currentStartDate = date('Y-m-d', strtotime($start));
  26. $currentEndDate = date('Y-m-d', strtotime($end));
  27. $currentStartTime = $currentStartDate . ' 00:00:00';
  28. $currentEndTime = $currentEndDate . ' 23:59:59';
  29. $sort = $get['sort'] ?? 'num';
  30. $rank = 'num';
  31. if ($sort == 'amount') {
  32. $rank = 'amount';
  33. }
  34. $productInfo = ProductClass::getAllByCondition(['mainId' => $mainId], null, 'id,name,py', 'id');
  35. $cgWhere = ['mainId' => $mainId, 'status' => 4];
  36. $cgWhere['entryTime'] = ['between', [$currentStartTime, $currentEndTime]];
  37. $cgList = PurchaseOrderClass::getAllByCondition($cgWhere, null, '*');
  38. $arr = [];
  39. $cgData = [];
  40. if (!empty($cgList)) {
  41. foreach ($cgList as $cgKey => $cgInfo) {
  42. $orderSn = $cgInfo['orderSn'] ?? '';
  43. $cgStaffId = $cgInfo['cgStaffId'] ?? 0;
  44. $cgStaffName = $cgInfo['cgStaffName'] ?? '';
  45. $itemList = PurchaseOrderItemClass::getAllByCondition(['orderSn' => $orderSn], null, '*', null, true);
  46. if (!empty($itemList)) {
  47. foreach ($itemList as $key => $val) {
  48. $productId = $val->productId ?? 0;
  49. $num = $val->itemNum ?? 0;
  50. $refundNum = $val->refundNum ?? 0;
  51. $remainNum = bcsub($num, $refundNum);
  52. $unitPrice = $val->bigPrice ?? 0;
  53. $name = $productInfo[$productId]['name'] ?? '';
  54. $py = $productInfo[$productId]['py'] ?? '';
  55. $totalPrice = bcmul($remainNum, $unitPrice, 2);
  56. if (isset($arr[$productId])) {
  57. $arr[$productId]['num'] = bcadd($arr[$productId]['num'], $remainNum);
  58. $arr[$productId]['amount'] = bcadd($arr[$productId]['amount'], $totalPrice, 2);
  59. } else {
  60. $arr[$productId]['num'] = $remainNum;
  61. $arr[$productId]['amount'] = $totalPrice;
  62. $arr[$productId]['py'] = $py;
  63. $arr[$productId]['name'] = $name;
  64. }
  65. if (isset($cgData[$cgStaffId])) {
  66. $cgData[$cgStaffId]['amount'] = bcadd($cgData[$cgStaffId]['amount'], $totalPrice, 2);
  67. $cgData[$cgStaffId]['itemNum'] = bcadd($cgData[$cgStaffId]['itemNum'], $remainNum);
  68. } else {
  69. $cgData[$cgStaffId]['cgStaffId'] = $cgStaffId;
  70. $cgData[$cgStaffId]['cgStaffName'] = $cgStaffName;
  71. $cgData[$cgStaffId]['amount'] = $totalPrice;
  72. $cgData[$cgStaffId]['num'] = 0;
  73. $cgData[$cgStaffId]['itemNum'] = $remainNum;
  74. }
  75. }
  76. if (isset($cgData[$cgStaffId])) {
  77. $cgData[$cgStaffId]['num'] = bcadd($cgData[$cgStaffId]['num'], 1);
  78. } else {
  79. $cgData[$cgStaffId]['num'] = 1;
  80. }
  81. }
  82. }
  83. }
  84. if (!empty($arr)) {
  85. $arr = array_values($arr);
  86. $arr = arrayUtil::arraySort($arr, $rank);
  87. }
  88. if (!empty($cgData)) {
  89. $cgData = array_values($cgData);
  90. }
  91. $export = $get['export']??0;
  92. if($export == 1){
  93. self::exportCgItem($arr,$mainId);
  94. }
  95. return ['itemList' => $arr, 'staffCg' => $cgData];
  96. }
  97. public static function exportCgItem($list, $mainId)
  98. {
  99. $phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
  100. require_once($phpExcelFile . 'Classes/PHPExcel.php');
  101. $objPHPExcel = new \PHPExcel();
  102. $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
  103. ->setLastModifiedBy("Maarten Balliauw")
  104. ->setTitle("Office 2007 XLSX Document")
  105. ->setSubject("Office 2007 XLSX Document")
  106. ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
  107. ->setKeywords("office 2007 openxml php")
  108. ->setCategory("file");
  109. $ghsTitle = '供货商';
  110. $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
  111. $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
  112. $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
  113. $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
  114. $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
  115. $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
  116. $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
  117. $objPHPExcel->getActiveSheet()->setCellValue('A1', '名称');
  118. $objPHPExcel->getActiveSheet()->setCellValue('B1', '数量');
  119. $objPHPExcel->getActiveSheet()->setCellValue('C1', '金额');
  120. //设置宽度
  121. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  122. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  123. $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
  124. //加粗
  125. $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
  126. $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
  127. $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
  128. $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  129. $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  130. $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  131. $baseRow = 2;
  132. foreach ($list as $key => $custom) {
  133. $i = $baseRow + $key;
  134. $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $custom['name']);
  135. $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $custom['num']);
  136. $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $custom['amount']);
  137. //居左
  138. $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  139. $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  140. $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  141. }
  142. $fileName = '采购花材-' . date("m-d");
  143. $objPHPExcel->getActiveSheet()->setTitle($fileName);
  144. $objPHPExcel->setActiveSheetIndex(0);
  145. $dir = './priceTable/' . $mainId;
  146. if (file_exists($dir) == false) {
  147. mkdir($dir, 0777, true);
  148. }
  149. $date = $fileName;
  150. $file = $date . '.xls';
  151. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  152. if (file_exists($dir . '/' . $file)) {
  153. unlink($dir . '/' . $file);
  154. }
  155. $objWriter->save($dir . '/' . $file);
  156. $fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
  157. util::success(['file' => $fileUrl, 'shortFile' => $file]);
  158. }
  159. //采购人业绩 ssh 20240412
  160. public static function statCgYj($mainId)
  161. {
  162. $get = Yii::$app->request->get();
  163. $where = [];
  164. $where['mainId'] = $mainId;
  165. $searchTime = isset($get['searchTime']) && !empty($get['searchTime']) ? $get['searchTime'] : 'today';
  166. $startTime = $get['startTime'] ?? '';
  167. $endTime = $get['endTime'] ?? '';
  168. $period = dateUtil::formatTime($searchTime, $startTime, $endTime, true);
  169. $start = $period['startTime'];
  170. $end = $period['endTime'];
  171. $where['time'] = ['between', [$start, $end]];
  172. $currentStartDate = date('Y-m-d', strtotime($start));
  173. $currentEndDate = date('Y-m-d', strtotime($end));
  174. $currentStartTime = $currentStartDate . ' 00:00:00';
  175. $currentEndTime = $currentEndDate . ' 23:59:59';
  176. $cgWhere = ['mainId' => $mainId, 'status' => 4];
  177. $cgWhere['entryTime'] = ['between', [$currentStartTime, $currentEndTime]];
  178. $cgList = PurchaseOrderClass::getAllByCondition($cgWhere, null, '*');
  179. $cgData = [];
  180. if (!empty($cgList)) {
  181. foreach ($cgList as $cgKey => $cgInfo) {
  182. $cgStaffId = $cgInfo['cgStaffId'] ?? 0;
  183. $cgStaffName = $cgInfo['cgStaffName'] ?? '';
  184. $actPrice = $cgInfo['actPrice'] ?? 0;
  185. if (isset($cgData[$cgStaffId])) {
  186. $cgData[$cgStaffId]['amount'] = bcadd($cgData[$cgStaffId]['amount'], $actPrice, 2);
  187. $cgData[$cgStaffId]['num'] = bcadd($cgData[$cgStaffId]['num'], 1);
  188. } else {
  189. $cgData[$cgStaffId]['cgStaffId'] = $cgStaffId;
  190. $cgData[$cgStaffId]['cgStaffName'] = $cgStaffName;
  191. $cgData[$cgStaffId]['amount'] = $actPrice;
  192. $cgData[$cgStaffId]['num'] = 1;
  193. }
  194. }
  195. }
  196. if (!empty($cgData)) {
  197. $cgData = array_values($cgData);
  198. }
  199. return ['staffCg' => $cgData];
  200. }
  201. }