VirtualOrder.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\model\order;
  13. use app\model\goods\GoodsStock;
  14. use app\model\goods\VirtualGoods;
  15. use app\model\verify\Verify as VerifyModel;
  16. /**
  17. * 虚拟订单
  18. *
  19. * @author Administrator
  20. *
  21. */
  22. class VirtualOrder extends OrderCommon
  23. {
  24. /*****************************************************************************************订单状态***********************************************/
  25. // 订单创建
  26. const ORDER_CREATE = 0;
  27. // 订单已支付
  28. const ORDER_PAY = 1;
  29. // 订单已收货
  30. const ORDER_TAKE_DELIVERY = 4;
  31. // 订单已结算完成
  32. const ORDER_COMPLETE = 10;
  33. // 订单已关闭
  34. const ORDER_CLOSE = -1;
  35. /**
  36. * 订单类型
  37. *
  38. * @var int
  39. */
  40. public $order_type = 4;
  41. /**
  42. */
  43. public $order_status = [
  44. self::ORDER_CREATE => [
  45. 'status' => self::ORDER_CREATE,
  46. 'name' => '待支付',
  47. 'is_allow_refund' => 0,
  48. 'action' => [
  49. [
  50. 'action' => 'orderClose',
  51. 'title' => '关闭订单',
  52. 'color' => ''
  53. ],
  54. [
  55. 'action' => 'orderAdjustMoney',
  56. 'title' => '调整价格',
  57. 'color' => ''
  58. ],
  59. ],
  60. 'member_action' => [
  61. [
  62. 'action' => 'orderClose',
  63. 'title' => '关闭订单',
  64. 'color' => ''
  65. ],
  66. [
  67. 'action' => 'orderPay',
  68. 'title' => '支付',
  69. 'color' => ''
  70. ],
  71. ],
  72. 'color' => ''
  73. ],
  74. self::ORDER_TAKE_DELIVERY => [
  75. 'status' => self::ORDER_TAKE_DELIVERY,
  76. 'name' => '已收货',
  77. 'is_allow_refund' => 1,
  78. 'action' => [
  79. ],
  80. 'member_action' => [
  81. ],
  82. 'color' => ''
  83. ],
  84. self::ORDER_COMPLETE => [
  85. 'status' => self::ORDER_COMPLETE,
  86. 'name' => '已完成',
  87. 'is_allow_refund' => 1,
  88. 'action' => [
  89. ],
  90. 'member_action' => [
  91. ],
  92. 'color' => ''
  93. ],
  94. self::ORDER_CLOSE => [
  95. 'status' => self::ORDER_CLOSE,
  96. 'name' => '已关闭',
  97. 'is_allow_refund' => 0,
  98. 'action' => [
  99. ],
  100. 'member_action' => [
  101. ],
  102. 'color' => ''
  103. ],
  104. ];
  105. /**
  106. * 订单支付
  107. * @param unknown $order_info
  108. */
  109. public function orderPay($order_info, $pay_type)
  110. {
  111. $pay_type_list = $this->getPayType();
  112. $data = array(
  113. "pay_status" => 1,
  114. "pay_time" => time(),
  115. "is_enable_refund" => 1,
  116. "pay_type" => $pay_type,
  117. "pay_type_name" => $pay_type_list[ $pay_type ]
  118. );
  119. $res = model('order')->update($data, [ [ 'order_id', "=", $order_info['order_id'] ] ]);
  120. //虚拟产品发货
  121. if ($order_info['is_lock'] == 0) {
  122. $this->orderCommonTakeDelivery($order_info['order_id']);
  123. }
  124. return $this->success($res);
  125. }
  126. /**
  127. * 订单自动收发货
  128. * @param unknown $order_id
  129. */
  130. public function orderTakeDelivery($order_id)
  131. {
  132. $order_info = model("order")->getInfo([ [ 'order_id', '=', $order_id ] ], 'order_no,site_id,site_name,member_id,order_type,
  133. sign_time,order_status,delivery_code,create_time,name,pay_time,pay_money,mobile,is_lock,order_money');
  134. if (empty($order_info))
  135. return $this->error([], "ORDER_EMPTY");
  136. model('order')->startTrans();
  137. try {
  138. //订单项变为已发货
  139. model('order_goods')->update([ 'delivery_status' => 1, "delivery_status_name" => "已发货" ], [ [ 'order_id', "=", $order_id ] ]);
  140. $order_goods_info = model('order_goods')->getInfo([ [ 'order_id', '=', $order_id ] ], 'sku_id,sku_name,sku_image,price,num');//订单项详情
  141. //创建待核销记录
  142. $verify_model = new VerifyModel();
  143. $item_array = array(
  144. [
  145. "img" => $order_goods_info["sku_image"],
  146. "name" => $order_goods_info["sku_name"],
  147. "price" => $order_goods_info["price"],
  148. "num" => $order_goods_info["num"],
  149. "remark_array" => [
  150. [ "title" => "联系人", "value" => $order_info['name'] . $order_info['mobile'] ]
  151. ]
  152. ],
  153. );
  154. $remark_array = array(
  155. [ "title" => '订单金额', "value" => $order_info["order_money"] ],
  156. [ "title" => '订单编号', "value" => $order_info["order_no"] ],
  157. [ "title" => '创建时间', "value" => time_to_date($order_info["create_time"]) ],
  158. [ "title" => '付款时间', "value" => time_to_date($order_info["pay_time"]) ],
  159. );
  160. $verify_content_json = $verify_model->getVerifyJson($item_array, $remark_array);
  161. $code_result = $verify_model->addVerify("virtualgoods", $order_info['site_id'], $order_info['site_name'], $verify_content_json);
  162. $code = $code_result["data"]["verify_code"];
  163. $result = $verify_model->qrcode($code, "all", "virtualgoods", "create");//生成二维码
  164. //自动收发货
  165. $order_data = array(
  166. 'virtual_code' => $code,
  167. );
  168. $res = model('order')->update($order_data, [ [ 'order_id', '=', $order_id ] ]);
  169. //生成所购买的产品
  170. $virtual_goods_model = new VirtualGoods();
  171. $virtual_goods_model->addGoodsVirtual($order_info["site_id"], $order_id, $order_info["order_no"], $order_goods_info["sku_id"], $order_goods_info["sku_name"], $code, $order_info["member_id"], $order_goods_info["sku_image"]);
  172. model('order')->commit();
  173. return $this->success($res);
  174. } catch (\Exception $e) {
  175. model('order')->rollback();
  176. return $this->error('', $e->getMessage());
  177. }
  178. }
  179. /**
  180. * 退款完成操作
  181. * @param $order_info
  182. */
  183. public function refund($order_goods_info)
  184. {
  185. //删除已退款订单项会员虚拟商品, 并退回商品库存
  186. //无需判断订单项是否需要入库
  187. $goods_stock_model = new GoodsStock();
  188. $item_param = array(
  189. "sku_id" => $order_goods_info["sku_id"],
  190. "num" => $order_goods_info["num"],
  191. );
  192. //返还库存
  193. $goods_stock_model->incStock($item_param);
  194. //删除用户的这条虚拟商品
  195. $goods_virtual_model = new VirtualGoods();
  196. $goods_virtual_model->deleteGoodsVirtual([ [ "order_id", "=", $order_goods_info["order_id"] ], [ "member_id", "=", $order_goods_info["member_id"] ] ]);
  197. }
  198. /**
  199. * 订单详情
  200. * @param $order_info
  201. */
  202. public function orderDetail($order_info)
  203. {
  204. $goods_virtual_model = new VirtualGoods();
  205. $info_result = $goods_virtual_model->getVirtualGoodsInfo([ [ "order_id", "=", $order_info["order_id"] ] ]);
  206. $info = $info_result["data"];
  207. $data["virtual_goods"] = $info;
  208. return $data;
  209. }
  210. }