DiagnosisOrder.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/11/02
  6. */
  7. namespace app\admin\model\diagnosis;
  8. use app\admin\model\store\StoreProduct;
  9. use app\admin\model\system\SystemAdmin;
  10. use app\admin\model\user\UserEquity;
  11. use app\models\article\ArticleContent;
  12. use app\models\user\User;
  13. use app\models\user\UserBill;
  14. use crmeb\traits\ModelTrait;
  15. use crmeb\basic\BaseModel;
  16. use think\model\concern\SoftDelete;
  17. /**
  18. * 图文管理 Model
  19. * Class WechatNews
  20. * @package app\admin\model\wechat
  21. */
  22. class DiagnosisOrder extends BaseModel
  23. {
  24. use ModelTrait;
  25. protected $pk = 'id';
  26. protected $name = 'diagnosis_order';
  27. protected $autoWriteTimestamp = true;
  28. use SoftDelete;
  29. protected $deleteTime = 'delete_time';
  30. public static function list($where, $admin)
  31. {
  32. $model = self::alias('a')
  33. ->field('a.*,b.nickname,c.nickname as re_nickname')
  34. ->leftJoin('user b', 'a.uid = b.uid')
  35. ->leftJoin('user c', 'a.order_receiving = c.uid')
  36. ->leftJoin('diagnosis_order_attr d', 'd.oid = a.id')
  37. ->order('a.id DESC');
  38. if ($where['name'])$model->where('a.uid|b.nickname' , 'like', '%'.$where['name'].'%');
  39. if ($where['order_id'])$model->where('a.order_id' , 'like', '%'.$where['order_id'].'%');
  40. if ($where['rece'])$model->where('a.order_receiving|c.nickname' , 'like', '%'.$where['rece'].'%');
  41. if ($where['type'])$model->where('a.type' , $where['type']);
  42. if ($where['pay_type']) $model->where('a.pay_type', $where['pay_type']);
  43. if ($admin['roles'] > 0){
  44. if ($admin['roles'] == 2){
  45. $model->where('d.province', 'like', '%'.$admin['province'].'%');
  46. }
  47. if ($admin['roles'] == 3){
  48. $city = explode(',', $admin['city']);
  49. $model->where('d.city', 'like', '%'.$city[1].'%');
  50. }
  51. if ($admin['roles'] == 4){
  52. $model->where('d.hospital_id', $admin['hospital_id']);
  53. }
  54. }
  55. if ($where['status'] == 0 && $where['status'] != ''){
  56. $model->where('a.status', 0)->where('paid', 1);
  57. }elseif ($where['status'] == 1){
  58. $model->where('a.status', 1)->where('paid', 1);
  59. }elseif ($where['status'] == 2){
  60. $model->where('a.status', 2)->where('paid', 1);
  61. }elseif ($where['status'] == 3){
  62. $model->where('a.status', 3)->where('paid', 1);
  63. }elseif ($where['status'] == 4){
  64. $model->where('a.after_sales', 1)->where('paid', 1);
  65. }elseif ($where['status'] == 5){
  66. $model->where('a.status', -1)->where('paid', 1);
  67. }elseif ($where['status'] == 6){
  68. $model->where('a.status', -2)->where('paid', 1);
  69. }
  70. if (isset($where['data']) && $where['data'] !== '') {
  71. $model = self::getModelTime($where, $model, 'create_time');
  72. }
  73. $data['count'] = $model->count();
  74. if ($where['page'] && $where['limit']){
  75. $model->page($where['page'], $where['limit']);
  76. }else{
  77. $model->page(20, 1);
  78. }
  79. $list = $model->select();
  80. foreach ($list as &$item)
  81. {
  82. if ($item['paid'] == 0){
  83. $item['paid'] = '未支付';
  84. $item['status'] = '未支付';
  85. } else{
  86. if ($item['status'] == 0){
  87. $item['status'] = '待接单';
  88. }elseif ($item['status'] == 1){
  89. $item['status'] = '已接单';
  90. }elseif ($item['status'] == 2){
  91. if ($item['after_sales'] == 1){
  92. $item['status'] = '申请售后中';
  93. }else{
  94. $item['status'] = '待确认';
  95. }
  96. }elseif ($item['status'] == 3){
  97. if ($item['after_sales'] == 1){
  98. $item['status'] = '申请售后中';
  99. }else{
  100. $item['status'] = '已完成';
  101. }
  102. }elseif ($item['status'] == -1){
  103. if ($item['refund_status'] == 0){
  104. $item['status'] = '待退款';
  105. }elseif ($item['refund_status'] == 1){
  106. $item['status'] = '已退款';
  107. }
  108. }elseif ($item['status'] == -2){
  109. if ($item['refund_status'] == 0){
  110. $item['status'] = '过期订单';
  111. }elseif ($item['refund_status'] == 1){
  112. $item['status'] = '已退款';
  113. }
  114. }
  115. }
  116. if ($item['paid'] == 1) $item['paid'] = '已支付';
  117. if ($item['pay_type'] == 1) $item['pay_type'] = '余额';
  118. if ($item['pay_type'] == 2) $item['pay_type'] = '微信';
  119. if ($item['pay_type'] == 3) $item['pay_type'] = '支付宝';
  120. $item['cate'] = implode(',',DiagnosisCate::where('id', 'in', $item['cate_id'])->column('name'));
  121. if ($item['type'] == 1){
  122. $item['type'] = '陪诊';
  123. }elseif ($item['type'] == 2){
  124. $item['type'] = '代办';
  125. }
  126. }
  127. $data['data'] = $list;
  128. return $data;
  129. }
  130. /**
  131. * 生成订单
  132. * @param $order
  133. * @param $pay_type
  134. * @param $uid
  135. * @return DiagnosisOrder|\think\Model
  136. */
  137. public static function create_order($order, $pay_type, $uid)
  138. {
  139. $res1 = self::create([
  140. 'cate_id' => $order['cate_id'],
  141. 'order_id' => self::getNewOrderId(),
  142. 'uid' => $uid,
  143. 'ot_price' => $order['ot_price'],
  144. 'pay_price' => $order['pay_price'],
  145. 'commission' => $order['commission'],
  146. 'pay_type' => $pay_type,
  147. 'type' => $order['type'],
  148. 'user_card_id' => $order['user_card_id']
  149. ]);
  150. $order['attr']['oid'] = $res1['id'];
  151. $res2 = DiagnosisOrderAttr::create($order['attr']);
  152. return $res1;
  153. }
  154. /**
  155. * 生成订单唯一id
  156. * @param $uid 用户uid
  157. * @return string
  158. */
  159. public static function getNewOrderId()
  160. {
  161. do {
  162. list($msec, $sec) = explode(' ', microtime());
  163. $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
  164. $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
  165. } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
  166. return $orderId;
  167. }
  168. /**
  169. * 余额支付
  170. * @param $orderId
  171. * @return bool
  172. * @throws \think\db\exception\DataNotFoundException
  173. * @throws \think\db\exception\DbException
  174. * @throws \think\db\exception\ModelNotFoundException
  175. */
  176. public static function yuPay($orderId)
  177. {
  178. self::beginTrans();
  179. $order = self::where('order_id', $orderId)->find();
  180. try {
  181. if ($order['pay_price'] == 0){
  182. self::paySuccess($orderId);
  183. }else{
  184. if (!$order)return self::setErrorInfo('订单不存在!');
  185. $user = User::where('uid', $order['uid'])->find();
  186. if ($user['now_money'] < $order['pay_price']) return self::setErrorInfo('余额不足!', true);
  187. User::where('uid', $order['uid'])->dec('now_money', $order['pay_price'])->update();
  188. self::paySuccess($orderId);
  189. }
  190. self::commitTrans();
  191. return true;
  192. } catch (\Exception $e) {
  193. self::rollbackTrans();
  194. return self::setErrorInfo($e->getMessage());
  195. }
  196. }
  197. /**
  198. * 支付成功后
  199. * @param $orderId
  200. * @param $paytype
  201. * @param $formId
  202. * @return bool
  203. * @throws \think\db\exception\DataNotFoundException
  204. * @throws \think\db\exception\DbException
  205. * @throws \think\db\exception\ModelNotFoundException
  206. */
  207. public static function paySuccess($orderId, $paytype = 'weixin', $formId = '')
  208. {
  209. $order = self::where('order_id', $orderId)->find();
  210. if (!$order)return self::setErrorInfo('订单不存在!');
  211. if ($order['paid'] == 1) return self::setErrorInfo('订单已支付!');
  212. if ($order['user_card_id']){
  213. self::card($order['user_card_id'], $order['cate_id'], $order['uid']);
  214. }
  215. self::where('order_id', $orderId)->update(['paid' => 1, 'pay_time' => time()]);
  216. $now_money = User::where('uid', $order['uid'])->value('now_money');
  217. UserBill::expend('支付订单', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元创建订单');
  218. return true;
  219. }
  220. /**
  221. * 优惠卡使用减一
  222. * @param $card_id
  223. * @return void
  224. * @throws \think\db\exception\DataNotFoundException
  225. * @throws \think\db\exception\DbException
  226. * @throws \think\db\exception\ModelNotFoundException
  227. */
  228. public static function card($card_id, $c_id, $uid)
  229. {
  230. $c_id = explode(',', $c_id);
  231. $equity = [];
  232. foreach ($c_id as $item){
  233. $id = UserEquity::where('user_card_id', 'in', $card_id)->where('uid', $uid)->where('c_id', 'like', '%'.$item.'%')->value('id');
  234. if ($id){
  235. $equity[] = $id;
  236. }
  237. }
  238. $equity = array_unique($equity);
  239. $equitys = UserEquity::where('id', 'in', $equity)->select();
  240. if ($equitys){
  241. foreach ($equitys as $item){
  242. if ($item['type'] == 2){
  243. if ($item['number'] == 1){
  244. UserEquity::where('id', $item['id'])->update(['use' => 0]);
  245. }
  246. UserEquity::where('id', $item['id'])->dec('number')->update();
  247. }
  248. }
  249. }
  250. }
  251. /**
  252. * 自动确认
  253. * @return void
  254. * @throws \think\db\exception\DataNotFoundException
  255. * @throws \think\db\exception\DbException
  256. * @throws \think\db\exception\ModelNotFoundException
  257. */
  258. public static function automatic_confirmation()
  259. {
  260. $order = DiagnosisOrder::where('status', 2)->where('after_sales', 0)->select();
  261. if (count($order) > 0)
  262. {
  263. foreach ($order as $item)
  264. {
  265. $time = $item['up_time'] + (86400 * 7); // 上传时间的七天后
  266. if (time() > $time){
  267. // 大于七天自动完成
  268. DiagnosisOrder::where('id', $item['id'])->update(['status' => 3]);
  269. $user = User::where('uid', $item['order_receiving'])->find();
  270. UserBill::income('完成订单佣金', $item['order_receiving'], 'now_money', 'brokerage', $item['commission'], '', $user['brokerage_price']+$item['commission'], '完成订单佣金');
  271. User::where('uid', $item['order_receiving'])->inc('brokerage_price', $item['commission'])->update();
  272. }
  273. }
  274. }
  275. }
  276. }