MemberBargain.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace app\api\controller;
  3. use think\facade\Db;
  4. use think\facade\Lang;
  5. /**
  6. * ============================================================================
  7. *
  8. * ============================================================================
  9. *
  10. * ----------------------------------------------------------------------------
  11. *
  12. * ============================================================================
  13. * 用户砍价控制器
  14. */
  15. class MemberBargain extends MobileMember
  16. {
  17. public function initialize()
  18. {
  19. parent::initialize();
  20. Lang::load(base_path() . 'home/lang/' . config('lang.default_lang') . '/memberbargain.lang.php');
  21. }
  22. /**
  23. * @api {POST} api/MemberBargain/add 发起砍价
  24. * @apiVersion 1.0.0
  25. * @apiGroup MemberBargain
  26. *
  27. * @apiHeader {String} X-DS-KEY 用户授权token
  28. *
  29. * @apiParam {Int} bargain_id 砍价id
  30. *
  31. * @apiSuccess {String} code 返回码,10000为成功
  32. * @apiSuccess {String} message 返回消息
  33. * @apiSuccess {Object} result 返回数据
  34. * @apiSuccess {Int} result.bargainorder_id 用户砍价id
  35. */
  36. public function add()
  37. {
  38. $bargain_id = input('param.bargain_id');
  39. if (!$bargain_id) {
  40. ds_json_encode(10001, lang('param_error'));
  41. }
  42. $pbargain_model = model('pbargain');
  43. $bargain_info = $pbargain_model->getOnlineBargainInfoByID($bargain_id);
  44. if (!$bargain_info) {
  45. ds_json_encode(10001, lang('bargain_not_exist'));
  46. }
  47. if ($bargain_info['member_id'] == $this->member_info['member_id']) {
  48. ds_json_encode(10001, lang('bargain_add_self'));
  49. }
  50. //是否已添加过正在进行的砍价活动
  51. $pbargainorder_model = model('pbargainorder');
  52. if ($pbargainorder_model->getOnePbargainorder(array(array('bargainorder_initiator_id', '=', $this->member_info['member_id']), array('bargain_id', '=', $bargain_info['bargain_id']), array('bargainorder_state', 'in', array(1, 2))))) {
  53. ds_json_encode(10001, lang('bargain_already_add'));
  54. }
  55. $bargainorder_id = $pbargainorder_model->addPbargainorder(array(
  56. 'bargainorder_initiator_id' => $this->member_info['member_id'],
  57. 'bargainorder_initiator_name' => $this->member_info['member_name'],
  58. 'store_id' => $bargain_info['store_id'],
  59. 'bargain_id' => $bargain_info['bargain_id'],
  60. 'bargain_name' => $bargain_info['bargain_name'],
  61. 'bargain_total' => $bargain_info['bargain_total'],
  62. 'bargain_goods_id' => $bargain_info['bargain_goods_id'],
  63. 'bargain_goods_name' => $bargain_info['bargain_goods_name'],
  64. 'bargain_goods_price' => $bargain_info['bargain_goods_price'],
  65. 'bargain_goods_image' => $bargain_info['bargain_goods_image'],
  66. 'bargainorder_current_price' => $bargain_info['bargain_goods_price'],
  67. 'bargainorder_begintime' => TIMESTAMP,
  68. 'bargainorder_endtime' => TIMESTAMP + $bargain_info['bargain_time'] * 3600,
  69. 'bargainorder_state' => 1,
  70. ));
  71. if (!$bargainorder_id) {
  72. ds_json_encode(10001, lang('ds_common_op_fail'));
  73. }
  74. ds_json_encode(10000, '', array('bargainorder_id' => $bargainorder_id));
  75. }
  76. /**
  77. * @api {POST} api/MemberBargain/add_log 用户砍价
  78. * @apiVersion 1.0.0
  79. * @apiGroup MemberBargain
  80. *
  81. * @apiHeader {String} X-DS-KEY 用户授权token
  82. *
  83. * @apiParam {Int} bargainorder_id 用户砍价id
  84. *
  85. * @apiSuccess {String} code 返回码,10000为成功
  86. * @apiSuccess {String} message 返回消息
  87. * @apiSuccess {Object} result 返回数据
  88. * @apiSuccess {Boolean} result.success 砍价是否成功
  89. * @apiSuccess {Float} result.price 砍价金额
  90. * @apiSuccess {Float} result.now_price 当前价格
  91. */
  92. public function add_log()
  93. {
  94. $bargainorder_id = input('param.bargainorder_id');
  95. if (!$bargainorder_id) {
  96. ds_json_encode(10001, lang('param_error'));
  97. }
  98. $pbargain_model = model('pbargain');
  99. $pbargainorder_model = model('pbargainorder');
  100. $pbargainlog_model = model('pbargainlog');
  101. Db::startTrans();
  102. $success = false; //砍价是否成功
  103. try {
  104. //是否正在进行的砍价活动
  105. $pbargainorder_info = $pbargainorder_model->getOnePbargainorder(array(array('bargainorder_id', '=', $bargainorder_id), array('bargainorder_state', '=', 1), array('bargainorder_endtime', '>', TIMESTAMP)), true);
  106. if (!$pbargainorder_info) {
  107. throw new \think\Exception(lang('bargain_not_exist'), 10006);
  108. }
  109. //不能帮自己砍
  110. if ($pbargainorder_info['bargainorder_initiator_id'] == $this->member_info['member_id']) {
  111. throw new \think\Exception(lang('bargain_self'), 10006);
  112. }
  113. //不能重复砍
  114. if ($pbargainlog_model->getOnePbargainlog(array('pbargainlog_member_id' => $this->member_info['member_id'], 'bargainorder_id' => $pbargainorder_info['bargainorder_id']))) {
  115. throw new \think\Exception(lang('bargain_repeat'), 10006);
  116. }
  117. $bargain_info = $pbargain_model->getOnlineBargainInfoByID($pbargainorder_info['bargain_id']);
  118. if (!$bargain_info) {
  119. throw new \think\Exception(lang('bargain_not_exist'), 10006);
  120. }
  121. //计算砍价金额
  122. $left_price = $pbargainorder_info['bargainorder_current_price'] - $bargain_info['bargain_floorprice'];
  123. $left_times = $pbargainorder_info['bargain_total'] - $pbargainorder_info['bargainorder_times'];
  124. if (($left_times - 1) > 0) {
  125. $max_price = ($left_price - ($left_times - 1) * 0.01) / ($left_times - 1);
  126. $price = round(mt_rand(1, intval($max_price * 100)) / 100, 2);
  127. $price = min(array($price, $bargain_info['bargain_max']));
  128. $now_price = $pbargainorder_info['bargainorder_current_price'] - $price;
  129. if (!$pbargainorder_model->editPbargainorder(array('bargainorder_id' => $pbargainorder_info['bargainorder_id']), array('bargainorder_times' => $pbargainorder_info['bargainorder_times'] + 1, 'bargainorder_current_price' => $now_price))) {
  130. throw new \think\Exception(lang('bargain_fail'), 10006);
  131. }
  132. } else {
  133. $price = $left_price;
  134. $now_price = $bargain_info['bargain_floorprice'];
  135. if (!$pbargainorder_model->editPbargainorder(array('bargainorder_id' => $pbargainorder_info['bargainorder_id']), array('bargainorder_state' => 2, 'bargainorder_times' => $pbargainorder_info['bargainorder_times'] + 1, 'bargainorder_current_price' => $now_price))) {
  136. throw new \think\Exception(lang('bargain_fail'), 10006);
  137. }
  138. }
  139. //新增砍价记录
  140. if (!$pbargainlog_model->addPbargainlog(array(
  141. 'pbargainlog_member_id' => $this->member_info['member_id'],
  142. 'pbargainlog_member_name' => $this->member_info['member_name'],
  143. 'pbargainlog_price' => $price,
  144. 'pbargainlog_time' => TIMESTAMP,
  145. 'bargain_id' => $pbargainorder_info['bargain_id'],
  146. 'bargainorder_id' => $pbargainorder_info['bargainorder_id'],
  147. ))) {
  148. throw new \think\Exception(lang('bargain_log_add_fail'), 10006);
  149. }
  150. Db::commit();
  151. } catch (\Exception $e) {
  152. Db::rollback();
  153. ds_json_encode(10001, $e->getMessage());
  154. }
  155. ds_json_encode(10000, '', array('success' => $success, 'price' => $price, 'now_price' => $now_price));
  156. }
  157. /**
  158. * @api {POST} api/MemberBargain/get_list 砍价活动列表
  159. * @apiVersion 1.0.0
  160. * @apiGroup MemberBargain
  161. *
  162. * @apiHeader {String} X-DS-KEY 用户授权token
  163. *
  164. * @apiParam {Int} page 页码
  165. * @apiParam {Int} per_page 每页数量
  166. *
  167. * @apiSuccess {String} code 返回码,10000为成功
  168. * @apiSuccess {String} message 返回消息
  169. * @apiSuccess {Object} result 返回数据
  170. * @apiSuccess {Object[]} result.bargainorder_list 砍价活动列表
  171. */
  172. public function get_list()
  173. {
  174. $pbargainorder_model = model('pbargainorder');
  175. $bargainorder_list = $pbargainorder_model->getPbargainorderList(array('bargainorder_initiator_id' => $this->member_info['member_id']), $this->pagesize);
  176. foreach ($bargainorder_list as $key => $val) {
  177. $bargainorder_list[$key]['bargain_goods_image_url'] = goods_cthumb($val['bargain_goods_image'], 480, $val['store_id']);
  178. }
  179. $result = array_merge(array('bargainorder_list' => $bargainorder_list), mobile_page($pbargainorder_model->page_info));
  180. ds_json_encode(10000, '', $result);
  181. }
  182. }