PullPerfDataFromCalc.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. namespace common\helpers\bonus\Calc;
  3. use common\helpers\Date;
  4. use common\models\CalcRecord;
  5. use common\models\PerfMonth;
  6. use common\models\PerfPeriod;
  7. use common\models\PerfStandard;
  8. /**
  9. * 从计算服务拉取生成的业绩单
  10. */
  11. class PullPerfDataFromCalc extends BasePerfBusiness
  12. {
  13. public function __construct($periodNum)
  14. {
  15. parent::__construct($periodNum);
  16. }
  17. public function start(): array
  18. {
  19. try {
  20. //验证状态值
  21. if ($this->verify()) {
  22. //清空业绩单相关数据
  23. $this->clearPerfPeriod();
  24. if ($this->_isCalcMonth) {
  25. //拉取月业绩
  26. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,是月结点,拉取月业绩");
  27. $this->pullPerfMonth();
  28. } else {
  29. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,不是月结点,无需拉取月业绩");
  30. }
  31. //拉取期业绩数据
  32. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,拉取期业绩");
  33. $this->pullPerfPeriod();
  34. //同步周期表的值到业务系统
  35. self::pullPeriodForUpdate($this->_periodNum);
  36. return $this->success();
  37. } else {
  38. return $this->fail('业绩单还未生成');
  39. }
  40. } catch (\Exception $e) {
  41. return $this->fail('msg:' . $e->getMessage() . 'line:' . $e->getLine());
  42. }
  43. }
  44. public function verify(): bool
  45. {
  46. $db = $this->_calc_db_name;
  47. $data = \Yii::$app->$db->createCommand("SELECT IS_PREPARE,IS_PERFED FROM AR_PERIOD where PERIOD_NUM = $this->_periodNum")->queryOne();;
  48. if (
  49. // 2 == $data['IS_PREPARE'] //计算业绩阶段
  50. // &&
  51. 1 == $data['IS_PERFED'] //1表示累计业绩已完成
  52. || 3 == $data['IS_PERFED']
  53. ) {
  54. return true;
  55. }
  56. return false;
  57. }
  58. public function clearPerfPeriod()
  59. {
  60. // 周业绩
  61. PerfPeriod::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
  62. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,AR_PERF_PERIOD表,已清除当期所有记录");
  63. // 业绩单
  64. // PerfOrder::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
  65. // 删除活跃用户
  66. // PerfActiveUser::pageDeleteAll('PERIOD_NUM='.$this->_periodNum.' AND IS_SENT=0 ');
  67. // 月结时要清空的数据
  68. if ($this->_isCalcMonth) {
  69. // 月业绩表
  70. PerfMonth::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
  71. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,是月结点,AR_PERF_MONTH表,已清除当月所有记录");
  72. //达标业绩表
  73. // PerfStandard::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
  74. } else {
  75. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,不是月结点,无需操作AR_PERF_MONTH表");
  76. }
  77. }
  78. public function pullPerfMonth(): bool
  79. {
  80. $db = $this->_calc_db_name;
  81. $_offset = 0;
  82. $countPerfMonth = 0;
  83. // $pCalcMonth = date('Y-m-d', strtotime($formatOrderData['CREATED_AT']));
  84. $pCalcMonth = Date::ociToDate($this->_calcYearMonth, Date::OCI_TIME_FORMAT_SHORT_MONTH);
  85. periodMonth:
  86. $offset = $_offset * $this->_limit;
  87. //u.EMP_LV as LAST_EMP_LV,
  88. $data = \Yii::$app->$db->createCommand("SELECT p.*,'$pCalcMonth' as P_CALC_MONTH ,u.DEC_LV as LAST_DEC_LV,
  89. ifnull(u.STATUS,0) as LAST_STATUS FROM AR_PERF_MONTH as p LEFT JOIN AR_USER AS u ON p.user_id = u.id
  90. where p.CALC_MONTH = $this->_calcYearMonth limit $this->_limit offset $offset;")->queryAll();
  91. if (!empty($data)) {
  92. $fieldArray = array_keys($data[0]);
  93. $_offset += 1;
  94. $countPerfMonth += count($data);
  95. \Yii::$app->db->createCommand()->batchInsert('AR_PERF_MONTH', $fieldArray, $data)->execute();
  96. $data = null;
  97. goto periodMonth;
  98. }
  99. CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_MONTH表,插入".$countPerfMonth."条记录");
  100. $data = null;
  101. return true;
  102. }
  103. public function pullPerfPeriod(): bool
  104. {
  105. $db = $this->_calc_db_name;
  106. $_offset = 0;
  107. $countPerfPeriod = 0;
  108. // $pCalcMonth = date('Y-m-d', strtotime($formatOrderData['CREATED_AT']));
  109. $pCalcMonth = Date::ociToDate($this->_calcYearMonth, Date::OCI_TIME_FORMAT_SHORT_MONTH);
  110. period:
  111. $offset = $_offset * $this->_limit;
  112. //u.EMP_LV as LAST_EMP_LV,
  113. $data = \Yii::$app->$db->createCommand("SELECT p.*,'$pCalcMonth' as P_CALC_MONTH ,u.DEC_LV as LAST_DEC_LV,
  114. ifnull(u.STATUS,0) as LAST_STATUS FROM AR_PERF_PERIOD as p LEFT JOIN AR_USER AS u ON p.user_id = u.id
  115. where p.PERIOD_NUM = $this->_periodNum limit $this->_limit offset $offset;")->queryAll();
  116. if (!empty($data)) {
  117. $fieldArray = array_keys($data[0]);
  118. $_offset += 1;
  119. $countPerfPeriod += count($data);
  120. \Yii::$app->db->createCommand()->batchInsert('AR_PERF_PERIOD', $fieldArray, $data)->execute();
  121. $data = null;
  122. goto period;
  123. }
  124. CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_PERIOD表,插入".$countPerfPeriod."条记录");
  125. $data = null;
  126. return true;
  127. }
  128. }