Commit 894646fe authored by liuyuzhengrace's avatar liuyuzhengrace

计算免费月份数据

parent f73df66e
...@@ -70,108 +70,116 @@ class StoreUtil { ...@@ -70,108 +70,116 @@ class StoreUtil {
return self::checkAddressInServiceArea(array('lat'=>$lat,'lng'=>$lng),$storeId); return self::checkAddressInServiceArea(array('lat'=>$lat,'lng'=>$lng),$storeId);
} }
public function calcChargeMoney($param){
/*$storeIds = array_keys($param);
$qmStoreClassModel = \DAO\QmStoreClassModel::getInstance();
$list = $qmStoreClassModel->getList(array('store_id'=>array('in',$storeIds),'class_style'=>2,'is_charged'=>1,'qm_store_class.deadline'=>array('lt',$store['contract_time'])),'');//当前店铺正在经营的二级签约分类
/*if(count($list)!=count($gcIds)){ /**
showMessage('存在不能续费的分类'); * 计算分类对应
}*/ * @param $class
/*$gcParentIds = array_unique(array_column($list,'gc_parent_id')); * @param $storeEndTime
$tempGoodsClassList = Model('goods_class')->getGoodsClassList(array('gc_id'=>array('in',$gcParentIds)),'gc_id,gc_name'); * @param int $month
$goodsClassList = array(); * @return array|bool
foreach($tempGoodsClassList as $tempClass){ */
$goodsClassList[$tempClass['gc_id']] = $tempClass; public function getFreeChargeMoney($class,$storeEndTime,$month=1){
if($month<=0){
return false;
} }
foreach($list as &$temp){ $currentTime = mktime(23,59,59,date('m'),date('d'),date('Y'));
$temp['gc_parent_name'] = $goodsClassList[$temp['gc_parent_id']]['gc_name']; $tempOldTime = max(array($storeEndTime,$class['deadline']));
$oldTime = mktime(23,59,59,date('m',$tempOldTime),date('d',$tempOldTime),date('Y',$tempOldTime));
$currExpTime = $oldTime;
if($currentTime>$oldTime){
$currExpTime = $currentTime;
} }
$maxDeadline = max(array_column($list,'deadline')); $currentMonthEnd = mktime(0,0,0,(date('m',$currExpTime)+1),1,date('Y',$currExpTime))-1;
$storeEndTime = $store['store_end_time']; $endTime = mktime(0,0,0,(date('m',$currExpTime)+1+$month),1,date('Y',$currExpTime))-1;
$currExpTime = max(array($storeEndTime,$maxDeadline)); if($currentMonthEnd>$currExpTime){
$currentMonthEnd = mktime(0,0,0,(date('m')+1),1,date('Y'))-1; $endTime = $currentMonthEnd;
if($currExpTime<$currentMonthEnd){ if($month>1){
$startEndTime = mktime(0,0,0,(date('m')+1),1,date('Y'))-1; $endTime = mktime(0,0,0,(date('m',$currExpTime)+$month),1,date('Y',$currExpTime))-1;
}else if($currExpTime==$currentMonthEnd){
$startEndTime = mktime(0,0,0,(date('m')+2),1,date('Y'))-1;
}else{
$futureEndTime = mktime(0,0,0,(date('m',$currExpTime)+1),1,date('Y',$currExpTime))-1;
if($futureEndTime>$currExpTime){
$startEndTime = mktime(0,0,0,(date('m',$currExpTime)+1),1,date('Y',$currExpTime))-1;
}else{
$startEndTime = mktime(0,0,0,(date('m',$currExpTime)+2),1,date('Y',$currExpTime))-1;
} }
} }
$startFee = 0; return array('service_fee'=>0,'old_end_time'=>$tempOldTime,'new_start_time'=>$currExpTime+1,'new_end_time'=>$endTime,'curr_month_fee'=>0,'pre_month_fee'=>0);
foreach($list as $class){ }
$tempCurrExpTime = max(array($storeEndTime,$class['deadline']));
$startFee += $this->getChargedMoney($class,$tempCurrExpTime,$startEndTime);
/**
* 生成随机数
* @param $len 随机数
*/
private function createncode($len=10) {
$strs = '0123456789';
$strlen = strlen($strs)-1;
$rt = '';
for($i=0;$i<$len;$i++) {
$rt.= $strs[rand(0,$strlen)];
} }
return $rt;
}
if(chksubmit()){ /**
try{ * 计算试用期即将到期的店铺续费
$endDate = $_POST['endDate']; * @param $param array(11=>array('month'=>1,'store_end_time'=>1548950399,'contract_time'=>'1577807999'))
if(!$endDate){ * @return bool
throw new Exception('缴费至期限不能为空'); */
} public function calcChargeMoney($param){
$dateArr = explode('-',$endDate); $storeIds = array_keys($param);
if(count($dateArr)!=2){ $dbName = \Our\DbNameConst::masterDBConnectName;
throw new Exception('截止时间格式错误'); var_dump($dbName);
} $qmStoreClassModel = \DAO\QmStoreClassModel::getInstance($dbName);
$endTime = mktime(0,0,0,($dateArr[1]+1),1,$dateArr[0])-1; var_dump($dbName.'1test');
$qmStoreClassModel->setDb($dbName);
$list = $qmStoreClassModel->selectByWhere(array('store_id'=>array('in',$storeIds),'class_style'=>2,'is_charged'=>1));//当前店铺正在经营的二级签约分类
//,'qm_store_class.deadline'=>array('lt',$store['contract_time'])
$currentTime = TIMESTAMP;
if($endTime<$startEndTime){ $qmStoreClassModel->db->doTransaction();
throw new Exception('截止时间不能小于'.date('Y-m',$startEndTime)); $addKey=\Our\Common::getConfig('password.key');
} $payLogList = array();
$currentTime = TIMESTAMP; $newChargeList = array();
$paySn = date('YmdHis').$this->createncode(18); foreach($list as $class){
$payLog = array(); $paySn = date('YmdHis').$this->createncode(18);
$payLog['store_id'] = $store_id; $storeId = $class['store_id'];
$payLog['pay_state'] = 0; $payLog = array();
$payLog['pay_sn'] = $paySn; $payLog['store_id'] = $storeId;
$payLog['gmt_create'] = $currentTime; $payLog['pay_state'] = 1;
$payLog['pay_type'] = $_POST['pay_type']; $payLog['pay_sn'] = $paySn;
$payContent = array(); $payLog['gmt_create'] = $currentTime;
$pay_amount = 0; $payLog['gmt_update'] = $currentTime;
foreach($list as $class){ $payLog['pay_time'] = $currentTime;
$chargeLog = array(); $payLog['pay_type'] = 3;
$feeArr = $this->getChargedMoney($class,$storeEndTime,$endTime,false); $payContent = array();
$chargeLog['gc_id'] = $class['gc_id']; $chargeLog = array();
$chargeLog['store_id'] = $store_id; $feeArr = $this->getFreeChargeMoney($class,$param[$storeId]['store_end_time'],$param[$storeId]['month']);
$chargeLog['pay_sn'] = $paySn; if($feeArr['new_end_time']>$param[$storeId]['contract_time']){
$chargeLog = array_merge($feeArr,$chargeLog); \Our\Log::getInstance()->write(json_encode($class).'分类超过有效期','/data/log/feeMonth');
$payContent[] = $chargeLog; continue;
$pay_amount += $feeArr['service_fee']; }
} $chargeLog['gc_id'] = $class['gc_id'];
$payLog['pay_amount'] =$pay_amount; $chargeLog['store_id'] = $storeId;
$payLog['pay_content'] = serialize($payContent); $chargeLog['pay_sn'] = $paySn;
$result = BaseModel('store_class_pay_log')->add($payLog); $chargeLog = array_merge($feeArr,$chargeLog);
if(!$result){ $payContent[] = $chargeLog;
throw new Exception('支付记录写入失败'); $payLog['pay_content'] = serialize($payContent);
} $payLog['pay_amount'] = 0;
if(intval($payLog['pay_type'])==1){ $chargeLog['gmt_create'] = $currentTime;
$param['body']='我的身边店-订单编号'.$paySn; $chargeLog['gmt_update'] = $currentTime;
$param['attach']='c|'.$paySn; $chargeLog['service_fee_sign'] = md5($currentTime,$chargeLog['service_fee'],$addKey);
$param['pay_sn'] =$paySn; $newChargeList[] = $chargeLog;
$param['pay_amount']=$pay_amount; $resultClass = $qmStoreClassModel->update(array('deadline'=>$chargeLog['new_end_time'],'deadline_sign'=>md5($class['gmt_create'],$chargeLog['new_end_time'],$addKey),'gmt_update'=>$currentTime),array('gc_id'=>$chargeLog['gc_id'],'store_id'=>$chargeLog['store_id']));
$param['store_name']=$store['store_name']; if($resultClass===false){
$result1=Model('store_class_pay_log')->generatePayQrcode($param); $qmStoreClassModel->db->doRollback();
if(!$result1){
showMessage('二维码生成失败','','html','error');
}
import('function.redisHelper');
excuteYafMethod('\DAO\QmStoreClassModel','delStoreSignClassesCache',array($store['store_citycode']));
$this->ajaxReturn(array('payType'=>1,'qrcodeUrl'=>UPLOAD_SITE_URL.DS.ATTACH_SIGNCLASS.DS.$result1,'paySn'=>$paySn),'二维码生成成功','1');
}else{
import('function.redisHelper');
excuteYafMethod('\DAO\QmStoreClassModel','delStoreSignClassesCache',array($store['store_citycode']));
$this->ajaxReturn(array('payType'=>2,'paySn'=>$paySn),'待支付数据生成成功','1');
}
}catch(Exception $e){
$this->ajaxReturn('',$e->getMessage(),'0');
} }
}*/ $payLogList[] = $payLog;
}
$resultPayLog = \DAO\Store\StoreClassPayLogModel::getInstance($dbName)->insertBatch($payLogList);
if(!$resultPayLog){
$qmStoreClassModel->db->doRollback();
}
$resultChargeLog = \DAO\GoodsClass\StoreClassChargeLogModel::getInstance($dbName)->insertBatch($newChargeList);
if(!$resultChargeLog){
$qmStoreClassModel->db->doRollback();
}
$qmStoreClassModel->db->doCommit();
return true ;
} }
/** /**
......
...@@ -29,33 +29,35 @@ class StoreClassChargeLogModel extends \DAO\AbstractModel{ ...@@ -29,33 +29,35 @@ class StoreClassChargeLogModel extends \DAO\AbstractModel{
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll(); return $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll();
} }
/** public function insertBatch($datas){
* 计算分类对应 $this->setDb(\Our\DbNameConst::masterDBConnectName);
* @param $class $error = 0;
* @param $storeEndTime $baseSql = "insert IGNORE into {$this->_tableName}(gc_id,store_id,old_end_time,new_start_time,new_end_time,service_fee,gmt_create,gmt_update,pay_sn,curr_month_fee,pre_month_fee,service_fee_sign) values";
* @param int $month $insertAllSql = $baseSql;
* @return array|bool for ($i = 0; $i < count($datas); $i++) {
*/ $addSql = \Our\Common::format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}'),", $datas[$i]['gc_id'], $datas[$i]['store_id'], $datas[$i]['old_end_time'], $datas[$i]['new_start_time'], $datas[$i]['new_end_time'], $datas[$i]['service_fee'], $datas[$i]['gmt_create'], $datas[$i]['gmt_update'],$datas[$i]['pay_sn'], $datas[$i]['curr_month_fee'], $datas[$i]['pre_month_fee'], $datas[$i]['service_fee_sign']);
public function getFreeChargeMoney($class,$storeEndTime,$month=1){ $insertAllSql .= $addSql;
if($month<=0){ if ($i % 1000 == 0 && $i != 0) {
return false; $insertAllSql = rtrim($insertAllSql, ',');
} $one = $this->db->insert($this->_tableName)->query($insertAllSql);
$currentTime = mktime(23,59,59,date('m'),date('d'),date('Y')); if (!$one) {
$tempOldTime = max(array($storeEndTime,$class['deadline'])); $error++;
$oldTime = mktime(23,59,59,date('m',$tempOldTime),date('d',$tempOldTime),date('Y',$tempOldTime)); }
$currExpTime = $oldTime; $insertAllSql = $baseSql;
if($currentTime>$oldTime){ }
$currExpTime = $currentTime;
} }
$currentMonthEnd = mktime(0,0,0,(date('m',$currExpTime)+1),1,date('Y',$currExpTime))-1; if ($insertAllSql != $baseSql) {
$endTime = mktime(0,0,0,(date('m',$currExpTime)+1+$month),1,date('Y',$currExpTime))-1; $insertAllSql = rtrim($insertAllSql, ',');
if($currentMonthEnd>$currExpTime){ $one = $this->db->insert($this->_tableName)->query($insertAllSql);
$endTime = $currentMonthEnd;
if($month>1){ if (!$one) {
$endTime = mktime(0,0,0,(date('m',$currExpTime)+$month),1,date('Y',$currExpTime))-1; $error++;
} }
} }
return array('service_fee'=>0,'old_end_time'=>$tempOldTime,'new_start_time'=>$currExpTime+1,'new_end_time'=>$endTime,'curr_month_fee'=>0,'pre_month_fee'=>0); if ($error > 0) {
return false;
}
return true;
} }
/** /**
......
...@@ -29,7 +29,7 @@ class QmStoreClassModel extends \DAO\AbstractModel{ ...@@ -29,7 +29,7 @@ class QmStoreClassModel extends \DAO\AbstractModel{
public function selectByWhere($where = null,$field = '*',$limit=false){ public function selectByWhere($where = null,$field = '*',$limit=false){
$this->setDb(); $this->setDb($this->dbName);
if(is_array($where)){ if(is_array($where)){
$where = $this->db->getSqlWhereByArray($where); $where = $this->db->getSqlWhereByArray($where);
} }
...@@ -41,6 +41,7 @@ class QmStoreClassModel extends \DAO\AbstractModel{ ...@@ -41,6 +41,7 @@ class QmStoreClassModel extends \DAO\AbstractModel{
return $result; return $result;
} }
public function delSignScopeCache($storeId){ public function delSignScopeCache($storeId){
$result = \Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(),array(&$this, 'selectByWhere'),array(),array($storeId)); $result = \Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(),array(&$this, 'selectByWhere'),array(),array($storeId));
return $result; return $result;
...@@ -80,6 +81,14 @@ class QmStoreClassModel extends \DAO\AbstractModel{ ...@@ -80,6 +81,14 @@ class QmStoreClassModel extends \DAO\AbstractModel{
return $list; return $list;
} }
public function update($data,$where){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$result=$this->db->update($this->_tableName)->rows($data)->where($where)->execute();
return $result;
}
/** /**
* 类实例 * 类实例
*/ */
...@@ -88,21 +97,21 @@ class QmStoreClassModel extends \DAO\AbstractModel{ ...@@ -88,21 +97,21 @@ class QmStoreClassModel extends \DAO\AbstractModel{
/** /**
* 获取类实例 * 获取类实例
*/ */
public static function getInstance() { public static function getInstance($dbName = \Our\DbNameConst::salveDBConnectName) {
if (!(self::$_instance instanceof self)) { if (!(self::$_instance instanceof self)) {
self::$_instance = new self(); self::$_instance = new self($dbName);
} }
return self::$_instance; return self::$_instance;
} }
public function getStoreClasses($where, $field = '*'){ public function getStoreClasses($where, $field = '*'){
$this->setDb(); $this->setDb($this->dbName);
$result = $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll(); $result = $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll();
return $result; return $result;
} }
public function getStoreSignClasses($where,$field = "*"){ public function getStoreSignClasses($where,$field = "*"){
$this->setDb(); $this->setDb($this->dbName);
if(is_array($where)){ if(is_array($where)){
$where = $this->db->getSqlWhereByArray($where); $where = $this->db->getSqlWhereByArray($where);
} }
...@@ -137,11 +146,4 @@ class QmStoreClassModel extends \DAO\AbstractModel{ ...@@ -137,11 +146,4 @@ class QmStoreClassModel extends \DAO\AbstractModel{
\Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(), array(&$this, 'getStoreClasses'),array(),array($cityCode)); \Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(), array(&$this, 'getStoreClasses'),array(),array($cityCode));
} }
public function update($data,$where){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$result=$this->db->update($this->_tableName)->rows($data)->where($where)->execute();
return $result;
}
} }
\ No newline at end of file
...@@ -31,6 +31,40 @@ class StoreClassPayLogModel extends \DAO\AbstractModel ...@@ -31,6 +31,40 @@ class StoreClassPayLogModel extends \DAO\AbstractModel
$this->setDb($this->dbName); $this->setDb($this->dbName);
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne(); return $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
} }
public function insertBatch($datas){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$error = 0;
$baseSql = "insert IGNORE into {$this->_tableName}(store_id,pay_state,pay_sn,pay_content,gmt_create,pay_time,pay_amount,pay_type,gmt_update) values";
$insertAllSql = $baseSql;
for ($i = 0; $i < count($datas); $i++) {
$addSql = \Our\Common::format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}'),", $datas[$i]['store_id'], $datas[$i]['pay_state'], $datas[$i]['pay_sn'], $datas[$i]['pay_content'], $datas[$i]['gmt_create'], $datas[$i]['pay_time'], $datas[$i]['pay_amount'], $datas[$i]['pay_type'],$datas[$i]['gmt_update']);
$insertAllSql .= $addSql;
if ($i % 1000 == 0 && $i != 0) {
$insertAllSql = rtrim($insertAllSql, ',');
$one = $this->db->insert($this->_tableName)->query($insertAllSql);
if (!$one) {
$error++;
}
$insertAllSql = $baseSql;
}
}
if ($insertAllSql != $baseSql) {
$insertAllSql = rtrim($insertAllSql, ',');
$one = $this->db->insert($this->_tableName)->query($insertAllSql);
if (!$one) {
$error++;
}
}
if ($error > 0) {
return false;
}
return true;
}
/** /**
* 类实例 * 类实例
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment