You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

417 lines
14 KiB

  1. <?php
  2. namespace backend\modules\api\models;
  3. use yii\base\Exception;
  4. use yii\db\ActiveRecord;
  5. use Yii;
  6. /**
  7. * This is the model class for table "opera_product".
  8. *
  9. * @property integer $PROD_ID
  10. * @property string $PROD_CODE
  11. * @property string $PROD_NAME
  12. * @property integer $PROD_TYPE
  13. * @property integer $PARENT_ID
  14. * @property integer $TOP_ORG_ID
  15. * @property integer $ORG_ID
  16. * @property integer $CANCEL_FLAG
  17. * @property integer $MAIN_CORP_ID
  18. * @property integer $CREATE_USER_ID
  19. * @property integer $UPDATE_USER_ID
  20. * @property integer $IS_ONSALE
  21. * @property string $PROD_PRICE
  22. * @property string $CUS_PRICE
  23. * @property string $REMARK
  24. * @property string $CREATE_TIME
  25. * @property string $UPDATE_TIME
  26. * @property integer $IS_REFUND
  27. * @property integer $REFUND_LIMIT_DAY
  28. * @property string $REFUND_LIMIT_TIME
  29. */
  30. class OperaProduct extends ActiveRecord
  31. {
  32. /**
  33. * @inheritdoc
  34. */
  35. public static function tableName()
  36. {
  37. return 'opera_product';
  38. }
  39. /**
  40. * @inheritdoc
  41. */
  42. public function rules()
  43. {
  44. return [
  45. [['PROD_CODE'], 'required'],
  46. [['PROD_TYPE', 'PARENT_ID', 'TOP_ORG_ID', 'ORG_ID', 'CANCEL_FLAG', 'MAIN_CORP_ID', 'CREATE_USER_ID', 'UPDATE_USER_ID', 'IS_ONSALE', 'IS_REFUND', 'REFUND_LIMIT_DAY','RUN_DUTY_ID'], 'integer'],
  47. [['PROD_PRICE', 'CUS_PRICE'], 'number'],
  48. [['REMARK'], 'string'],
  49. [['CREATE_TIME', 'UPDATE_TIME'], 'safe'],
  50. [['PROD_CODE', 'REFUND_LIMIT_TIME'], 'string', 'max' => 255],
  51. [['PROD_NAME'], 'string', 'max' => 200],
  52. ];
  53. }
  54. /**
  55. * @inheritdoc
  56. */
  57. public function attributeLabels()
  58. {
  59. return [
  60. 'PROD_ID' => '产品ID',
  61. 'PROD_CODE' => '产品编码',
  62. 'PROD_NAME' => '产品名称',
  63. 'PROD_TYPE' => '产品类别,DICT_TYPE.ID',
  64. 'PARENT_ID' => '父级产品ID,OPERA_PRODUCT.PROD_ID,若无父级,则为0',
  65. 'TOP_ORG_ID' => '所属一级组织机构ID,BASE_ORGANIZATION.ORG_ID,非0',
  66. 'ORG_ID' => '直属组织机构ID,BASE_ORGANIZATION.ORG_ID,非0',
  67. 'CANCEL_FLAG' => '记录有效性标记,CANCEL_FLAG=0记录有效;CANCEL_FLAG=1,记录已删除',
  68. 'MAIN_CORP_ID' => '运营主体',
  69. 'CREATE_USER_ID' => '记录创建用户ID',
  70. 'UPDATE_USER_ID' => '记录最后更新用户ID',
  71. 'IS_ONSALE' => '门票是否上架,0下架,1上架',
  72. 'PROD_PRICE' => '结算价格',
  73. 'CUS_PRICE' => '零售价',
  74. 'REMARK' => '备注',
  75. 'CREATE_TIME' => '创建时间',
  76. 'UPDATE_TIME' => '更新时间',
  77. 'IS_REFUND' => '是否允许退款 0 不允许 1 允许',
  78. 'REFUND_LIMIT_DAY' => '提前退款天数',
  79. 'REFUND_LIMIT_TIME' => '提前退款时间',
  80. 'RUN_DUTY_ID'=>'运营负责人ID'
  81. ];
  82. }
  83. /**
  84. * Function Description:整理产品数据
  85. * Function Name: getTicketProductList
  86. * @param string $prod_str 选购产品
  87. *
  88. * @return array
  89. *
  90. * @author 张帅
  91. */
  92. public function getTicketProductList($prod_str)
  93. {
  94. $result = [];
  95. $prod_str = substr($prod_str, 1, -1);
  96. $prod_arr = explode('}{', $prod_str);
  97. foreach ($prod_arr as $key => $vel) {
  98. $vel = explode(',', $vel);
  99. $result[$vel[0]]['prod_id'] = $vel[0];//票种id
  100. $result[$vel[0]]['price'] = $vel[1];//票种价格
  101. $result[$vel[0]]['num'] = $vel[2];//库存
  102. }
  103. return $result;
  104. }
  105. /**
  106. * Function Description:获取主票种详情
  107. * Function Name: getTicketMainProductListByProdId
  108. * @param int $prod_id 主票种id
  109. *
  110. * @return array|ActiveRecord[]
  111. *
  112. * @author 张帅
  113. */
  114. public function getTicketMainProductListByProdId($prod_id)
  115. {
  116. #region 获取数据详情
  117. $result = self::find()
  118. ->select([
  119. 'prod_id',//票种id
  120. 'prod_code',
  121. 'prod_name',
  122. 'prod_type',
  123. 'run_duty_id'
  124. ])
  125. ->where([
  126. 'and',
  127. ['=','prod_id',$prod_id],
  128. ['=','cancel_flag',0],
  129. ['=','is_onsale',1],
  130. ])
  131. // ->createCommand()->getRawSql();
  132. ->asArray()->one();
  133. return $result;
  134. #endregion
  135. }
  136. /*
  137. * 获取产品编号数组(for驴妈妈)--娄梦宁
  138. */
  139. public function getCodeArr(){
  140. $result=self::find()->select(['prod_id','prod_code','prod_name'])->from(self::tableName())->where(['and',['=','parent_id',0],['=','org_id',1369]])->indexBy('prod_code')->asArray()->all();
  141. return $result;
  142. }
  143. /*
  144. * 获取子产品编号数组(for驴妈妈)--娄梦宁
  145. */
  146. public function getCodeArrSon(){
  147. $result=self::find()->select(['prod_id','prod_code','prod_name'])->from(self::tableName())->where(['and',['!=','parent_id',0],['=','org_id',1369]])->indexBy('prod_code')->asArray()->all();
  148. return $result;
  149. }
  150. /*
  151. * 通过产品编码删除门票产品
  152. */
  153. public function cancelProductByCode($code){
  154. self::updateAll(['PROD_CODE'=>$code,'CANCEL_FLAG'=>0,'ORG_ID'=>1369],['CANCEL_FLAG'=>1]);
  155. $outside_ticket=new OutsideTicket();
  156. $outside_ticket::updateAll(['prod_code'=>$code,'cancel_flag'=>0],['cancel_flag'=>1]);
  157. }
  158. /*
  159. * 驴妈妈主产品票种添加
  160. */
  161. public function istLvmamaProdMain($prod_id,$prod_name,$remark,$refund_limit_day=1, $refund_limit_time='23:00', $is_refund=0){
  162. $transaction = Yii::$app->db->beginTransaction();
  163. $values=[
  164. 'PROD_NAME'=>$prod_name,
  165. 'PROD_CODE'=>(string)$prod_id,
  166. 'MAIN_CORP_ID'=>1,
  167. 'ORG_ID'=>1369,
  168. 'REMARK'=>$remark,
  169. 'CREATE_TIME'=>date('Y-m-d H:i:s'),
  170. 'IS_REFUND'=>$is_refund,
  171. 'REFUND_LIMIT_TIME'=>$refund_limit_time,
  172. 'REFUND_LIMIT_DAY'=>$refund_limit_day,
  173. ];
  174. try {
  175. $opera_product = new OperaProduct();
  176. $opera_prod = clone $opera_product;
  177. $opera_prod->attributes = $values;
  178. $prod_main_res = $opera_prod->insert();
  179. if (!$prod_main_res) {
  180. $transaction->rollBack();
  181. return ['code' => 1, 'msg' => '新增主产品失败','prod_id'=>0];
  182. }
  183. }catch (Exception $e){
  184. $transaction->rollBack();
  185. return ['code' => 1, 'msg' => '新增主产品失败','prod_id'=>0];
  186. }
  187. $transaction->commit();
  188. return ['code'=>0,'prod_id'=>$opera_prod->PROD_ID];
  189. }
  190. /*
  191. * 驴妈妈子门票添加
  192. */
  193. public function insLvmamaProdSon($parent_id,$prod_name,$prod_code, $refund_limit_day, $refund_limit_time, $is_refund){
  194. $transaction = Yii::$app->db->beginTransaction();
  195. $prod_type=self::find()->select(['prod_type'])->from(self::tableName())->where(['prod_id'=>$parent_id])->asArray()->one();
  196. $values=[
  197. 'PROD_NAME'=>$prod_name,
  198. 'PROD_CODE'=>(string)$prod_code,
  199. 'PARENT_ID'=>$parent_id,
  200. 'MAIN_CORP_ID'=>1,
  201. 'ORG_ID'=>1369,
  202. 'CREATE_TIME'=>date('Y-m-d H:i:s'),
  203. 'IS_REFUND'=>$is_refund,
  204. 'REFUND_LIMIT_TIME'=>$refund_limit_time,
  205. 'REFUND_LIMIT_DAY'=>$refund_limit_day,
  206. 'PROD_TYPE'=>(int)$prod_type['prod_type']
  207. ];
  208. try{
  209. $opera_product = new OperaProduct();
  210. $opera_prod = clone $opera_product;
  211. $opera_prod->attributes = $values;
  212. $prod_main_res = $opera_prod->insert();
  213. if (!$prod_main_res) {
  214. $transaction->rollBack();
  215. return ['code' => 1, 'msg' => '新增子产品失败'];
  216. }
  217. }catch (Exception $e){
  218. $transaction->rollBack();
  219. return ['code' => 1, 'msg' => '新增子产品失败'];
  220. }
  221. $transaction->commit();
  222. return ['code'=>0];
  223. }
  224. /*
  225. * 驴妈妈渠道所有产品id
  226. */
  227. public function getIdForLvmama(){
  228. $result=self::find()->select(['prod_id','prod_code'])->from(self::tableName())->where(['and',['=','cancel_flag',0],['=','parent_id',0],['=','org_id',1369]])->asArray()->all();
  229. return $result;
  230. }
  231. /*
  232. * 驴妈妈渠道所有子产品id(商品)
  233. */
  234. public function getSonIdForLvmama(){
  235. $result=self::find()->select(['prod_id','prod_code'])->from(self::tableName())->where(['and',['=','cancel_flag',0],['!=','parent_id',0],['=','org_id',1369]])->asArray()->all();
  236. return $result;
  237. }
  238. /**
  239. * Function Description:根据code改变主产品信息
  240. * Function Name: uptLvmamaProdMain
  241. * @param $prod_code
  242. * @param $prod_name
  243. * @param $remark
  244. *
  245. * @return array
  246. *
  247. * @author 娄梦宁
  248. */
  249. public function uptLvmamaProdMain($prod_code,$prod_name,$remark){
  250. $transaction= Yii::$app->db->beginTransaction();
  251. $values=[
  252. 'PROD_NAME'=>$prod_name,
  253. 'REMARK'=>$remark,
  254. 'CANCEL_FLAG'=>0
  255. ];
  256. try {
  257. $opera_prod=self::findOne(['PROD_CODE'=>(string)$prod_code,'ORG_ID'=>1369,'PARENT_ID'=>0]);
  258. $opera_prod->attributes=$values;
  259. $prod_main_res = $opera_prod->update();
  260. if ($prod_main_res===false) {
  261. $transaction->rollBack();
  262. return ['code' => 1, 'msg' => '更新主产品失败'];
  263. }
  264. }catch (Exception $e){
  265. $transaction->rollBack();
  266. return ['code' => 1, 'msg' => '更新主产品失败','info'=>$e];
  267. }
  268. $transaction->commit();
  269. return ['code' => 0, 'msg' => '更新主产品成功'];
  270. }
  271. /**
  272. * Function Description:根据code改变子产品(商品信息)
  273. * Function Name: uptLvmamaProdSon
  274. * @param $prod_code
  275. * @param $prod_name
  276. * @param $remark
  277. * @param $refund_limit_day
  278. * @param $refund_limit_time
  279. *
  280. * @return array
  281. *
  282. * @author 娄梦宁
  283. */
  284. public function uptLvmamaProdSon($prod_code,$prod_name,$remark,$refund_limit_day,$refund_limit_time,$is_refund,$parent_id=0){
  285. $transaction= Yii::$app->db->beginTransaction();
  286. $values=[
  287. 'PROD_NAME'=>$prod_name,
  288. 'REMARK'=>$remark,
  289. 'CANCEL_FLAG'=>0,
  290. 'REFUND_LIMIT_TIME'=>$refund_limit_time,
  291. 'REFUND_LIMIT_DAY'=>$refund_limit_day,
  292. 'IS_REFUND'=>$is_refund,
  293. ];
  294. if($parent_id!=0){
  295. $values['PARENT_ID']=$parent_id;
  296. }
  297. $new_opera_product=clone $this;
  298. try {
  299. $new_opera_product::updateAll($values,['PROD_CODE'=>(string)$prod_code,'ORG_ID'=>1369]);
  300. }catch (Exception $e){
  301. return ['code' => 0, 'msg' => '更新子产品失败'];
  302. }
  303. $transaction->commit();
  304. return ['code' => 0, 'msg' => '更新子产品成功'];
  305. }
  306. /**
  307. * Function Description:凌晨批量定时任务更新产品相关信息
  308. * Function Name: uptLvmamaProdDetail
  309. * @param $prod_code
  310. * @param $prod_name
  311. * @param $remark
  312. * @param $refund_limit_day
  313. * @param $refund_limit_time
  314. * @param $is_refund
  315. *
  316. * @return array
  317. *
  318. * @author 娄梦宁
  319. */
  320. public function uptLvmamaProdDetail($prod_code,$prod_name,$remark,$refund_limit_day,$refund_limit_time,$is_refund){
  321. $transaction= Yii::$app->db->beginTransaction();
  322. $values=[
  323. 'PROD_NAME'=>$prod_name,
  324. 'REMARK'=>$remark,
  325. 'CANCEL_FLAG'=>0,
  326. 'IS_REFUND'=>$is_refund,
  327. 'REFUND_LIMIT_TIME'=>$refund_limit_time,
  328. 'REFUND_LIMIT_DAY'=>$refund_limit_day,
  329. 'UPDATE_TIME'=>date('Y-m-d H:i:s'),
  330. ];
  331. try {
  332. $opera_prod=self::findOne(['PROD_CODE'=>(string)$prod_code,'ORG_ID'=>1369,'PARENT_ID'=>0]);
  333. $opera_prod->attributes=$values;
  334. $prod_main_res = $opera_prod->update();
  335. if ($prod_main_res===false) {
  336. $transaction->rollBack();
  337. return ['code' => 1, 'msg' => '更新主产品失败'];
  338. }
  339. }catch (Exception $e){
  340. $transaction->rollBack();
  341. return ['code' => 1, 'msg' => '更新主产品失败'];
  342. }
  343. $transaction->commit();
  344. return ['code' => 0, 'msg' => '更新主产品成功'];
  345. }
  346. /**
  347. * Function Description:查询产品上架状态
  348. * Function Name: getProdbyProdid
  349. * @param $prod_id
  350. *
  351. * @return array|null|ActiveRecord
  352. *
  353. * @author 冒炎
  354. */
  355. public function getProdbyProdid($prod_id){
  356. $res = self::find()
  357. ->select('IS_ONSALE')
  358. ->from(self::tableName())
  359. ->where(['=','PROD_ID',$prod_id])
  360. ->asArray()
  361. ->one();
  362. return $res;
  363. }
  364. /**
  365. * Function Description:获取具体日期的子产品信息
  366. * Function Name: getProdInfo
  367. * @param $run_date
  368. * @param $to_org_id
  369. * @param $sub_prod_id
  370. * @param $flag
  371. *
  372. * @return array|null|ActiveRecord
  373. *
  374. * @author 冒炎
  375. */
  376. public function getProdInfo($run_date,$to_org_id,$sub_prod_id,$flag){
  377. $select = [
  378. 'prod_is_onsale'=>'a.is_onsale',
  379. 'run_is_onsale'=>'b.is_onsale',
  380. 'cus_price'=>'b.cus_price',
  381. 'prod_price'=>'b.prod_price',
  382. 'total_count'=>'b.total_count'
  383. ];
  384. $where = [
  385. 'and',
  386. ['=','a.cancel_flag',0],
  387. ['=','a.prod_id',$sub_prod_id],
  388. ['=','b.run_date',$run_date]
  389. ];
  390. if($flag){
  391. $where[] = ['=','b.to_org_id',$to_org_id];
  392. }else{
  393. $where[] = ['=','b.to_org_id',0];
  394. }
  395. $res = self::find()
  396. ->select($select)
  397. ->from(self::tableName() . 'as a')
  398. ->leftJoin('opera_product_run as b','a.prod_id = b.prod_id and b.cancel_flag = 0')
  399. ->where($where)
  400. ->asArray()
  401. ->one();
  402. return $res;
  403. }
  404. }