MemberWelfare.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. namespace app\store\model\member;
  3. use app\common\model\member\MemberCardsAction;
  4. use app\common\model\member\MemberWelfare as MemberWelfareModel;
  5. /**
  6. * 会员卡行为操作模型
  7. * @package app\common\model
  8. */
  9. class MemberWelfare extends MemberWelfareModel
  10. {
  11. protected $append = [];
  12. public function getStartTimeAttr($value,$data){
  13. return substr($value,0,7);
  14. }
  15. public function getEndTimeAttr($value,$data){
  16. return substr($value,0,7);
  17. }
  18. /**
  19. * 添加
  20. * @param $data
  21. * @return false|int
  22. */
  23. public function addOne($data)
  24. {
  25. $this->transaction(function () use ($data) {
  26. $this->save($data);
  27. $id = (int)$this['id'];
  28. $data['audit_status'] = 0;
  29. $data['target_type'] = 2;
  30. (new MemberCardsAction())->add($id, $data);
  31. });
  32. return true;
  33. }
  34. /**
  35. * 编辑
  36. * @param $data
  37. * @return bool|int
  38. */
  39. public function edit($data)
  40. {
  41. $this->transaction(function () use ($data) {
  42. $data['audit_status'] = 0;
  43. $data['audit_time'] = date('Y-m-d H:i:s');
  44. $this->save($data);
  45. $id = (int)$this['id'];
  46. $data['target_type'] = 2;
  47. (new MemberCardsAction())->add($id, $data);
  48. });
  49. return true;
  50. }
  51. /**
  52. * 审核
  53. * @param array $data
  54. * @return bool
  55. */
  56. public function audit(array $data): bool
  57. {
  58. unset($data['target_type']);
  59. $this->transaction(function () use ($data) {
  60. $this->save($data);
  61. $id = (int)$this['id'];
  62. $data['target_type'] = 2;
  63. if($data['audit_status']==1){
  64. (new MemberCardsAction())->add($id, $data);
  65. }
  66. if($data['audit_status']==2){
  67. //$data['audit_reason'] = '不同意'." ".$data['audit_reason'];
  68. (new MemberCardsAction())->add($id, $data);
  69. }
  70. });
  71. return true;
  72. }
  73. public function lists($params){
  74. $t_now =intval(date('Ym'));
  75. $where = $this->getFilter($params);
  76. return self::where($where)
  77. ->field('id,target_type,number,name,cost,start_time,end_time,create_time,order_at,audit_status')
  78. ->order('order_at asc,id desc')
  79. ->paginate(15)->each(function(&$item) use ($t_now){
  80. $item['ff_text'] = '';
  81. $item['start_time'] = substr($item['start_time'],0,7);
  82. $item['end_time'] = substr($item['end_time'],0,7);
  83. if ($item['audit_status'] == 1){
  84. $t1 = explode('-',$item['end_time']);
  85. $e_month = intval($t1[0].$t1[1]);//202204;
  86. $t2 = explode('-',$item['start_time']);
  87. $s_month = intval($t2[0].$t2[1]);//202204;
  88. if ($t_now > $e_month){
  89. $item['ff_text'] = '已过期';
  90. }elseif($t_now < $s_month){
  91. $item['ff_text'] = '未生效';
  92. }else{
  93. $item['ff_text'] = '生效中';
  94. }
  95. }
  96. });
  97. }
  98. public function listsDiff($params,$toExport=false){
  99. $t_now = date('Y-m-d');
  100. $where = $this->getFilter($params);
  101. $where[] = ['target_type','=',2];
  102. $query = self::where($where)
  103. ->field('id,target_type,number,name,cost,provider,start_time,end_time,create_time,order_at,audit_status')
  104. ->withCount(['draws'=>function($query){
  105. $query->where('target_type',2);
  106. }])
  107. ->withCount(['drawsChecked'=>function($query){
  108. $query->where('target_type',2)->where('check_status',1);
  109. }])
  110. ->withCount(['drawsExpired'=>function($query) use ($t_now){
  111. $query->where('target_type',2)->where('check_status',0)->where('use_end_time','<',$t_now);
  112. }])
  113. ->order('order_at asc');
  114. if ($toExport == true){
  115. $query = $query->select();
  116. }else{
  117. $query = $query->paginate(15);
  118. }
  119. return $query->each(function(&$item){
  120. $item['start_time'] = substr($item['start_time'],0,7);
  121. $item['end_time'] = substr($item['end_time'],0,7);
  122. });
  123. }
  124. public function getFilter($params){
  125. $where[] = ['is_delete','=',0];
  126. !empty($params['number']) && $where[] = ['number','like','%'.$params['number'].'%'];
  127. !empty($params['name']) && $where[] = ['name','like','%'.$params['name'].'%'];
  128. !empty($params['provider']) && $where[] = ['provider','like','%'.trim($params['provider']).'%'];
  129. if(isset($params['targetType']) && $params['targetType']>0 ){
  130. $where[] = ['target_type','=',$params['targetType']];
  131. }
  132. if(!empty($params['betweenTime'])){
  133. $timesDay = between_time($params['betweenTime']);
  134. $times['start_time'] = date('Y-m-01',$timesDay['start_time']);
  135. $nextM = mktime(0,0,0,date('m',$timesDay['end_time']) +1,1,date('Y',$timesDay['end_time']));
  136. $times['end_time'] = date('Y-m-d',$nextM - 1 );
  137. $where[] = ['start_time','between',[$times['start_time'],$times['end_time']]];
  138. }
  139. return $where;
  140. }
  141. /**
  142. * 编辑排序
  143. * @param $data
  144. * @return bool|int
  145. */
  146. public function editOrder($data)
  147. {
  148. $this->transaction(function () use ($data) {
  149. $m = self::detail($data['id']);
  150. $m->order_at = $data['order_at'];
  151. $m->save();
  152. });
  153. return true;
  154. }
  155. /**
  156. * 编辑排序
  157. * @param $data
  158. * @return bool|int
  159. */
  160. public function del($data)
  161. {
  162. self::where('id',$data['id'])->update(['is_delete'=>1]);
  163. return true;
  164. }
  165. public function getExchangeTypeAttr($value,$data){
  166. return json_decode($value);
  167. }
  168. /**
  169. * 异业福利领取记录导出
  170. * @param $param
  171. * @return array
  172. */
  173. public function diffwDrawExportData($param){
  174. $data['header'] = ['福利编号','福利名称','福利提供方', '价值','时间','实际领取数','已核销','已过期'];
  175. $data['filename'] = '异业福利领取记录导出';
  176. $data['data'] = [];
  177. $items = $this->listsDiff($param,true);
  178. $datas = [];
  179. foreach ($items as $item){
  180. $temp = [];
  181. $temp['number'] = $item['number'];
  182. $temp['name'] = $item['name'];
  183. $temp['provider'] = $item['provider'];
  184. $temp['cost'] = $item['cost'];
  185. $temp['times'] = $item['start_time'].'-'.$item['end_time'];
  186. $temp['draws_count'] = $item['draws_count'];
  187. $temp['draws_checked_count'] = $item['draws_checked_count'];
  188. $temp['draws_expired_count'] = $item['draws_expired_count'];
  189. $datas[] = $temp;
  190. }
  191. $data['data'] = $datas;
  192. return $data;
  193. }
  194. }