初始上传
This commit is contained in:
432
addon/scenefestival/model/DayService.php
Executable file
432
addon/scenefestival/model/DayService.php
Executable file
@@ -0,0 +1,432 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/11/25
|
||||
* Time: 17:42
|
||||
*/
|
||||
|
||||
namespace addon\scenefestival\model;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
class DayService extends BaseModel
|
||||
{
|
||||
var $MIN_YEAR = 1891;
|
||||
var $MAX_YEAR = 2100;
|
||||
var $lunarInfo = array (
|
||||
array ( 0, 2, 9, 21936 ), array ( 6, 1, 30, 9656 ), array ( 0, 2, 17, 9584 ), array ( 0, 2, 6, 21168 ), array ( 5, 1, 26, 43344 ), array ( 0, 2, 13, 59728 ),
|
||||
array ( 0, 2, 2, 27296 ), array ( 3, 1, 22, 44368 ), array ( 0, 2, 10, 43856 ), array ( 8, 1, 30, 19304 ), array ( 0, 2, 19, 19168 ), array ( 0, 2, 8, 42352 ),
|
||||
array ( 5, 1, 29, 21096 ), array ( 0, 2, 16, 53856 ), array ( 0, 2, 4, 55632 ), array ( 4, 1, 25, 27304 ), array ( 0, 2, 13, 22176 ), array ( 0, 2, 2, 39632 ),
|
||||
array ( 2, 1, 22, 19176 ), array ( 0, 2, 10, 19168 ), array ( 6, 1, 30, 42200 ), array ( 0, 2, 18, 42192 ), array ( 0, 2, 6, 53840 ), array ( 5, 1, 26, 54568 ),
|
||||
array ( 0, 2, 14, 46400 ), array ( 0, 2, 3, 54944 ), array ( 2, 1, 23, 38608 ), array ( 0, 2, 11, 38320 ), array ( 7, 2, 1, 18872 ), array ( 0, 2, 20, 18800 ),
|
||||
array ( 0, 2, 8, 42160 ), array ( 5, 1, 28, 45656 ), array ( 0, 2, 16, 27216 ), array ( 0, 2, 5, 27968 ), array ( 4, 1, 24, 44456 ), array ( 0, 2, 13, 11104 ),
|
||||
array ( 0, 2, 2, 38256 ), array ( 2, 1, 23, 18808 ), array ( 0, 2, 10, 18800 ), array ( 6, 1, 30, 25776 ), array ( 0, 2, 17, 54432 ), array ( 0, 2, 6, 59984 ),
|
||||
array ( 5, 1, 26, 27976 ), array ( 0, 2, 14, 23248 ), array ( 0, 2, 4, 11104 ), array ( 3, 1, 24, 37744 ), array ( 0, 2, 11, 37600 ), array ( 7, 1, 31, 51560 ),
|
||||
array ( 0, 2, 19, 51536 ), array ( 0, 2, 8, 54432 ), array ( 6, 1, 27, 55888 ), array ( 0, 2, 15, 46416 ), array ( 0, 2, 5, 22176 ), array ( 4, 1, 25, 43736 ),
|
||||
array ( 0, 2, 13, 9680 ), array ( 0, 2, 2, 37584 ), array ( 2, 1, 22, 51544 ), array ( 0, 2, 10, 43344 ), array ( 7, 1, 29, 46248 ), array ( 0, 2, 17, 27808 ),
|
||||
array ( 0, 2, 6, 46416 ), array ( 5, 1, 27, 21928 ), array ( 0, 2, 14, 19872 ), array ( 0, 2, 3, 42416 ), array ( 3, 1, 24, 21176 ), array ( 0, 2, 12, 21168 ),
|
||||
array ( 8, 1, 31, 43344 ), array ( 0, 2, 18, 59728 ), array ( 0, 2, 8, 27296 ), array ( 6, 1, 28, 44368 ), array ( 0, 2, 15, 43856 ), array ( 0, 2, 5, 19296 ),
|
||||
array ( 4, 1, 25, 42352 ), array ( 0, 2, 13, 42352 ), array ( 0, 2, 2, 21088 ), array ( 3, 1, 21, 59696 ), array ( 0, 2, 9, 55632 ), array ( 7, 1, 30, 23208 ),
|
||||
array ( 0, 2, 17, 22176 ), array ( 0, 2, 6, 38608 ), array ( 5, 1, 27, 19176 ), array ( 0, 2, 15, 19152 ), array ( 0, 2, 3, 42192 ), array ( 4, 1, 23, 53864 ),
|
||||
array ( 0, 2, 11, 53840 ), array ( 8, 1, 31, 54568 ), array ( 0, 2, 18, 46400 ), array ( 0, 2, 7, 46752 ), array ( 6, 1, 28, 38608 ), array ( 0, 2, 16, 38320 ),
|
||||
array ( 0, 2, 5, 18864 ), array ( 4, 1, 25, 42168 ), array ( 0, 2, 13, 42160 ), array ( 10, 2, 2, 45656 ), array ( 0, 2, 20, 27216 ), array ( 0, 2, 9, 27968 ),
|
||||
array ( 6, 1, 29, 44448 ), array ( 0, 2, 17, 43872 ), array ( 0, 2, 6, 38256 ), array ( 5, 1, 27, 18808 ), array ( 0, 2, 15, 18800 ), array ( 0, 2, 4, 25776 ),
|
||||
array ( 3, 1, 23, 27216 ), array ( 0, 2, 10, 59984 ), array ( 8, 1, 31, 27432 ), array ( 0, 2, 19, 23232 ), array ( 0, 2, 7, 43872 ), array ( 5, 1, 28, 37736 ),
|
||||
array ( 0, 2, 16, 37600 ), array ( 0, 2, 5, 51552 ), array ( 4, 1, 24, 54440 ), array ( 0, 2, 12, 54432 ), array ( 0, 2, 1, 55888 ), array ( 2, 1, 22, 23208 ),
|
||||
array ( 0, 2, 9, 22176 ), array ( 7, 1, 29, 43736 ), array ( 0, 2, 18, 9680 ), array ( 0, 2, 7, 37584 ), array ( 5, 1, 26, 51544 ), array ( 0, 2, 14, 43344 ),
|
||||
array ( 0, 2, 3, 46240 ), array ( 4, 1, 23, 46416 ), array ( 0, 2, 10, 44368 ), array ( 9, 1, 31, 21928 ), array ( 0, 2, 19, 19360 ), array ( 0, 2, 8, 42416 ),
|
||||
array ( 6, 1, 28, 21176 ), array ( 0, 2, 16, 21168 ), array ( 0, 2, 5, 43312 ), array ( 4, 1, 25, 29864 ), array ( 0, 2, 12, 27296 ), array ( 0, 2, 1, 44368 ),
|
||||
array ( 2, 1, 22, 19880 ), array ( 0, 2, 10, 19296 ), array ( 6, 1, 29, 42352 ), array ( 0, 2, 17, 42208 ), array ( 0, 2, 6, 53856 ), array ( 5, 1, 26, 59696 ),
|
||||
array ( 0, 2, 13, 54576 ), array ( 0, 2, 3, 23200 ), array ( 3, 1, 23, 27472 ), array ( 0, 2, 11, 38608 ), array ( 11, 1, 31, 19176 ), array ( 0, 2, 19, 19152 ),
|
||||
array ( 0, 2, 8, 42192 ), array ( 6, 1, 28, 53848 ), array ( 0, 2, 15, 53840 ), array ( 0, 2, 4, 54560 ), array ( 5, 1, 24, 55968 ), array ( 0, 2, 12, 46496 ),
|
||||
array ( 0, 2, 1, 22224 ), array ( 2, 1, 22, 19160 ), array ( 0, 2, 10, 18864 ), array ( 7, 1, 30, 42168 ), array ( 0, 2, 17, 42160 ), array ( 0, 2, 6, 43600 ),
|
||||
array ( 5, 1, 26, 46376 ), array ( 0, 2, 14, 27936 ), array ( 0, 2, 2, 44448 ), array ( 3, 1, 23, 21936 ), array ( 0, 2, 11, 37744 ), array ( 8, 2, 1, 18808 ),
|
||||
array ( 0, 2, 19, 18800 ), array ( 0, 2, 8, 25776 ), array ( 6, 1, 28, 27216 ), array ( 0, 2, 15, 59984 ), array ( 0, 2, 4, 27424 ), array ( 4, 1, 24, 43872 ),
|
||||
array ( 0, 2, 12, 43744 ), array ( 0, 2, 2, 37600 ), array ( 3, 1, 21, 51568 ), array ( 0, 2, 9, 51552 ), array ( 7, 1, 29, 54440 ), array ( 0, 2, 17, 54432 ),
|
||||
array ( 0, 2, 5, 55888 ), array ( 5, 1, 26, 23208 ), array ( 0, 2, 14, 22176 ), array ( 0, 2, 3, 42704 ), array ( 4, 1, 23, 21224 ), array ( 0, 2, 11, 21200 ),
|
||||
array ( 8, 1, 31, 43352 ), array ( 0, 2, 19, 43344 ), array ( 0, 2, 7, 46240 ), array ( 6, 1, 27, 46416 ), array ( 0, 2, 15, 44368 ), array ( 0, 2, 5, 21920 ),
|
||||
array ( 4, 1, 24, 42448 ), array ( 0, 2, 12, 42416 ), array ( 0, 2, 2, 21168 ), array ( 3, 1, 22, 43320 ), array ( 0, 2, 9, 26928 ), array ( 7, 1, 29, 29336 ),
|
||||
array ( 0, 2, 17, 27296 ), array ( 0, 2, 6, 44368 ), array ( 5, 1, 26, 19880 ), array ( 0, 2, 14, 19296 ), array ( 0, 2, 3, 42352 ), array ( 4, 1, 24, 21104 ),
|
||||
array ( 0, 2, 10, 53856 ), array ( 8, 1, 30, 59696 ), array ( 0, 2, 18, 54560 ), array ( 0, 2, 7, 55968 ), array ( 6, 1, 27, 27472 ), array ( 0, 2, 15, 22224 ),
|
||||
array ( 0, 2, 5, 19168 ), array ( 4, 1, 25, 42216 ), array ( 0, 2, 12, 42192 ), array ( 0, 2, 1, 53584 ), array ( 2, 1, 21, 55592 ), array ( 0, 2, 9, 54560 )
|
||||
);
|
||||
|
||||
/**
|
||||
* 将阳历转换为阴历
|
||||
* @param year 公历-年
|
||||
* @param month 公历-月
|
||||
* @param date 公历-日
|
||||
*/
|
||||
function convertSolarToLunar($year, $month, $date)
|
||||
{
|
||||
//debugger;
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) return array ( 1891, '正月', '初一', '辛卯', 1, 1, '兔' );
|
||||
return $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $date, $yearData[ 1 ], $yearData[ 2 ]));
|
||||
}
|
||||
|
||||
function convertSolarMonthToLunar($year, $month, $date)
|
||||
{
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) return array ( 1891, '正月', '初一', '辛卯', 1, 1, '兔' );
|
||||
$month_days_ary = array ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
|
||||
$dd = $month_days_ary[ $month ];
|
||||
if ($this->isLeapYear($year) && $month == 2) $dd++;
|
||||
$lunar_ary = array ();
|
||||
for ($i = 1; $i < $dd; $i++) {
|
||||
$array = $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $i, $yearData[ 1 ], $yearData[ 2 ]));
|
||||
$array[] = $year . '-' . $month . '-' . $i;
|
||||
$lunar_ary[ $i ] = $array;
|
||||
}
|
||||
return $lunar_ary;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将阴历转换为阳历
|
||||
* @param year 阴历-年
|
||||
* @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0
|
||||
* @param date 阴历-日
|
||||
*/
|
||||
function convertLunarToSolar($year, $month, $date)
|
||||
{
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
$between = $this->getDaysBetweenLunar($year, $month, $date);
|
||||
$res = mktime(0, 0, 0, $yearData[ 1 ], $yearData[ 2 ], $year);
|
||||
$res = date('Y-m-d', $res + $between * 24 * 60 * 60);
|
||||
$day = explode('-', $res);
|
||||
$year = $day[ 0 ];
|
||||
$month = $day[ 1 ];
|
||||
$day = $day[ 2 ];
|
||||
return array ( $year, $month, $day );
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否是闰年
|
||||
* @param year
|
||||
*/
|
||||
function isLeapYear($year)
|
||||
{
|
||||
return ( ( $year % 4 == 0 && $year % 100 != 0 ) || ( $year % 400 == 0 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取干支纪年
|
||||
* @param year
|
||||
*/
|
||||
function getLunarYearName($year)
|
||||
{
|
||||
$sky = array ( '庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己' );
|
||||
$earth = array ( '申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未' );
|
||||
$year = $year . '';
|
||||
return $sky[ $year{3} ] . $earth[ $year % 12 ];
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据阴历年获取生肖
|
||||
* @param year 阴历年
|
||||
*/
|
||||
function getYearZodiac($year)
|
||||
{
|
||||
$zodiac = array ( '猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊' );
|
||||
return $zodiac[ $year % 12 ];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取阳历月份的天数
|
||||
* @param year 阳历-年
|
||||
* @param month 阳历-月
|
||||
*/
|
||||
function getSolarMonthDays($year, $month)
|
||||
{
|
||||
$monthHash = array ( '1' => 31, '2' => $this->isLeapYear($year) ? 29 : 28, '3' => 31, '4' => 30, '5' => 31, '6' => 30, '7' => 31, '8' => 31, '9' => 30, '10' => 31, '11' => 30, '12' => 31 );
|
||||
return $monthHash[ "$month" ];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取阴历月份的天数
|
||||
* @param year 阴历-年
|
||||
* @param month 阴历-月,从一月开始
|
||||
*/
|
||||
function getLunarMonthDays($year, $month)
|
||||
{
|
||||
$monthData = $this->getLunarMonths($year);
|
||||
return $monthData[ $month - 1 ];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取阴历每月的天数的数组
|
||||
* @param year
|
||||
*/
|
||||
function getLunarMonths($year)
|
||||
{
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
$leapMonth = $yearData[ 0 ];
|
||||
$bit = decbin($yearData[ 3 ]);
|
||||
for ($i = 0; $i < strlen($bit); $i++) $bitArray[ $i ] = substr($bit, $i, 1);
|
||||
for ($k = 0, $klen = 16 - count($bitArray); $k < $klen; $k++) array_unshift($bitArray, '0');
|
||||
$bitArray = array_slice($bitArray, 0, ( $leapMonth == 0 ? 12 : 13 ));
|
||||
for ($i = 0; $i < count($bitArray); $i++) $bitArray[ $i ] = $bitArray[ $i ] + 29;
|
||||
return $bitArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取农历每年的天数
|
||||
* @param year 农历年份
|
||||
*/
|
||||
function getLunarYearDays($year)
|
||||
{
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
$monthArray = $this->getLunarYearMonths($year);
|
||||
$len = count($monthArray);
|
||||
return ( $monthArray[ $len - 1 ] == 0 ? $monthArray[ $len - 2 ] : $monthArray[ $len - 1 ] );
|
||||
}
|
||||
|
||||
function getLunarYearMonths($year)
|
||||
{
|
||||
//debugger;
|
||||
$monthData = $this->getLunarMonths($year);
|
||||
$res = array ();
|
||||
$temp = 0;
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
$len = ( $yearData[ 0 ] == 0 ? 12 : 13 );
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
$temp = 0;
|
||||
for ($j = 0; $j <= $i; $j++) $temp += $monthData[ $j ];
|
||||
$res[] = $temp;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取闰月
|
||||
* @param year 阴历年份
|
||||
*/
|
||||
function getLeapMonth($year)
|
||||
{
|
||||
$yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
|
||||
return $yearData[ 0 ];
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算阴历日期与正月初一相隔的天数
|
||||
* @param year
|
||||
* @param month
|
||||
* @param date
|
||||
*/
|
||||
function getDaysBetweenLunar($year, $month, $date)
|
||||
{
|
||||
$yearMonth = $this->getLunarMonths($year);
|
||||
$res = 0;
|
||||
for ($i = 1; $i < $month; $i++) $res += $yearMonth[ $i - 1 ];
|
||||
$res += $date - 1;
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算2个阳历日期之间的天数
|
||||
* @param year 阳历年
|
||||
* @param cmonth
|
||||
* @param cdate
|
||||
* @param dmonth 阴历正月对应的阳历月份
|
||||
* @param ddate 阴历初一对应的阳历天数
|
||||
*/
|
||||
function getDaysBetweenSolar($year, $cmonth, $cdate, $dmonth, $ddate)
|
||||
{
|
||||
$a = mktime(0, 0, 0, $cmonth, $cdate, $year);
|
||||
$b = mktime(0, 0, 0, $dmonth, $ddate, $year);
|
||||
return ceil(( $a - $b ) / 24 / 3600);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据距离正月初一的天数计算阴历日期
|
||||
* @param year 阳历年
|
||||
* @param between 天数
|
||||
*/
|
||||
function getLunarByBetween($year, $between)
|
||||
{
|
||||
//debugger;
|
||||
$lunarArray = array ();
|
||||
$yearMonth = array ();
|
||||
$t = 0;
|
||||
$e = 0;
|
||||
$leapMonth = 0;
|
||||
$m = '';
|
||||
if ($between == 0) {
|
||||
array_push($lunarArray, $year, '01', '01');
|
||||
$t = 1;
|
||||
$e = 1;
|
||||
} else {
|
||||
$year = $between > 0 ? $year : ( $year - 1 );
|
||||
$yearMonth = $this->getLunarYearMonths($year);
|
||||
$leapMonth = $this->getLeapMonth($year);
|
||||
$between = $between > 0 ? $between : ( $this->getLunarYearDays($year) + $between );
|
||||
for ($i = 0; $i < 13; $i++) {
|
||||
if ($between == $yearMonth[ $i ]) {
|
||||
$t = $i + 2;
|
||||
$e = 1;
|
||||
break;
|
||||
} else if ($between < $yearMonth[ $i ]) {
|
||||
$t = $i + 1;
|
||||
$e = $between - ( empty($yearMonth[ $i - 1 ]) ? 0 : $yearMonth[ $i - 1 ] ) + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$m = ( $leapMonth != 0 && $t == $leapMonth + 1 ) ? ( '闰' . $this->getCapitalNum($t - 1, true) ) : $this->getCapitalNum(( $leapMonth != 0 && $leapMonth + 1 < $t ? ( $t - 1 ) : $t ), true);
|
||||
|
||||
array_push($lunarArray, $year, $m, $this->getCapitalNum($e, false));
|
||||
}
|
||||
|
||||
$lunarArray[] = $this->getLunarYearName($year);// 天干地支
|
||||
array_push($lunarArray, $t, $e);
|
||||
$lunarArray[] = $this->getYearZodiac($year);// 12生肖
|
||||
$lunarArray[] = $leapMonth;// 闰几月
|
||||
|
||||
return $lunarArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数字的阴历叫法
|
||||
* @param num 数字
|
||||
* @param isMonth 是否是月份的数字
|
||||
*/
|
||||
function getCapitalNum($num, $isMonth)
|
||||
{
|
||||
$isMonth = $isMonth || false;
|
||||
$dateHash = array ( '0' => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10' );
|
||||
$monthHash = array ( '0' => '', '1' => '01', '2' => '02', '3' => '03', '4' => '04', '5' => '05', '6' => '06', '7' => '07', '8' => '08', '9' => '09', '10' => '10', '11' => '11', '12' => '12' );
|
||||
$res = '';
|
||||
if ($isMonth) $res = $monthHash[ $num ];
|
||||
else {
|
||||
if ($num <= 10) $res = '0' . $dateHash[ $num ];
|
||||
else if ($num > 10 && $num < 20) $res = '1' . $dateHash[ $num - 10 ];
|
||||
else if ($num == 20) $res = '20';
|
||||
else if ($num > 20 && $num < 30) $res = '2' . $dateHash[ $num - 20 ];
|
||||
else if ($num == 30) $res = '30';
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/*
|
||||
* 节气通用算法
|
||||
*/
|
||||
function getJieQi($_year, $month, $day)
|
||||
{
|
||||
$year = substr($_year, -2) + 0;
|
||||
$coefficient = array (
|
||||
array ( 5.4055, 2019, -1 ),//小寒
|
||||
array ( 20.12, 2082, 1 ),//大寒
|
||||
array ( 3.87 ),//立春
|
||||
array ( 18.74, 2026, -1 ),//雨水
|
||||
array ( 5.63 ),//惊蛰
|
||||
array ( 20.646, 2084, 1 ),//春分
|
||||
array ( 4.81 ),//清明
|
||||
array ( 20.1 ),//谷雨
|
||||
array ( 5.52, 1911, 1 ),//立夏
|
||||
array ( 21.04, 2008, 1 ),//小满
|
||||
array ( 5.678, 1902, 1 ),//芒种
|
||||
array ( 21.37, 1928, 1 ),//夏至
|
||||
array ( 7.108, 2016, 1 ),//小暑
|
||||
array ( 22.83, 1922, 1 ),//大暑
|
||||
array ( 7.5, 2002, 1 ),//立秋
|
||||
array ( 23.13 ),//处暑
|
||||
array ( 7.646, 1927, 1 ),//白露
|
||||
array ( 23.042, 1942, 1 ),//秋分
|
||||
array ( 8.318 ),//寒露
|
||||
array ( 23.438, 2089, 1 ),//霜降
|
||||
array ( 7.438, 2089, 1 ),//立冬
|
||||
array ( 22.36, 1978, 1 ),//小雪
|
||||
array ( 7.18, 1954, 1 ),//大雪
|
||||
array ( 21.94, 2021, -1 )//冬至
|
||||
);
|
||||
$term_name = array (
|
||||
'小寒', '大寒', '立春', '雨水', '惊蛰', '春分', '清明', '谷雨',
|
||||
'立夏', '小满', '芒种', '夏至', '小暑', '大暑', '立秋', '处暑',
|
||||
'白露', '秋分', '寒露', '霜降', '立冬', '小雪', '大雪', '冬至');
|
||||
$idx1 = ( $month - 1 ) * 2;
|
||||
$_leap_value = floor(( $year - 1 ) / 4);
|
||||
$day1 = floor($year * 0.2422 + $coefficient[ $idx1 ][ 0 ]) - $_leap_value;
|
||||
if (isset($coefficient[ $idx1 ][ 1 ]) && $coefficient[ $idx1 ][ 1 ] == $_year) $day1 += $coefficient[ $idx1 ][ 2 ];
|
||||
$day2 = floor($year * 0.2422 + $coefficient[ $idx1 + 1 ][ 0 ]) - $_leap_value;
|
||||
if (isset($coefficient[ $idx1 + 1 ][ 1 ]) && $coefficient[ $idx1 + 1 ][ 1 ] == $_year) $day1 += $coefficient[ $idx1 + 1 ][ 2 ];
|
||||
//echo __FILE__.'->'.__LINE__.' $day1='.$day1,',$day2='.$day2.'<br/>'.chr(10);
|
||||
$data = array ();
|
||||
if ($day < $day1) {
|
||||
$data[ 'name1' ] = $term_name[ $idx1 - 1 ];
|
||||
$data[ 'name2' ] = $term_name[ $idx1 - 1 ] . '后';
|
||||
} else if ($day == $day1) {
|
||||
$data[ 'name1' ] = $term_name[ $idx1 ];
|
||||
$data[ 'name2' ] = $term_name[ $idx1 ];
|
||||
} else if ($day > $day1 && $day < $day2) {
|
||||
$data[ 'name1' ] = $term_name[ $idx1 ];
|
||||
$data[ 'name2' ] = $term_name[ $idx1 ] . '后';
|
||||
} else if ($day == $day2) {
|
||||
$data[ 'name1' ] = $term_name[ $idx1 + 1 ];
|
||||
$data[ 'name2' ] = $term_name[ $idx1 + 1 ];
|
||||
} else if ($day > $day2) {
|
||||
$data[ 'name1' ] = $term_name[ $idx1 + 1 ];
|
||||
$data[ 'name2' ] = $term_name[ $idx1 + 1 ] . '后';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取节日:特殊的节日只能修改此函数来计算
|
||||
*/
|
||||
function getFestival($today, $nl_info = false, $config = 1)
|
||||
{
|
||||
if ($config == 1) {
|
||||
$arr_lunar = array ( '01-01' => '春节', '01-15' => '元宵节', '02-02' => '二月二', '05-05' => '端午节', '07-07' => '七夕节', '08-15' => '中秋节', '09-09' => '重阳节', '12-08' => '腊八节', '12-23' => '小年' );
|
||||
$arr_solar = array ( '01-01' => '元旦', '02-14' => '情人节', '03-12' => '植树节', '04-01' => '愚人节', '05-01' => '劳动节', '06-01' => '儿童节', '10-01' => '国庆节', '10-31' => '万圣节', '12-24' => '平安夜', '12-25' => '圣诞节' );
|
||||
}//需要不同节日的,用不同的$config,然后配置$arr_lunar和$arr_solar
|
||||
$festivals = array ();
|
||||
list($y, $m, $d) = explode('-', $today);
|
||||
if (!$nl_info) $nl_info = $this->convertSolarToLunar($y, intval($m), intval($d));
|
||||
if ($nl_info[ 7 ] > 0 && $nl_info[ 7 ] < $nl_info[ 4 ]) $nl_info[ 4 ] -= 1;
|
||||
$md_lunar = substr('0' . $nl_info[ 4 ], -2) . '-' . substr('0' . $nl_info[ 5 ], -2);
|
||||
$md_solar = substr_replace($today, '', 0, 5);
|
||||
isset($arr_lunar[ $md_lunar ]) ? array_push($festivals, $arr_lunar[ $md_lunar ]) : '';
|
||||
isset($arr_solar[ $md_solar ]) ? array_push($festivals, $arr_solar[ $md_solar ]) : '';
|
||||
$glweek = date('w', strtotime($today)); //0-6
|
||||
if ($m == 5 && ( $d > 7 ) && ( $d < 15 ) && ( $glweek == 0 )) $festivals[] = '母亲节';
|
||||
if ($m == 6 && ( $d > 14 ) && ( $d < 22 ) && ( $glweek == 0 )) $festivals[] = '父亲节';
|
||||
$jieqi = $this->getJieQi($y, $m, $d);
|
||||
if ($jieqi) $festivals[] = $jieqi;
|
||||
return implode('/', $festivals);
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取当前时间属于哪个时辰
|
||||
@param int $time 时间戳
|
||||
*/
|
||||
function getTheHour($h)
|
||||
{
|
||||
$d = $h;
|
||||
if ($d == 23 || $d == 0) {
|
||||
return '子时';
|
||||
} else if ($d == 1 || $d == 2) {
|
||||
return '丑时';
|
||||
} else if ($d == 3 || $d == 4) {
|
||||
return '寅时';
|
||||
} else if ($d == 5 || $d == 6) {
|
||||
return '卯时';
|
||||
} else if ($d == 7 || $d == 8) {
|
||||
return '辰时';
|
||||
} else if ($d == 9 || $d == 10) {
|
||||
return '巳时';
|
||||
} else if ($d == 11 || $d == 12) {
|
||||
return '午时';
|
||||
} else if ($d == 13 || $d == 14) {
|
||||
return '未时';
|
||||
} else if ($d == 15 || $d == 16) {
|
||||
return '申时';
|
||||
} else if ($d == 17 || $d == 18) {
|
||||
return '酉时';
|
||||
} else if ($d == 19 || $d == 20) {
|
||||
return '戌时';
|
||||
} else if ($d == 21 || $d == 22) {
|
||||
return '亥时';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
71
addon/scenefestival/model/Record.php
Executable file
71
addon/scenefestival/model/Record.php
Executable file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\scenefestival\model;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
/**
|
||||
* 领取记录
|
||||
*/
|
||||
class Record extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取领取记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getFestivalDrawRecordList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('promotion_festival_draw_record')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取领取记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGamesDrawRecordPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('promotion_festival_draw_record')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
|
||||
if (!empty($list[ 'list' ])) {
|
||||
foreach ($list[ 'list' ] as $awark_k => $awark_v) {
|
||||
$list[ 'list' ][ $awark_k ][ 'coupon_name' ] = '';
|
||||
if (!empty($awark_v[ 'coupon' ])) {
|
||||
$coupon_info = model('promotion_coupon_type')->getList([ [ 'coupon_type_id', 'in', $awark_v[ 'coupon' ] ] ], 'coupon_type_id,coupon_name,count,lead_count');
|
||||
if (!empty($coupon_info)) {
|
||||
$coupon_name = '';
|
||||
foreach ($coupon_info as $k => $v) {
|
||||
if ($v[ 'count' ] < 0 || $v[ 'count' ] - $v[ 'lead_count' ] > 0) {
|
||||
$coupon_name .= $v[ 'coupon_name' ];
|
||||
}
|
||||
}
|
||||
$coupon_name = ltrim($coupon_name, ',');
|
||||
$list[ 'list' ][ $awark_k ][ 'coupon_name' ] = $coupon_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
528
addon/scenefestival/model/SceneFestival.php
Executable file
528
addon/scenefestival/model/SceneFestival.php
Executable file
@@ -0,0 +1,528 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\scenefestival\model;
|
||||
|
||||
|
||||
use addon\coupon\model\Coupon;
|
||||
use addon\coupon\model\CouponType;
|
||||
use app\dict\member_account\AccountDict;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\MemberAccount;
|
||||
use app\model\system\Cron;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 活动
|
||||
*/
|
||||
class SceneFestival extends BaseModel
|
||||
{
|
||||
public $status = [
|
||||
0 => '未开始',
|
||||
1 => '进行中',
|
||||
2 => '已结束',
|
||||
3 => '已关闭',
|
||||
];
|
||||
|
||||
/**
|
||||
* 添加活动
|
||||
* @param $game_data
|
||||
* @param $award_json
|
||||
* @return array
|
||||
*/
|
||||
public function addFestival($festival_data, $award_arr)
|
||||
{
|
||||
Cache::clear();
|
||||
model('promotion_festival')->startTrans();
|
||||
try {
|
||||
$condition = [
|
||||
[ 'status', 'in', '0,1' ],
|
||||
[ 'site_id', '=', $festival_data[ 'site_id' ] ],
|
||||
[ '', 'exp', Db::raw('not ( (`push_time` > ' . $festival_data[ 'end_time' ] . ' and `push_time` > ' . $festival_data[ 'push_time' ] . ' ) or (`end_time` < ' . $festival_data[ 'push_time' ] . ' and `end_time` < ' . $festival_data[ 'end_time' ] . '))') ]
|
||||
];
|
||||
$res = model('promotion_festival')->getList($condition, 'festival_id');
|
||||
if (!empty($res)) {
|
||||
return $this->error('', "当前时间段已有相同的活动");
|
||||
}
|
||||
|
||||
$time = time();
|
||||
$festival_data[ 'create_time' ] = $time;
|
||||
|
||||
if ($time > $festival_data[ 'push_time' ] && $time < $festival_data[ 'end_time' ]) {
|
||||
$festival_data[ 'status' ] = 1;
|
||||
} else {
|
||||
$festival_data[ 'status' ] = 0;
|
||||
}
|
||||
|
||||
$festival_id = model('promotion_festival')->add($festival_data);
|
||||
$award_arr[ 'site_id' ] = $festival_data[ 'site_id' ];
|
||||
$award_arr[ 'festival_id' ] = $festival_id;
|
||||
model('promotion_festival_award')->add($award_arr);
|
||||
|
||||
$cron = new Cron();
|
||||
if ($festival_data[ 'status' ] == 1) {//进行中
|
||||
|
||||
$cron->addCron(1, 0, "节日有礼活动关闭", "cronCloseFestival", $festival_data[ 'end_time' ], $festival_id);
|
||||
} else {//未进行
|
||||
$cron->addCron(1, 0, "节日有礼活动开启", "cronOpenFestival", $festival_data[ 'push_time' ], $festival_id);
|
||||
$cron->addCron(1, 0, "节日有礼活动关闭", "cronCloseFestival", $festival_data[ 'end_time' ], $festival_id);
|
||||
}
|
||||
|
||||
model('promotion_festival')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
|
||||
model('promotion_festival')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑活动
|
||||
* @param $condition
|
||||
* @param $game_data
|
||||
* @param $award_json
|
||||
* @return array
|
||||
*/
|
||||
public function editGames($condition, $festival_data, $award_data)
|
||||
{
|
||||
|
||||
$festival_info = model('promotion_festival')->getInfo($condition, 'festival_id,status');
|
||||
if (in_array($festival_info[ 'status' ], [ 2, 3 ])) {
|
||||
return $this->error('', '已关闭或已结束的活动不能编辑');
|
||||
}
|
||||
$festival_id = $festival_info[ 'festival_id' ];
|
||||
|
||||
$verify_condition = [
|
||||
[ 'festival_id', '<>', $festival_id ],
|
||||
[ 'status', 'in', '1,2' ],
|
||||
[ 'site_id', '=', $festival_data[ 'site_id' ] ],
|
||||
[ '', 'exp', Db::raw('not ( (`push_time` > ' . $festival_data[ 'end_time' ] . ' and `push_time` > ' . $festival_data[ 'push_time' ] . ' ) or (`end_time` < ' . $festival_data[ 'push_time' ] . ' and `end_time` < ' . $festival_data[ 'end_time' ] . '))') ]
|
||||
];
|
||||
$res = model('promotion_festival')->getList($verify_condition, 'festival_id');
|
||||
if (!empty($res)) {
|
||||
return $this->error('', "当前时间段已有相同的活动");
|
||||
}
|
||||
|
||||
$time = time();
|
||||
$festival_data[ 'update_time' ] = $time;
|
||||
|
||||
if ($time > $festival_data[ 'push_time' ] && $time < $festival_data[ 'end_time' ]) {
|
||||
$festival_data[ 'status' ] = 1;
|
||||
} else {
|
||||
$festival_data[ 'status' ] = 0;
|
||||
}
|
||||
model('promotion_festival')->startTrans();
|
||||
try {
|
||||
|
||||
model('promotion_festival')->update($festival_data, $condition);
|
||||
|
||||
model('promotion_festival_award')->update($award_data, [ [ 'festival_id', '=', $festival_id ] ]);
|
||||
|
||||
$cron = new Cron();
|
||||
|
||||
$cron->deleteCron([ [ 'event', '=', 'cronOpenFestival' ], [ 'relate_id', '=', $festival_id ] ]);
|
||||
$cron->deleteCron([ [ 'event', '=', 'cronCloseFestival' ], [ 'relate_id', '=', $festival_id ] ]);
|
||||
|
||||
if ($festival_data[ 'status' ] == 1) {//进行中
|
||||
|
||||
$cron->addCron(1, 0, "节日有礼活动关闭", "cronCloseFestival", $festival_data[ 'end_time' ], $festival_id);
|
||||
} else {
|
||||
//未进行
|
||||
$cron->addCron(1, 0, "节日有礼活动开启", "cronOpenFestival", $festival_data[ 'push_time' ], $festival_id);
|
||||
$cron->addCron(1, 0, "节日有礼活动关闭", "cronCloseFestival", $festival_data[ 'end_time' ], $festival_id);
|
||||
}
|
||||
|
||||
model('promotion_festival')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
|
||||
model('promotion_festival')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动奖励
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
*/
|
||||
public function getGameAward($condition = [], $field = '*')
|
||||
{
|
||||
$award_info = model('promotion_festival_award')->getInfo($condition, $field);
|
||||
if (!empty($award_info)) {
|
||||
$award_info[ 'award_type' ] = explode(',', $award_info[ 'award_type' ]);
|
||||
//获取优惠券信息
|
||||
if (isset($award_info[ 'coupon' ]) && !empty($award_info[ 'coupon' ])) {
|
||||
//优惠券字段
|
||||
$coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time,goods_type,max_fetch';
|
||||
|
||||
$model = new CouponType();
|
||||
$coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $award_info[ 'coupon' ] ] ], $coupon_field);
|
||||
$award_info[ 'coupon_list' ] = $coupon[ 'data' ];
|
||||
}
|
||||
}
|
||||
return $this->success($award_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动信息
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
*/
|
||||
public function getGamesInfo($condition, $field = '*')
|
||||
{
|
||||
$res = model('promotion_festival')->getInfo($condition, $field);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动有礼详情
|
||||
*/
|
||||
public function getFestivalDetail($condition, $field, $alias = 'a', $join = [])
|
||||
{
|
||||
|
||||
$res = model('promotion_festival')->getInfo($condition, $field, $alias, $join);
|
||||
if (!empty($res)) {
|
||||
$res[ 'award_type' ] = explode(',', $res[ 'award_type' ]);
|
||||
//获取优惠券信息
|
||||
if (isset($res[ 'coupon' ]) && !empty($res[ 'coupon' ])) {
|
||||
//优惠券字段
|
||||
$coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time,goods_type,max_fetch';
|
||||
|
||||
$model = new CouponType();
|
||||
$coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $res[ 'coupon' ] ] ], $coupon_field);
|
||||
$res[ 'coupon_list' ] = $coupon[ 'data' ];
|
||||
$res[ 'coupon_ids' ] = explode(',', $res[ 'coupon' ]);
|
||||
} else {
|
||||
$res[ 'coupon_ids' ] = [];
|
||||
}
|
||||
}
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除活动
|
||||
* @param $site_id
|
||||
* @param $game_id
|
||||
* @return array
|
||||
*/
|
||||
public function deleteGames($site_id, $festival_id)
|
||||
{
|
||||
model('promotion_festival')->startTrans();
|
||||
try {
|
||||
model('promotion_festival')->delete([ [ 'site_id', '=', $site_id ], [ 'festival_id', '=', $festival_id ] ]);
|
||||
model('promotion_festival_award')->delete([ [ 'site_id', '=', $site_id ], [ 'festival_id', '=', $festival_id ] ]);
|
||||
model('promotion_festival')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('promotion_festival')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getFestivalList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('promotion_festival')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGamesPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('promotion_festival')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭活动
|
||||
* @param $site_id
|
||||
* @param $game_id
|
||||
* @return array
|
||||
*/
|
||||
public function finishGames($site_id, $festival_id)
|
||||
{
|
||||
$game_info = model('promotion_festival')->getInfo([ [ 'festival_id', '=', $festival_id ], [ 'site_id', '=', $site_id ] ], 'status');
|
||||
if (!empty($game_info)) {
|
||||
|
||||
if ($game_info[ 'status' ] != 3) {
|
||||
$res = model('promotion_festival')->update([ 'status' => 3 ], [ [ 'festival_id', '=', $festival_id ] ]);
|
||||
// if ($res) {
|
||||
// $cron = new Cron();
|
||||
// $cron->deleteCron([ [ 'event', '=', 'OpenGame' ], [ 'relate_id', '=', $game_id ] ]);
|
||||
// $cron->deleteCron([ [ 'event', '=', 'CloseGame' ], [ 'relate_id', '=', $game_id ] ]);
|
||||
// }
|
||||
return $this->success($res);
|
||||
} else {
|
||||
$this->error('', '该活动已关闭');
|
||||
}
|
||||
|
||||
} else {
|
||||
$this->error('', '该活动不存在');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务开启活动
|
||||
* @param $game_id
|
||||
* @return array|\multitype
|
||||
*/
|
||||
public function cronOpenGames($game_id)
|
||||
{
|
||||
$game_info = model('promotion_festival')->getInfo([ [ 'festival_id', '=', $game_id ] ], 'start_time,push_time,status');
|
||||
if (!empty($game_info)) {
|
||||
|
||||
if ($game_info[ 'start_time' ] <= time() && $game_info[ 'status' ] == 0) {
|
||||
$res = model('promotion_festival')->update([ 'status' => 1 ], [ [ 'festival_id', '=', $game_id ] ]);
|
||||
return $this->success($res);
|
||||
} else {
|
||||
return $this->error("", "活动已开启或者关闭");
|
||||
}
|
||||
|
||||
} else {
|
||||
return $this->error("", "活动不存在");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启活动
|
||||
* @param $game_id
|
||||
* @return array|\multitype
|
||||
*/
|
||||
public function startGames($festival_id)
|
||||
{
|
||||
$game_info = model('promotion_festival')->getInfo([ [ 'festival_id', '=', $festival_id ] ], 'end_time,status');
|
||||
if (!empty($game_info)) {
|
||||
|
||||
if ($game_info[ 'end_time' ] >= time()) {
|
||||
$res = model('promotion_festival')->update([ 'status' => 1 ], [ [ 'festival_id', '=', $festival_id ] ]);
|
||||
return $this->success($res);
|
||||
} else {
|
||||
return $this->error("", "活动已结束");
|
||||
}
|
||||
|
||||
} else {
|
||||
return $this->error("", "活动不存在");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务关闭活动
|
||||
* @param $game_id
|
||||
* @return array|\multitype
|
||||
*/
|
||||
public function cronCloseGames($festival_id)
|
||||
{
|
||||
$game_info = model('promotion_festival')->getInfo([ [ 'festival_id', '=', $festival_id ] ], 'start_time,status');
|
||||
if (!empty($game_info)) {
|
||||
if ($game_info[ 'status' ] != 2) {
|
||||
$res = model('promotion_festival')->update([ 'status' => 2 ], [ [ 'festival_id', '=', $festival_id ] ]);
|
||||
return $this->success($res);
|
||||
} else {
|
||||
return $this->error("", "该活动已结束");
|
||||
}
|
||||
} else {
|
||||
return $this->error("", "活动不存在");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 节日有礼领取
|
||||
* @param $game_id
|
||||
* @param $member_id
|
||||
* @param $site_id
|
||||
*/
|
||||
public function receive($festival_id, $member_id, $site_id)
|
||||
{
|
||||
$game_info = model('promotion_festival')->getInfo([ [ 'festival_id', '=', $festival_id ], [ 'site_id', '=', $site_id ] ]);
|
||||
if (empty($game_info)) return $this->error("", "未获取到活动信息");
|
||||
|
||||
if ($game_info[ 'status' ] == 2 || $game_info[ 'status' ] == 3) return $this->error("", "活动已经结束");
|
||||
|
||||
$member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $site_id ], [ 'status', '=', 1 ] ], 'nickname,member_level,point');
|
||||
if (empty($member_info)) return $this->error("", "未获取到会员信息");
|
||||
|
||||
if (!empty($game_info[ 'level_id' ])) {
|
||||
$level = explode(',', $game_info[ 'level_id' ]);
|
||||
if (!in_array($member_info[ 'member_level' ], $level)) {
|
||||
return $this->error("", "只有{$game_info['level_name']}等级的会员可参与该活动");
|
||||
}
|
||||
}
|
||||
|
||||
// 判断今年有没有领取过
|
||||
$record_model = new Record();
|
||||
$start_year = date_to_time(date('Y-01-01 00:00:00'));
|
||||
$end_year = $start_year + 31535999;
|
||||
$record_condition[] = [ 'member_id', '=', $member_id];
|
||||
$record_condition[] = [ 'festival_id', '=', $festival_id ];
|
||||
$record_condition[] = [ 'receive_time', '>', $start_year ];
|
||||
$record_condition[] = [ 'receive_time', '<', $end_year ];
|
||||
$record_data = $record_model->getFestivalDrawRecordList($record_condition, 'record_id', 'receive_time desc')[ 'data' ];
|
||||
if (!empty($record_data)) {
|
||||
return $this->error('', "今年您已经领取过节日有礼奖励啦");
|
||||
}
|
||||
|
||||
model('promotion_festival_draw_record')->startTrans();
|
||||
try {
|
||||
$member_account = new MemberAccount();
|
||||
$award_info = model('promotion_festival_award')->getInfo([ [ 'festival_id', '=', $festival_id ] ], 'award_id,festival_id,award_type,coupon,point,balance,balance_type,balance_money');
|
||||
|
||||
if (!empty($award_info)) {
|
||||
$type_arr = explode(',', $award_info[ 'award_type' ]);
|
||||
foreach ($type_arr as $v) {
|
||||
switch ( $v ) {
|
||||
case 'point':
|
||||
// 积分
|
||||
$member_account->addMemberAccount($site_id, $member_id, 'point', $award_info[ 'point' ], $game_info[ 'festival_type' ], $festival_id, '节日有礼活动奖励发放');
|
||||
break;
|
||||
case 'balance':
|
||||
// 余额
|
||||
if ($award_info[ 'balance_type' ] == 0) {
|
||||
$member_account->addMemberAccount($site_id, $member_id, AccountDict::balance, $award_info[ 'balance' ], $game_info[ 'festival_type' ], $festival_id, '节日有礼活动奖励发放');
|
||||
} else {
|
||||
$member_account->addMemberAccount($site_id, $member_id, 'balance_money', $award_info[ 'balance_money' ], $game_info[ 'festival_type' ], $festival_id, '节日有礼活动奖励发放');
|
||||
}
|
||||
|
||||
break;
|
||||
case 'coupon':
|
||||
// 优惠券
|
||||
$coupon = new Coupon();
|
||||
$coupon_array = explode(',', $award_info[ 'coupon' ]);
|
||||
$coupon_array = array_map(function($value) {
|
||||
return [ 'coupon_type_id' => $value, 'num' => 1 ];
|
||||
}, $coupon_array);
|
||||
$receive_res = $coupon->giveCoupon($coupon_array, $site_id, $member_id, Coupon::GET_TYPE_ACTIVITY_GIVE);
|
||||
break;
|
||||
case 4:
|
||||
// 赠品
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
$record[ 'award_id' ] = $award_info[ 'award_id' ];
|
||||
$record[ 'festival_id' ] = $award_info[ 'festival_id' ];
|
||||
$record[ 'festival_type' ] = $game_info[ 'festival_type' ];
|
||||
$record[ 'member_id' ] = $member_id;
|
||||
$record[ 'site_id' ] = $site_id;
|
||||
$record[ 'receive_time' ] = time();
|
||||
$record[ 'member_nick_name' ] = $member_info[ 'nickname' ];
|
||||
|
||||
model('promotion_festival_draw_record')->add($record);
|
||||
}
|
||||
|
||||
model('promotion_festival_draw_record')->commit();
|
||||
return $this->success([ 'status' => 1 ]);
|
||||
} catch (\Exception $e) {
|
||||
model('promotion_festival_draw_record')->rollback();
|
||||
return $this->error("", $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 推广二维码
|
||||
* @param $game_id
|
||||
* @param $game_name
|
||||
* @param $url
|
||||
* @param $site_id
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
public function qrcode($festival_id, $game_name, $url, $site_id, $type = "create")
|
||||
{
|
||||
$data = [
|
||||
'site_id' => $site_id,
|
||||
'app_type' => "all", // all为全部
|
||||
'type' => $type, // 类型 create创建 get获取
|
||||
'data' => [
|
||||
"id" => $festival_id
|
||||
],
|
||||
'page' => $url,
|
||||
'qrcode_path' => 'upload/qrcode/games',
|
||||
'qrcode_name' => "games_qrcode_" . $festival_id
|
||||
];
|
||||
|
||||
event('Qrcode', $data, true);
|
||||
$app_type_list = config('app_type');
|
||||
$path = [];
|
||||
foreach ($app_type_list as $k => $v) {
|
||||
switch ( $k ) {
|
||||
case 'h5':
|
||||
$wap_domain = getH5Domain();
|
||||
$path[ $k ][ 'status' ] = 1;
|
||||
$path[ $k ][ 'url' ] = $wap_domain . $data[ 'page' ] . '?id=' . $festival_id;
|
||||
$path[ $k ][ 'img' ] = "upload/qrcode/games/games_qrcode_" . $festival_id . "_" . $k . ".png";
|
||||
break;
|
||||
case 'weapp' :
|
||||
$config = new ConfigModel();
|
||||
$res = $config->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'WEAPP_CONFIG' ] ]);
|
||||
if (!empty($res[ 'data' ])) {
|
||||
if (empty($res[ 'data' ][ 'value' ][ 'qrcode' ])) {
|
||||
$path[ $k ][ 'status' ] = 2;
|
||||
$path[ $k ][ 'message' ] = '未配置微信小程序';
|
||||
} else {
|
||||
$path[ $k ][ 'status' ] = 1;
|
||||
$path[ $k ][ 'img' ] = $res[ 'data' ][ 'value' ][ 'qrcode' ];
|
||||
}
|
||||
|
||||
} else {
|
||||
$path[ $k ][ 'status' ] = 2;
|
||||
$path[ $k ][ 'message' ] = '未配置微信小程序';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'wechat' :
|
||||
$config = new ConfigModel();
|
||||
$res = $config->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'WECHAT_CONFIG' ] ]);
|
||||
if (!empty($res[ 'data' ])) {
|
||||
if (empty($res[ 'data' ][ 'value' ][ 'qrcode' ])) {
|
||||
$path[ $k ][ 'status' ] = 2;
|
||||
$path[ $k ][ 'message' ] = '未配置微信公众号';
|
||||
} else {
|
||||
$path[ $k ][ 'status' ] = 1;
|
||||
$path[ $k ][ 'img' ] = $res[ 'data' ][ 'value' ][ 'qrcode' ];
|
||||
}
|
||||
} else {
|
||||
$path[ $k ][ 'status' ] = 2;
|
||||
$path[ $k ][ 'message' ] = '未配置微信公众号';
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$return = [
|
||||
'path' => $path,
|
||||
'game_name' => $game_name,
|
||||
];
|
||||
|
||||
return $this->success($return);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user