PullPerfDataFromCalc.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. $this->pullPerfMonth();
  27. }
  28. //拉取期业绩数据
  29. $this->pullPerfPeriod();
  30. //同步周期表的值到业务系统
  31. self::pullPeriodForUpdate($this->_periodNum);
  32. return $this->success();
  33. } else {
  34. return $this->fail('业绩单还未生成');
  35. }
  36. } catch (\Exception $e) {
  37. return $this->fail('msg:' . $e->getMessage() . 'line:' . $e->getLine());
  38. }
  39. }
  40. public function verify(): bool
  41. {
  42. $db = $this->_calc_db_name;
  43. $data = \Yii::$app->$db->createCommand("SELECT IS_PREPARE,IS_PERFED FROM AR_PERIOD where PERIOD_NUM = $this->_periodNum")->queryOne();;
  44. if (
  45. // 2 == $data['IS_PREPARE'] //计算业绩阶段
  46. // &&
  47. 1 == $data['IS_PERFED'] //1表示累计业绩已完成
  48. || 3 == $data['IS_PERFED']
  49. ) {
  50. return true;
  51. }
  52. return false;
  53. }
  54. public function clearPerfPeriod()
  55. {
  56. // 周业绩
  57. PerfPeriod::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
  58. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,AR_PERF_PERIOD表,已清除当期所有记录");
  59. // 业绩单
  60. // PerfOrder::pageDeleteAll('PERIOD_NUM=' . $this->_periodNum);
  61. // 删除活跃用户
  62. // PerfActiveUser::pageDeleteAll('PERIOD_NUM='.$this->_periodNum.' AND IS_SENT=0 ');
  63. // 月结时要清空的数据
  64. if ($this->_isCalcMonth) {
  65. // 月业绩表
  66. PerfMonth::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
  67. CalcRecord::record($this->_periodNum, "【期业绩】业务系统,是月结点,AR_PERF_MONTH表,已清除当月所有记录");
  68. //达标业绩表
  69. // PerfStandard::pageDeleteAll("CALC_MONTH='{$this->_calcYearMonth}'");
  70. }
  71. }
  72. public function pullPerfMonth(): bool
  73. {
  74. $db = $this->_calc_db_name;
  75. $_offset = 0;
  76. $countPerfMonth = 0;
  77. // $pCalcMonth = date('Y-m-d', strtotime($formatOrderData['CREATED_AT']));
  78. $pCalcMonth = Date::ociToDate($this->_calcYearMonth, Date::OCI_TIME_FORMAT_SHORT_MONTH);
  79. periodMonth:
  80. $offset = $_offset * $this->_limit;
  81. //u.EMP_LV as LAST_EMP_LV,
  82. $data = \Yii::$app->$db->createCommand("SELECT p.*,'$pCalcMonth' as P_CALC_MONTH ,u.DEC_LV as LAST_DEC_LV,
  83. 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
  84. where p.CALC_MONTH = $this->_calcYearMonth limit $this->_limit offset $offset;")->queryAll();
  85. if (!empty($data)) {
  86. $fieldArray = array_keys($data[0]);
  87. $_offset += 1;
  88. $countPerfMonth += count($data);
  89. \Yii::$app->db->createCommand()->batchInsert('AR_PERF_MONTH', $fieldArray, $data)->execute();
  90. $data = null;
  91. goto periodMonth;
  92. }
  93. CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_MONTH表,插入".$countPerfMonth."条记录");
  94. $data = null;
  95. return true;
  96. }
  97. public function pullPerfPeriod(): bool
  98. {
  99. $db = $this->_calc_db_name;
  100. $_offset = 0;
  101. $countPerfPeriod = 0;
  102. // $pCalcMonth = date('Y-m-d', strtotime($formatOrderData['CREATED_AT']));
  103. $pCalcMonth = Date::ociToDate($this->_calcYearMonth, Date::OCI_TIME_FORMAT_SHORT_MONTH);
  104. period:
  105. $offset = $_offset * $this->_limit;
  106. //u.EMP_LV as LAST_EMP_LV,
  107. $data = \Yii::$app->$db->createCommand("SELECT p.*,'$pCalcMonth' as P_CALC_MONTH ,u.DEC_LV as LAST_DEC_LV,
  108. 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
  109. where p.PERIOD_NUM = $this->_periodNum limit $this->_limit offset $offset;")->queryAll();
  110. if (!empty($data)) {
  111. $fieldArray = array_keys($data[0]);
  112. $_offset += 1;
  113. $countPerfPeriod += count($data);
  114. \Yii::$app->db->createCommand()->batchInsert('AR_PERF_PERIOD', $fieldArray, $data)->execute();
  115. $data = null;
  116. goto period;
  117. }
  118. CalcRecord::record($this->_periodNum,"【生成业绩单】业务系统,AR_PERF_PERIOD表,插入".$countPerfPeriod."条记录");
  119. $data = null;
  120. return true;
  121. }
  122. }