orderlogic.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: sicilon_IT
  5. * Date: 2021/6/25
  6. * Time: 15:52
  7. */
  8. namespace app\index\logic;
  9. use app\index\model\payordermodel;
  10. use app\index\model\scoreordermodel;
  11. use app\index\model\userinfomodel;
  12. use think\Db;
  13. class orderlogic
  14. {
  15. /*
  16. * 20210625
  17. */
  18. public function savenewpayorder($arr)
  19. {
  20. $t_p = new payordermodel();
  21. $rid = $t_p->insinfo($arr);
  22. return $rid;
  23. }
  24. /**
  25. * 根据订单号获取订单信息
  26. */
  27. public function getorderinfobyoutorderno($outorderno)
  28. {
  29. $t_p = new payordermodel();
  30. $info = $t_p->selinfobyorder($outorderno);
  31. return $info;
  32. }
  33. /**
  34. * 根据订单号获取积分订单信息
  35. */
  36. public function getscoreorderinfobyoutorderno($outorderno)
  37. {
  38. $m_so = new scoreordermodel();
  39. $info = $m_so->getInfo(['outorderno' => $outorderno]);
  40. return $info;
  41. }
  42. /***
  43. * 积分购买 下订单信息
  44. * wj
  45. * 20211108
  46. */
  47. public function createbuyscoreorder($arr)
  48. {
  49. if (!isset($arr['total_fee']) || !isset($arr['score'])) {
  50. return backarr(0, "请求错误");
  51. }
  52. $m_u = new userinfomodel();
  53. if (isset($arr['openid'])) {
  54. $wuInfo = $m_u->getInfo(['openid' => $arr['openid']]);
  55. }
  56. if (isset($arr['wid'])) {
  57. $wuInfo = $m_u->getInfo(['id' => $arr['wid']]);
  58. }
  59. if (empty($wuInfo)) {
  60. return backarr(0, "无用户信息");
  61. }
  62. if (!isset($arr['siliverscore']) || empty($arr['siliverscore'])) {
  63. $arr['siliverscore'] = 0;
  64. }
  65. $wid = $wuInfo['id'];
  66. $total_fee = $arr['total_fee'];
  67. $openid = $wuInfo['openid'];
  68. $score = $arr['score'];
  69. $ordrNo = createOrderNo();
  70. $total_fee = bcmul($total_fee, 100); //分
  71. $body = "水猫工匠(天津)科技有限公司-网上服务平台-积分购买";
  72. $orderData = [
  73. 'wid' => $wid,
  74. 'orderNo' => $ordrNo,
  75. 'total_fee' => $total_fee,
  76. 'body' => $body,
  77. 'openid' => $openid,
  78. 'time' => time(),
  79. 'score' => $score,
  80. 'siliverscore' => $arr['siliverscore'],
  81. ];
  82. return backarr(1, '', $orderData);
  83. }
  84. /***
  85. * 保存购买积分订单
  86. * 20211108
  87. * wj
  88. */
  89. public function savebuyscore($info)
  90. {
  91. $m_po = new payordermodel();
  92. $m_so = new scoreordermodel();
  93. $outorderno = $info['orderNo'];
  94. $poinfo = $m_po->selinfobyorder($outorderno);
  95. if ($poinfo) {
  96. return backarr(0, "支付单已存在");
  97. }
  98. $soinfo = $m_so->getInfo(['outorderno' => $outorderno]);
  99. if ($soinfo) {
  100. return backarr(0, "积分订单已存在");
  101. }
  102. //保存支付数据
  103. Db::startTrans();
  104. try {
  105. $openid = isset($info['openid']) ? $info['openid'] : '';
  106. $payorder['wid'] = $info['wid'];
  107. $payorder['openid'] = $openid;
  108. $payorder['prepay_id'] = $info['prepay_id'];
  109. $payorder['createtime'] = date('Y-m-d H:i:s', time());
  110. $payorder['payfee'] = $info['total_fee'];
  111. $payorder['outorderno'] = $info['orderNo'];
  112. $payorder['order_type'] = 2;
  113. $orderid = $m_po->insinfo($payorder);
  114. if (empty($orderid)) {
  115. throw new \Exception('支付单创建失败');
  116. }
  117. //保存积分数据
  118. $moInsertInfo = [
  119. 'orderid' => $orderid,
  120. 'score' => $info['score'],
  121. 'siliverscore' => $info['siliverscore'],
  122. 'wid' => $info['wid'],
  123. 'openid' => $openid,
  124. 'outorderno' => $info['orderNo'],
  125. ];
  126. $soid = $m_so->insertData($moInsertInfo);
  127. if (empty($soid)) {
  128. throw new \Exception('积分订单创建失败');
  129. }
  130. Db::commit();
  131. return backarr(1, '创建成功', ['orderid' => $orderid]);
  132. } catch (\Exception $e) {
  133. Db::rollback();
  134. return backarr(0, $e->getMessage());
  135. }
  136. }
  137. /***
  138. * 积分购买回调
  139. * wj
  140. * 20211108
  141. */
  142. public function callbackbuyscore($arr)
  143. {
  144. $fillField = ['outorderno', 'orderstatus', 'ispay'];
  145. foreach ($fillField as $key => $value) {
  146. if (!isset($arr[$value])) {
  147. return backarr(0, "请求错误");
  148. }
  149. }
  150. $m_so = new scoreordermodel();
  151. $m_po = new payordermodel();
  152. $outorderno = $arr['outorderno'];
  153. $orderstatus = $arr['orderstatus'];
  154. $isfrontback = 0;
  155. $isreatback = 0;
  156. if (isset($arr['is_front_back'])) {
  157. $isfrontback = 1;
  158. }
  159. if (isset($arr['is_reat_back'])) {
  160. $isreatback = 1;
  161. }
  162. $ispay = $arr['ispay'];
  163. $poinfo = $m_po->selinfobyorder($outorderno);
  164. if (empty($poinfo)) {
  165. return backarr(0, "无支付单信息");
  166. }
  167. if (1 == $poinfo['ispay']) {
  168. //已支付不再修改
  169. return backarr(2, "订单已支付");
  170. }
  171. $soinfo = $m_so->getInfo(['outorderno' => $outorderno]);
  172. if (empty($soinfo)) {
  173. return backarr(0, "无积分订单信息");
  174. }
  175. $poUpdateData = [
  176. 'paytime' => date('Y-m-d H:i:s'),
  177. 'orderstatus' => $orderstatus,
  178. 'ispay' => $ispay,
  179. 'is_front_back' => $isfrontback,
  180. 'is_reat_back' => $isreatback,
  181. ];
  182. $row = $m_po->updorederstatusbyid($poinfo['id'], $poUpdateData);
  183. if (empty($row)) {
  184. return backarr(0, "支付单修改失败");
  185. }
  186. if (1 == $ispay) {
  187. $soUpdateData = [
  188. 'paytime' => date('Y-m-d H:i:s'),
  189. ];
  190. $row = $m_so->updateinfo(['id' => $soinfo['id']], $soUpdateData);
  191. if (empty($row)) {
  192. return backarr(0, "积分订单修改失败");
  193. }
  194. }
  195. if (8 == $orderstatus) {
  196. return backarr(3, "支付失败");
  197. }
  198. if (3 == $orderstatus) {
  199. $reurnData = [
  200. 'orderid' => $poinfo['id'],
  201. 'outorderno' => $outorderno,
  202. ];
  203. return backarr(1, "支付成功", $reurnData);
  204. }
  205. }
  206. /**
  207. * 购买积分列表 仅pc端用
  208. * 20211228
  209. * wj
  210. */
  211. public function getlistbywhere($arr)
  212. {
  213. $t_f = new payordermodel();
  214. $where = [];
  215. $page = isset($arr['page']) && !empty($arr['page']) ? $arr['page'] : 1;
  216. $size = isset($arr['size']) && !empty($arr['size']) ? $arr['size'] : 10;
  217. if (isset($arr['wname']) && !empty($arr['wname']) && is_string($arr['wname'])) {
  218. $where['u.wname'] = ['like', "%" . $arr['wname'] . "%"];
  219. }
  220. if (isset($arr['telno']) && !empty($arr['telno']) && is_numeric($arr['telno'])) {
  221. $where['u.telno'] = ['like', "%" . $arr['telno'] . "%"];
  222. }
  223. if (isset($arr['ispay']) && is_numeric($arr['ispay']) && in_array($arr['ispay'], [0, 1])) {
  224. $where['po.ispay'] = $arr['ispay'];
  225. }
  226. if (isset($arr['ordertype']) && is_numeric($arr['ordertype'])) {
  227. $where['po.order_type'] = $arr['ordertype'];
  228. }
  229. if (isset($arr['createtime']) && is_array($arr['createtime'])) {
  230. $createtime = array_filter($arr['createtime']);
  231. if (2 == count($createtime)) {
  232. $where['po.createtime'] = ['between', $arr['createtime']];
  233. }
  234. }
  235. if (isset($arr['paytime']) && is_array($arr['paytime'])) {
  236. $createtime = array_filter($arr['paytime']);
  237. if (2 == count($createtime)) {
  238. $where['po.paytime'] = ['between', $arr['paytime']];
  239. }
  240. }
  241. $count = $t_f->getList($where, 'count');
  242. if ($count <= 0) {
  243. return backarr(0, "无数据");
  244. }
  245. $list = $t_f->getList($where, 'po.*,u.wname,u.telno', $page, $size);
  246. $data = [
  247. 'count' => $count,
  248. 'list' => $list,
  249. ];
  250. return backarr(1, "查询成功", $data);
  251. }
  252. }