Apply.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\store\model\member;
  4. use app\common\enum\member\Action;
  5. use app\common\enum\member\AuditStatus;
  6. use app\common\library\helper;
  7. use app\common\model\member\Apply as ApplyModel;
  8. use app\common\model\member\MemberCardsAction as MemberCardsActionModel;
  9. use app\common\model\member\MemberGoods as MemberGoodsModel;
  10. use app\common\model\member\ApplyGoods as ApplyGoodsModel;
  11. use app\store\model\User;
  12. /**
  13. * 会员价商品申请记录表
  14. * Class MemberCards
  15. * @package app\common\model
  16. */
  17. class Apply extends ApplyModel
  18. {
  19. /**
  20. * 获取列表记录
  21. * @param array $param
  22. * @return \think\Paginator
  23. * @throws \think\db\exception\DbException
  24. */
  25. public function getList(array $param = [])
  26. {
  27. return $this->where($this->getFilter($param))
  28. ->order(['audit_status'=>'asc','id'=>'desc'])
  29. ->paginate();
  30. }
  31. /**
  32. * 获取查询条件
  33. * @param array $param
  34. * @return array
  35. */
  36. private function getFilter(array $param = [])
  37. {
  38. // 默认查询参数
  39. $params = $this->setQueryDefaultValue($param, [
  40. 'number' => '',
  41. 'betweenTime' => [], // 起止时间
  42. 'type' => 0,
  43. 'auditStatus' => -1,
  44. ]);
  45. // 检索查询条件
  46. $filter = [];
  47. //扣减单号
  48. if(isset($params['number']) && !empty($params['number'])){
  49. $filter[] = ['number', 'like', "%{$params['number']}%"];
  50. }
  51. //申请时间
  52. if (!empty($params['betweenTime'])) {
  53. $times = between_time_format($params['betweenTime']);
  54. $filter[] = ['create_time', '>=', $times['start_time']];
  55. $filter[] = ['create_time', '<', $times['end_time']];
  56. }
  57. //申请类型 1新增会员价商品 2修改会员折扣
  58. if(isset($params['type']) && $params['type']>0){
  59. $filter[] = ['type', '=', $params['type']];
  60. }
  61. //审核状态
  62. if(isset($params['auditStatus']) && $params['auditStatus']>-1){
  63. $filter[] = ['audit_status', '=', $params['auditStatus']];
  64. }
  65. return $filter;
  66. }
  67. /**
  68. * 新增记录
  69. * @param array $data
  70. * @return false|int
  71. */
  72. public function add(array $data)
  73. {
  74. $goodIds = helper::getArrayColumn($data['goods'],'goods_id');//获取商品ID集合
  75. if($data['type']==1){
  76. if(MemberGoodsModel::whereIn('goods_id',$goodIds)->count()){
  77. $this->error = '存在审核通过的会员价商品';
  78. return false;
  79. }
  80. }else{
  81. $memberGoodsIds = MemberGoodsModel::column('goods_id');
  82. $memberGoodsIds = array_unique($memberGoodsIds);
  83. if(count(array_diff($goodIds,$memberGoodsIds))>0){
  84. $this->error = '存在未审核通过的会员价商品';
  85. return false;
  86. }
  87. }
  88. $applyGoodsIds = $this->goodIds();
  89. if(count(array_intersect($goodIds,$applyGoodsIds))>0){
  90. $this->error = '存在审核中的会员价商品';
  91. return false;
  92. }
  93. //事物处理
  94. $this->transaction(function () use ($data) {
  95. //新增手工扣减记录
  96. $this->save($data);
  97. // 新增操作行为日志
  98. $actionData = [
  99. 'target_type' => Action::MEMBER_APPLY,
  100. 'audit_status' => AuditStatus::AUDIT_WAIT,
  101. 'audit_reason' => $data['audit_reason']??'',
  102. 'audit_user' => $data['audit_user'],
  103. 'audit_admin_id' => $data['audit_admin_id'],
  104. ];
  105. MemberCardsActionModel::add($this['id'], $actionData);
  106. //申请快照表写商品记录
  107. $appWhere = [];
  108. foreach ($data['goods'] as $good){
  109. $goodWhere['goods_id'] = $good['goods_id'];
  110. $goodWhere['discount'] = $good['discount'];
  111. $goodWhere['apply_id'] = $this->id;
  112. $goodWhere['create_time'] = time();
  113. $goodWhere['update_time'] = time();
  114. $appWhere[] = $goodWhere;
  115. }
  116. ApplyGoodsModel::insertAll($appWhere);
  117. });
  118. return true;
  119. }
  120. /**
  121. * 更新记录
  122. * @param array $data
  123. * @return bool|int
  124. */
  125. public function edit(array $data)
  126. {
  127. $goodIds = helper::getArrayColumn($data['goods'],'goods_id');//获取商品ID集合
  128. if(MemberGoodsModel::whereIn('goods_id',$goodIds)->where('audit_status',AuditStatus::AUDIT_WAIT)->count()!=count($goodIds)){
  129. $this->error = '存在未审核通过的会员价商品';
  130. return false;
  131. }
  132. //事物处理
  133. $this->transaction(function () use ($data) {
  134. //新增手工扣减记录
  135. $this->save($data);
  136. // 新增操作行为日志
  137. $actionData = [
  138. 'target_type' => Action::MEMBER_APPLY,
  139. 'audit_status' => $data['audit_status'],
  140. 'audit_reason' => $data['audit_reason']??'',
  141. 'audit_user' => $data['audit_user'],
  142. 'audit_admin_id' => $data['audit_admin_id'],
  143. ];
  144. MemberCardsActionModel::add($data['id'], $actionData);
  145. //申请快照表写商品记录
  146. foreach ($data['goods'] as $good){
  147. $goodWhere['goods_id'] = $good['goods_id'];
  148. $goodWhere['discount'] = $good['discount'];
  149. $goodWhere['apply_id'] = $this->id;
  150. $appWhere[] = $goodWhere;
  151. }
  152. ApplyGoodsModel::insertAll($appWhere);
  153. });
  154. return true;
  155. }
  156. /**
  157. * 审核记录
  158. * @param array $data
  159. * @return bool|int
  160. */
  161. public function audit(array $data)
  162. {
  163. //申请不处于待审核
  164. if($this->audit_status!=AuditStatus::AUDIT_WAIT){
  165. $this->error = '当前状态不能审核';
  166. return false;
  167. }
  168. //事物处理
  169. $this->transaction(function () use ($data) {
  170. //新增手工扣减记录
  171. $this->save($data);
  172. // 新增操作行为日志
  173. $actionData = [
  174. 'target_type' => Action::MEMBER_APPLY,
  175. 'audit_status' => $data['audit_status'],
  176. 'audit_reason' => $data['audit_reason']??'',
  177. 'audit_user' => $data['audit_user'],
  178. 'audit_admin_id' => $data['audit_admin_id'],
  179. ];
  180. MemberCardsActionModel::add($data['id'], $actionData);
  181. if($data['audit_status']==AuditStatus::AUDIT_PASS){//审核通过
  182. //往会员价商品表添加记录
  183. $goods = ApplyGoodsModel::where('apply_id',$this->id)->select();
  184. if($this['type']==1){
  185. $appWhere = [];
  186. foreach ($goods as $good){
  187. $goodWhere['goods_id'] = $good['goods_id'];
  188. $goodWhere['discount'] = $good['discount'];
  189. $appWhere[] = $goodWhere;
  190. }
  191. (new MemberGoodsModel())->saveAll($appWhere);
  192. }else{
  193. foreach ($goods as $good){
  194. MemberGoodsModel::updateBase(['discount'=>$good['discount']], ['goods_id'=>$good['goods_id']]);
  195. }
  196. }
  197. }
  198. });
  199. return true;
  200. }
  201. //获取审核中的商品ID集合
  202. public function goodIds(){
  203. $applyIds = self::where('audit_status',AuditStatus::AUDIT_WAIT)->column('id');
  204. $applyGoodsIds = ApplyGoodsModel::whereIn('apply_id',$applyIds)->column('goods_id');
  205. $applyGoodsIds = array_unique($applyGoodsIds);
  206. return $applyGoodsIds;
  207. }
  208. }