Product.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <?php
  2. namespace app\home\controller;
  3. use think\Lang;
  4. use think\Cache;
  5. use think\Request;
  6. use think\Controller;
  7. use think\Validate;
  8. /**
  9. * 主页管理类
  10. */
  11. class Product extends Common
  12. {
  13. /**
  14. * 构造函数
  15. *
  16. * @access public
  17. */
  18. public function __construct()
  19. {
  20. parent::__construct();
  21. }
  22. /**
  23. * 产品与服务
  24. *
  25. * @access public
  26. * @return array JsonString
  27. */
  28. public function product()
  29. {
  30. $fatherProductField = [
  31. 'product_name',
  32. 'product_content',
  33. 'product_img',
  34. 'product_id',
  35. ];
  36. $fatherProductWhere = [
  37. 'product_pid' => 0,
  38. 'product_status' => 1,
  39. ];
  40. $getFatherProduct = model('Product')->getSelect($fatherProductField, $fatherProductWhere);
  41. $this->assign('fatherProduct', $getFatherProduct);
  42. $id = input('get.id') ?? $getFatherProduct[0]->product_id;
  43. $productWhere = [
  44. 'product_pid' => $id,
  45. 'product_status' => 1,
  46. ];
  47. $getProduct = model('Product')->getSelect($fatherProductField, $productWhere);
  48. $this->assign('product', $getProduct);
  49. $this->assign('id', $id);
  50. return $this->fetch();
  51. }
  52. /**
  53. * 产品与服务详情
  54. *
  55. * @access public
  56. * @return array JsonString
  57. */
  58. public function details()
  59. {
  60. $findProductinfo = model('Productinfo')->getFind();
  61. $id = input('get.id') ?? $findProductinfo->product_id;
  62. $productWhere = [
  63. 'product_id' => $id,
  64. ];
  65. $getProductInfo = model('Productinfo')->getSelect($productWhere);
  66. $this->assign('productInfo', $getProductInfo);
  67. $productWhere['product_status'] = 1;
  68. $getProduct = model('Product')->getFind($productWhere);
  69. $this->assign('product', $getProduct);
  70. $fatherProductWhere = [
  71. 'product_id' => $getProduct->product_pid,
  72. ];
  73. $getFatherProduct = model('Product')->getFind($fatherProductWhere);
  74. $this->assign('fatherProduct', $getFatherProduct);
  75. $getRenewal = model('Renewal')->getRenewal();
  76. $this->assign('renewal', $getRenewal);
  77. return $this->fetch();
  78. }
  79. /**
  80. * 选购产品
  81. *
  82. * @access public
  83. * @return array JsonString
  84. */
  85. public function shopping()
  86. {
  87. $userId = session('user_id');
  88. $userInfo = model('userinfo')->getInfo($userId);
  89. $this->assign('userInfo', $userInfo);
  90. $product_id = input('get.product_id');
  91. $productWhere = [
  92. 'product_id' => $product_id,
  93. 'product_status' => 1,
  94. ];
  95. $getProduct = model('Product')->getFind($productWhere);
  96. $this->assign('product', $getProduct);
  97. $fatherProductWhere = [
  98. 'product_id' => $getProduct->product_pid,
  99. ];
  100. $getFatherProduct = model('Product')->getFind($fatherProductWhere);
  101. $this->assign('fatherProduct', $getFatherProduct);
  102. $renewal_identity = input('get.renewal_identity');
  103. $renewalWhere = [
  104. 'renewal_identity' => $renewal_identity,
  105. ];
  106. $getRenewal = model('Renewal')->findRenewal($renewalWhere);
  107. $this->assign('renewal', $getRenewal);
  108. return $this->fetch();
  109. }
  110. public function purchased()
  111. {
  112. $product_id = input('post.product_id');
  113. if ($product_id) {
  114. $renewal_identity = input('post.renewal_identity');
  115. $userId = session('user_id');
  116. $userInfo = model('userinfo')->getInfo($userId);
  117. $productWhere = [
  118. 'product_id' => $product_id,
  119. 'product_status' => 1,
  120. ];
  121. $product = model('Product')->getFind($productWhere);
  122. $fatherProductWhere = [
  123. 'product_id' => $product->product_pid,
  124. ];
  125. $getFatherProduct = model('Product')->getFind($fatherProductWhere);
  126. if (!$product) {
  127. return ["success" => false, "msg" => "错误:该产品已停售"];
  128. }
  129. switch($renewal_identity){
  130. case 1:
  131. $money = $product->product_TypeOne;
  132. break;
  133. case 2:
  134. $money = $product->product_TypeTwo;
  135. break;
  136. case 3:
  137. $money = $product->product_TypeThree;
  138. break;
  139. case 4:
  140. $money = $product->product_TypeFour;
  141. break;
  142. }
  143. if (isset($money) && $money <= $userInfo->userInfo_money) {
  144. $findRenewal = model('renewal')->findRenewal(['renewal_status' => 1, 'renewal_identity' => $renewal_identity]);
  145. } else {
  146. return ["msg" => "错误:您的余额不足", "success"=>false];
  147. }
  148. if (!$findRenewal) {
  149. return ["msg" => "错误:该期限已不支持购买", "success"=>false];
  150. }
  151. $day = $findRenewal->renewal_day;
  152. $cashMoney = $userInfo->userInfo_money - $money;
  153. $dbUserInfo = model('Userinfo');
  154. $dbUserProduct = model('Userproduct');
  155. $dbOrder = model('Order');
  156. $capitalMovements = model('CapitalMovements');
  157. $dbUserInfo->startTrans();
  158. $dbUserProduct->startTrans();
  159. $dbOrder->startTrans();
  160. $capitalMovements->startTrans();
  161. try {
  162. $userProduct = model('Userproduct')->findUserProduct(['user_id'=>$userId,'product_id'=>$product_id]);
  163. $dbUserInfo->updateInfo($userId, ['userInfo_money' => $cashMoney]);
  164. $nowDate = date('Y-m-d');
  165. $orderID = OrderID();
  166. $data['userProduct_identity'] = $orderID;
  167. $data['userProduct_buyTime'] = $nowDate;
  168. if ($userProduct) {
  169. $data['userProduct_dayNumber'] = $userProduct->userProduct_dayNumber + $day;
  170. if ($userProduct->userProduct_maturityTime > $nowDate) {
  171. $data['userProduct_maturityTime'] = date('Y-m-d', strtotime(intval($day) . " day", strtotime($userProduct->userProduct_maturityTime)));
  172. } else {
  173. $data['userProduct_maturityTime'] = date('Y-m-d', strtotime(intval($day) . " day"));
  174. }
  175. $dbUserProduct->updateUserProduct(['userProduct_id' => $userProduct->userProduct_id], $data);
  176. } else {
  177. $data['userProduct_dayNumber'] = $day;
  178. $data['user_id'] = $userId;
  179. $data['product_id'] = $product_id;
  180. $data['userProduct_maturityTime'] = date('Y-m-d', strtotime(intval($day) . " day"));
  181. $dbUserProduct->addUserProduct($data);
  182. }
  183. $addOrderData = [
  184. 'order_identity' => $orderID,
  185. 'user_id' => $userId,
  186. 'product_id' => $product_id,
  187. 'order_dayNumber' => $day,
  188. 'order_buyTime' => $nowDate,
  189. 'order_money' => $money,
  190. ];
  191. $dbOrder->addOrder($addOrderData);
  192. $cplMvtData = [
  193. 'user_id' => $userId,
  194. 'capitalMovements_describe' => '购买服务:' . $getFatherProduct->product_name . ' ▪ ' . $product->product_name,
  195. 'capitalMovements_identity' => $orderID,
  196. 'capitalMovements_create' => $nowDate,
  197. 'capitalMovements_update' => $nowDate,
  198. 'capitalMovements_money' => $money,
  199. 'capitalMovements_type' => 2,
  200. 'capitalMovements_cash' => $cashMoney,
  201. 'capitalMovements_operator' => $userId,
  202. ];
  203. $capitalMovements->add($cplMvtData);
  204. // 提交事务
  205. $dbUserInfo->commit();
  206. $dbUserProduct->commit();
  207. $dbOrder->commit();
  208. $capitalMovements->commit();
  209. $returnData = [
  210. "msg" => "恭喜你购买成功",
  211. "success"=> true,
  212. "data"=> json_encode([
  213. "orderID" => $orderID,
  214. "product" => $getFatherProduct->product_name . " ▪ " . $product->product_name,
  215. "order_money" => $money,
  216. "userProduct_maturityTime" => $data['userProduct_maturityTime'],
  217. ]),
  218. ];
  219. return $returnData;
  220. } catch (\Exception $e) {
  221. // 回滚事务
  222. $dbUserInfo->rollBack();
  223. $dbUserProduct->rollBack();
  224. $dbOrder->rollBack();
  225. $capitalMovements->rollBack();
  226. return ["msg" => "操作失败", "success"=>false];
  227. }
  228. }
  229. $data = json_decode(input('get.data'));//print_r($data->orderID);die;
  230. $this->assign('data', $data);
  231. return $this->fetch();
  232. }
  233. }