123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <?php
- declare (strict_types=1);
- namespace app\store\model\member;
- use app\common\enum\member\Action;
- use app\common\enum\member\AuditStatus;
- use app\common\library\helper;
- use app\common\model\member\Apply as ApplyModel;
- use app\common\model\member\MemberCardsAction as MemberCardsActionModel;
- use app\common\model\member\MemberGoods as MemberGoodsModel;
- use app\common\model\member\ApplyGoods as ApplyGoodsModel;
- use app\store\model\User;
- /**
- * 会员价商品申请记录表
- * Class MemberCards
- * @package app\common\model
- */
- class Apply extends ApplyModel
- {
- /**
- * 获取列表记录
- * @param array $param
- * @return \think\Paginator
- * @throws \think\db\exception\DbException
- */
- public function getList(array $param = [])
- {
- return $this->where($this->getFilter($param))
- ->order(['audit_status'=>'asc','id'=>'desc'])
- ->paginate();
- }
- /**
- * 获取查询条件
- * @param array $param
- * @return array
- */
- private function getFilter(array $param = [])
- {
- // 默认查询参数
- $params = $this->setQueryDefaultValue($param, [
- 'number' => '',
- 'betweenTime' => [], // 起止时间
- 'type' => 0,
- 'auditStatus' => -1,
- ]);
- // 检索查询条件
- $filter = [];
- //扣减单号
- if(isset($params['number']) && !empty($params['number'])){
- $filter[] = ['number', 'like', "%{$params['number']}%"];
- }
- //申请时间
- if (!empty($params['betweenTime'])) {
- $times = between_time_format($params['betweenTime']);
- $filter[] = ['create_time', '>=', $times['start_time']];
- $filter[] = ['create_time', '<', $times['end_time']];
- }
- //申请类型 1新增会员价商品 2修改会员折扣
- if(isset($params['type']) && $params['type']>0){
- $filter[] = ['type', '=', $params['type']];
- }
- //审核状态
- if(isset($params['auditStatus']) && $params['auditStatus']>-1){
- $filter[] = ['audit_status', '=', $params['auditStatus']];
- }
- return $filter;
- }
- /**
- * 新增记录
- * @param array $data
- * @return false|int
- */
- public function add(array $data)
- {
- $goodIds = helper::getArrayColumn($data['goods'],'goods_id');//获取商品ID集合
- if($data['type']==1){
- if(MemberGoodsModel::whereIn('goods_id',$goodIds)->count()){
- $this->error = '存在审核通过的会员价商品';
- return false;
- }
- }else{
- $memberGoodsIds = MemberGoodsModel::column('goods_id');
- $memberGoodsIds = array_unique($memberGoodsIds);
- if(count(array_diff($goodIds,$memberGoodsIds))>0){
- $this->error = '存在未审核通过的会员价商品';
- return false;
- }
- }
- $applyGoodsIds = $this->goodIds();
- if(count(array_intersect($goodIds,$applyGoodsIds))>0){
- $this->error = '存在审核中的会员价商品';
- return false;
- }
- //事物处理
- $this->transaction(function () use ($data) {
- //新增手工扣减记录
- $this->save($data);
- // 新增操作行为日志
- $actionData = [
- 'target_type' => Action::MEMBER_APPLY,
- 'audit_status' => AuditStatus::AUDIT_WAIT,
- 'audit_reason' => $data['audit_reason']??'',
- 'audit_user' => $data['audit_user'],
- 'audit_admin_id' => $data['audit_admin_id'],
- ];
- MemberCardsActionModel::add($this['id'], $actionData);
- //申请快照表写商品记录
- $appWhere = [];
- foreach ($data['goods'] as $good){
- $goodWhere['goods_id'] = $good['goods_id'];
- $goodWhere['discount'] = $good['discount'];
- $goodWhere['apply_id'] = $this->id;
- $goodWhere['create_time'] = time();
- $goodWhere['update_time'] = time();
- $appWhere[] = $goodWhere;
- }
- ApplyGoodsModel::insertAll($appWhere);
- });
- return true;
- }
- /**
- * 更新记录
- * @param array $data
- * @return bool|int
- */
- public function edit(array $data)
- {
- $goodIds = helper::getArrayColumn($data['goods'],'goods_id');//获取商品ID集合
- if(MemberGoodsModel::whereIn('goods_id',$goodIds)->where('audit_status',AuditStatus::AUDIT_WAIT)->count()!=count($goodIds)){
- $this->error = '存在未审核通过的会员价商品';
- return false;
- }
- //事物处理
- $this->transaction(function () use ($data) {
- //新增手工扣减记录
- $this->save($data);
- // 新增操作行为日志
- $actionData = [
- 'target_type' => Action::MEMBER_APPLY,
- 'audit_status' => $data['audit_status'],
- 'audit_reason' => $data['audit_reason']??'',
- 'audit_user' => $data['audit_user'],
- 'audit_admin_id' => $data['audit_admin_id'],
- ];
- MemberCardsActionModel::add($data['id'], $actionData);
- //申请快照表写商品记录
- foreach ($data['goods'] as $good){
- $goodWhere['goods_id'] = $good['goods_id'];
- $goodWhere['discount'] = $good['discount'];
- $goodWhere['apply_id'] = $this->id;
- $appWhere[] = $goodWhere;
- }
- ApplyGoodsModel::insertAll($appWhere);
- });
- return true;
- }
- /**
- * 审核记录
- * @param array $data
- * @return bool|int
- */
- public function audit(array $data)
- {
- //申请不处于待审核
- if($this->audit_status!=AuditStatus::AUDIT_WAIT){
- $this->error = '当前状态不能审核';
- return false;
- }
- //事物处理
- $this->transaction(function () use ($data) {
- //新增手工扣减记录
- $this->save($data);
- // 新增操作行为日志
- $actionData = [
- 'target_type' => Action::MEMBER_APPLY,
- 'audit_status' => $data['audit_status'],
- 'audit_reason' => $data['audit_reason']??'',
- 'audit_user' => $data['audit_user'],
- 'audit_admin_id' => $data['audit_admin_id'],
- ];
- MemberCardsActionModel::add($data['id'], $actionData);
- if($data['audit_status']==AuditStatus::AUDIT_PASS){//审核通过
- //往会员价商品表添加记录
- $goods = ApplyGoodsModel::where('apply_id',$this->id)->select();
- if($this['type']==1){
- $appWhere = [];
- foreach ($goods as $good){
- $goodWhere['goods_id'] = $good['goods_id'];
- $goodWhere['discount'] = $good['discount'];
- $appWhere[] = $goodWhere;
- }
- (new MemberGoodsModel())->saveAll($appWhere);
- }else{
- foreach ($goods as $good){
- MemberGoodsModel::updateBase(['discount'=>$good['discount']], ['goods_id'=>$good['goods_id']]);
- }
- }
- }
- });
- return true;
- }
- //获取审核中的商品ID集合
- public function goodIds(){
- $applyIds = self::where('audit_status',AuditStatus::AUDIT_WAIT)->column('id');
- $applyGoodsIds = ApplyGoodsModel::whereIn('apply_id',$applyIds)->column('goods_id');
- $applyGoodsIds = array_unique($applyGoodsIds);
- return $applyGoodsIds;
- }
- }
|