CashierOrderOffset.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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\member\MemberOnceCard;
  13. use addon\store\model\store\Store;
  14. use app\model\BaseModel;
  15. use app\model\member\Member;
  16. use app\model\member\MemberAccount;
  17. use app\model\member\MemberCoupon;
  18. use app\model\member\MemberLevelOrder;
  19. use app\model\order\OrderCommon;
  20. use app\model\order\OrderCreateTool;
  21. use app\model\order\OrderGoods;
  22. use app\model\site\Site;
  23. use app\model\system\Pay;
  24. use think\facade\Cache;
  25. use think\facade\Log;
  26. use think\facade\Queue;
  27. /**
  28. * 收银订单抵扣
  29. *
  30. * @author Administrator
  31. *
  32. */
  33. class CashierOrderOffset extends BaseModel
  34. {
  35. public $type = array(
  36. [
  37. 'name' => 'coupon',
  38. 'title' => '代金券'
  39. ],
  40. [
  41. 'name' => 'hongbao',
  42. 'title' => '红包'
  43. ],
  44. [
  45. 'name' => 'point',
  46. 'title' => '积分'
  47. ],
  48. [
  49. 'name' => 'balance',
  50. 'title' => '储值余额'
  51. ],
  52. [
  53. 'name' => 'balance_money',
  54. 'title' => '现金余额'
  55. ],
  56. );
  57. /**
  58. * 增加订单优惠项
  59. * @param $params
  60. * @return array
  61. */
  62. public function addOrderOffset($params){
  63. $order_id = $params['order_id'];
  64. $type = $params['type'];
  65. $num = $params['num'];
  66. $relate_id = $params['relate_id'] ?? 0;
  67. $offset_money = $params['offset_money'];
  68. $order_goods_id = $params['order_goods_id'] ?? '';
  69. $site_id = $params['site_id'];
  70. $store_id = $params['store_id'] ?? 0;
  71. $data = array(
  72. 'order_id' => $order_id,
  73. 'type' => $type,
  74. 'num' => $num,
  75. 'relate_id' => $relate_id,
  76. 'offset_money' => $offset_money,
  77. 'order_goods_id' => $order_goods_id,
  78. 'site_id' => $site_id,
  79. 'store_id' => $store_id
  80. );
  81. model('store_cashier_order_offset')->add($data);
  82. return $this->success();
  83. }
  84. /**
  85. * 获取优惠券记录
  86. * @param $condition
  87. * @param string $field
  88. */
  89. public function getOrderOffsetList($condition, $field = '*', $order = ''){
  90. $list = model('store_cashier_order_offset')->getList($condition, $field, $order);
  91. return $this->success($list);
  92. }
  93. /**
  94. * 计算订单项的店铺优惠金额
  95. * @param $order_goods_id
  96. */
  97. public function getOrderGoodsOffsetMoney($order_goods_id){
  98. $condition = array(
  99. ['order_goods_id', '=', $order_goods_id],
  100. ['type', '=', 'coupon'],
  101. );
  102. $offset_list = $this->getOrderOffsetList($condition)['data'] ?? [];
  103. $offset_money = 0;
  104. if(!empty($offset_list)){
  105. foreach($offset_list as $k => $v){
  106. $offset_money += $v['offset_money'];
  107. }
  108. }
  109. return $offset_money;
  110. }
  111. /**
  112. * 返还订单相关优惠和抵扣
  113. * @param $params
  114. */
  115. public function orderOffsetRefund($params){
  116. $order_id = $params['order_id'];
  117. $site_id = $params['site_id'];
  118. $member_id = $params['member_id'];
  119. $limit = $params['limit'] ?? [];
  120. $offset_condition = array(
  121. ['order_id', '=', $order_id]
  122. );
  123. $offset_list = $this->getOrderOffsetList($offset_condition)['data'] ?? [];
  124. foreach($offset_list as $k => $v){
  125. $type = $v['type'];
  126. if(!empty($limit) && !in_array($type, $limit)){
  127. continue;
  128. }
  129. $num = $v['num'];
  130. $relate_id = $v['relate_id'];
  131. switch($type){
  132. case 'balance'://储值余额
  133. $from_type = 'refund';
  134. $relate_tag = '储值余额返还';
  135. $remark = '订单关闭,返还储值余额:' . $num.',订单id:'.$order_id;
  136. $member_account_model = new MemberAccount();
  137. $account_title = '订单关闭,返还储值余额';
  138. $result = $member_account_model->addMemberAccount($site_id, $member_id, 'balance', $num, $from_type, $relate_tag, $remark, $account_title);
  139. break;
  140. case 'balance_money'://现金余额
  141. $from_type = 'refund';
  142. $relate_tag = '现金余额返还';
  143. $remark = '订单关闭,返还现金余额:' . $num.',订单id:'.$order_id;
  144. $account_title = '订单关闭,返还现金余额';
  145. $member_account_model = new MemberAccount();
  146. $result = $member_account_model->addMemberAccount($site_id, $member_id, 'balance_money', $num, $from_type, $relate_tag, $remark, $account_title);
  147. break;
  148. case 'coupon'://优惠券
  149. $member_coupon_model = new MemberCoupon();
  150. $coupon_params = array(
  151. 'coupon_id' => $relate_id,
  152. 'site_id' => $site_id,
  153. 'member_id' => $member_id
  154. );
  155. $result = $member_coupon_model->recovery($coupon_params);
  156. break;
  157. case 'point'://积分
  158. $from_type = 'refund';
  159. $relate_tag = '积分返还';
  160. $remark = '订单关闭,返还积分:' . $num . ',订单id:'.$order_id;
  161. $account_title = '订单关闭,返还积分';
  162. $member_account_model = new MemberAccount();
  163. $result = $member_account_model->addMemberAccount($site_id, $member_id, 'point', $num, $from_type, $relate_tag, $remark,$account_title);
  164. break;
  165. case 'hongbao'://红包
  166. $hongbao_model = new Hongbao();
  167. $hongbao_params = array(
  168. 'member_hongbao_id' => $relate_id,
  169. 'site_id' => $site_id,
  170. 'member_id' => $member_id
  171. );
  172. $result = $hongbao_model->recovery($hongbao_params);
  173. break;
  174. }
  175. $code = $result['code'] ?? 0;
  176. if($code < 0){
  177. return $result;
  178. }
  179. }
  180. return $this->success();
  181. }
  182. /**
  183. * 查询订单抵扣信息
  184. * @param $params
  185. */
  186. public function getOrderOffset($params){
  187. $order_id = $params['order_id'];
  188. $offset_condition = array(
  189. ['order_id', '=', $order_id]
  190. );
  191. $offset_list = $this->getOrderOffsetList($offset_condition)['data'] ?? [];
  192. $balance = 0;
  193. $balance_money = 0;
  194. $point_money = 0;
  195. $point = 0;
  196. foreach($offset_list as $k => $v){
  197. $type = $v['type'];
  198. $num = $v['num'];//优惠项数量
  199. $offset_money = $v['offset_money'];//优惠金额
  200. switch($type){
  201. case 'balance'://储值余额
  202. $balance += $num;
  203. break;
  204. case 'balance_money'://现金余额
  205. $balance_money += $num;
  206. break;
  207. // case 'coupon'://优惠券
  208. //
  209. // break;
  210. case 'point'://积分
  211. $point_money += $offset_money;
  212. $point += $num;
  213. break;
  214. // case 'hongbao'://红包
  215. //
  216. // break;
  217. }
  218. }
  219. $return = array(
  220. 'point' => $point,
  221. 'point_money' => $point_money,
  222. 'balance' => $balance,
  223. 'balance_money' => $balance_money
  224. );
  225. return $return;
  226. }
  227. /**
  228. * 抵扣信息
  229. * @param $condition
  230. * @param string $field
  231. * @return array
  232. */
  233. public function getOrderOffsetInfo($condition, $field = '*'){
  234. $info = model('store_cashier_order_offset')->getInfo($condition, $field);
  235. return $this->error($info);
  236. }
  237. }