CashierTrade.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\store\model\cashier;
  11. use addon\memberrecharge\model\RechargeOrder;
  12. use addon\store\model\goods\GoodsData;
  13. use addon\store\model\member\MemberOnceCard;
  14. use addon\store\model\stock\Stock;
  15. use addon\store\model\store\Store;
  16. use addon\store\model\yuyue\Yuyue;
  17. use app\model\BaseModel;
  18. use app\model\member\Member;
  19. use app\model\member\MemberAccount;
  20. use app\model\member\MemberLevelOrder;
  21. use app\model\order\OrderCommon;
  22. use app\model\order\OrderCreateTool;
  23. use app\model\order\OrderGoods;
  24. use app\model\site\Site;
  25. use app\model\system\Pay;
  26. use think\facade\Cache;
  27. use think\facade\Queue;
  28. /**
  29. * 收银业务操作
  30. *
  31. * @author Administrator
  32. *
  33. */
  34. class CashierTrade extends BaseModel
  35. {
  36. public function toSend($item,$order_info)
  37. {
  38. $action_type = $item[ 'trade_type' ];//操作类型
  39. switch ( $action_type ) {
  40. case 'oncecard'://卡项
  41. $result = $this->toOncecard($item, $order_info);
  42. break;
  43. case ''://实物
  44. $result = $this->toGoods($item, $order_info);
  45. break;
  46. case 'service'://服务
  47. $result = $this->toService($item, $order_info);
  48. break;
  49. }
  50. if (!empty($result)) {
  51. if ($result[ 'code' ] < 0) {
  52. return $result;
  53. }
  54. }
  55. //累加销量
  56. $goods_data_model = new GoodsData();
  57. $goods_data_model->incGoodsSaleNum($item);
  58. return $this->success();
  59. }
  60. /**
  61. * 生成卡项
  62. * @param $params
  63. * @return array
  64. */
  65. public function toOncecard($params, $order_info)
  66. {
  67. $member_oncecard_model = new MemberOnceCard();
  68. $cashier_type = $order_info['cashier_type'];
  69. $is_gift = $params['is_gift'];
  70. if($cashier_type == 'online' || $is_gift){
  71. $params['delivery_method'] = 'buy';
  72. }
  73. $num = $params['num'];
  74. $i = 0;
  75. $create_card_id_array = [];
  76. while($i < $num){
  77. $result = $member_oncecard_model->create($params);
  78. if ($result[ 'code' ] < 0) {
  79. return $result;
  80. }
  81. $create_card_id_array[] = $result['data'];
  82. $i++;
  83. }
  84. if(!empty($create_card_id_array)){
  85. $order_goods_id = $params['order_goods_id'];
  86. $create_card_id = implode(',', $create_card_id_array);
  87. $condition = array(
  88. ['order_goods_id', '=', $order_goods_id]
  89. );
  90. $data = array(
  91. 'create_card_id' => $create_card_id
  92. );
  93. model('store_cashier_order_goods')->update($data, $condition);
  94. }
  95. return $this->success();
  96. }
  97. /**
  98. * 生成预约服务
  99. * @param $order_info
  100. * @return array
  101. */
  102. public function toService($params, $order_info)
  103. {
  104. $extend = json_decode($params[ 'extend' ], true);
  105. $member_oncecard_model = new MemberOnceCard();
  106. $cashier_type = $order_info['cashier_type'];
  107. $is_gift = $params['is_gift'];
  108. if($cashier_type == 'online' || $is_gift){
  109. $result = $member_oncecard_model->create($params);
  110. if ($result[ 'code' ] < 0) {
  111. return $result;
  112. }
  113. $create_card_id_array = [$result['data']];
  114. if(!empty($create_card_id_array)){
  115. $order_goods_id = $params['order_goods_id'];
  116. $create_card_id = implode(',', $create_card_id_array);
  117. $condition = array(
  118. ['order_goods_id', '=', $order_goods_id]
  119. );
  120. $data = array(
  121. 'create_card_id' => $create_card_id
  122. );
  123. model('store_cashier_order_goods')->update($data, $condition);
  124. }
  125. }
  126. if (!empty($extend)) {
  127. $order_id = $params[ 'order_id' ];
  128. $order_condition = array (
  129. [ 'order_id', '=', $order_id ]
  130. );
  131. $order_info = model('store_cashier_order')->getInfo($order_condition);
  132. //去生成预约服务
  133. $goods_id = $params[ 'goods_id' ];
  134. $sku_id = $params[ 'sku_id' ];
  135. $store_id = $params[ 'store_id' ];
  136. $site_id = $params[ 'site_id' ];
  137. $member_id = $params[ 'member_id' ];
  138. $site_type = $order_info[ 'site_type' ];
  139. $yuyue_goods_list = [
  140. [
  141. 'sku_id' => $sku_id,
  142. 'goods_id' => $goods_id,
  143. 'servicer_id' => $extend[ 'servicer_id' ] ?? 0,
  144. 'card_id' => 0
  145. ]
  146. ];
  147. $yuyue_model = new Yuyue();
  148. $yuyue_data = array (
  149. 'date' => $extend[ 'date' ] ?? '',
  150. 'time' => $extend[ 'time' ] ?? '',
  151. 'remark' => $extend[ 'remark' ] ?? '',
  152. 'store_id' => $store_id,
  153. 'member_id' => $member_id,
  154. 'site_id' => $site_id,
  155. 'app_module' => $site_type,
  156. 'goods' => $yuyue_goods_list
  157. );
  158. $result = $yuyue_model->addYuyue($yuyue_data);
  159. }
  160. return $this->success();
  161. }
  162. /**
  163. * 实物处理
  164. * @param $params
  165. * @param $order_info
  166. * @return array
  167. */
  168. public function toGoods($params, $order_info){
  169. $cashier_type = $order_info['cashier_type'];
  170. $is_gift = $params['is_gift'];
  171. if($cashier_type == 'online' || $is_gift){
  172. $member_oncecard_model = new MemberOnceCard();
  173. $result = $member_oncecard_model->create($params);
  174. if ($result[ 'code' ] < 0) {
  175. return $result;
  176. }
  177. $create_card_id_array = [$result['data']];
  178. if(!empty($create_card_id_array)){
  179. $order_goods_id = $params['order_goods_id'];
  180. $create_card_id = implode(',', $create_card_id_array);
  181. $condition = array(
  182. ['order_goods_id', '=', $order_goods_id]
  183. );
  184. $data = array(
  185. 'create_card_id' => $create_card_id
  186. );
  187. model('store_cashier_order_goods')->update($data, $condition);
  188. }
  189. }else{
  190. //扣除库存
  191. $cashier_order_goods_model = new CashierOrderGoods();
  192. $result = $cashier_order_goods_model->orderGoodsOutput($params);
  193. }
  194. return $result;
  195. }
  196. /**
  197. *关闭收货相关的业务
  198. * @param $params
  199. */
  200. public function tradeClose($params)
  201. {
  202. $order_goods_id = $params[ 'order_goods_id' ];
  203. $order_id = $params[ 'order_id' ];
  204. $trade_type = $params[ 'trade_type' ];
  205. $create_card_id = $params['create_card_id'] ?? '';
  206. $refund_status = $params['refund_status'];
  207. if(!empty($create_card_id)){
  208. $create_card_id = explode(',', $create_card_id);
  209. $member_oncecard_model = new MemberOnceCard();
  210. $member_oncecard_model->memberOncecardClose($create_card_id);
  211. }
  212. //todo 考虑退次卡
  213. $result = event('CashierTradeClose', $params, true);
  214. if (empty($result)) {
  215. switch ( $trade_type ) {
  216. case 'oncecard'://卡项
  217. break;
  218. case 'service'://服务商品
  219. break;
  220. case ''://实物商品
  221. break;
  222. }
  223. return $this->success();
  224. } else {
  225. return $result;
  226. }
  227. }
  228. }