|
@@ -0,0 +1,133 @@
|
|
|
+<?php
|
|
|
+namespace app\common\service;
|
|
|
+
|
|
|
+use app\common\model\GoodsSku;
|
|
|
+use app\common\model\User;
|
|
|
+
|
|
|
+class OrderService extends BaseService {
|
|
|
+ /** @var User */
|
|
|
+ protected $user;
|
|
|
+ protected $coupon_use;
|
|
|
+ protected $coupon_id;
|
|
|
+ /** @var 1直接购买2购物车买 */
|
|
|
+ protected $frm;
|
|
|
+ protected $goods=[];
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param User $user
|
|
|
+ */
|
|
|
+ public function setUser(User $user)
|
|
|
+ {
|
|
|
+ $this->user = $user;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return User
|
|
|
+ */
|
|
|
+ public function getUser(): User
|
|
|
+ {
|
|
|
+ return $this->user;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param array $goods
|
|
|
+ */
|
|
|
+ public function setGoods(array $goods): void
|
|
|
+ {
|
|
|
+ $this->goods = $goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param mixed $frm
|
|
|
+ */
|
|
|
+ public function setFrm($frm): void
|
|
|
+ {
|
|
|
+ $this->frm = $frm;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @param mixed $coupon_use
|
|
|
+ */
|
|
|
+ public function setCouponUse($coupon_use): void
|
|
|
+ {
|
|
|
+ $this->coupon_use = $coupon_use;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param mixed $coupon_id
|
|
|
+ */
|
|
|
+ public function setCouponId($coupon_id): void
|
|
|
+ {
|
|
|
+ $this->coupon_id = $coupon_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function getGoods()
|
|
|
+ {
|
|
|
+ if($this->frm==1) {
|
|
|
+ $goods=$this->goods;
|
|
|
+ foreach ($goods as $sku_id=>&$info){
|
|
|
+ $sku=GoodsSku::find($sku_id);
|
|
|
+ if(!$sku){
|
|
|
+ $this->error('规格不存在');
|
|
|
+ }
|
|
|
+ $info['sku']=$sku;
|
|
|
+ $info['goods']=$sku->goods;
|
|
|
+ $info['goods_id']=$sku['goods_id'];
|
|
|
+ }
|
|
|
+ return $goods;
|
|
|
+ }else{
|
|
|
+ return $this->getUser()->cart()
|
|
|
+ ->with(['goods','sku'])
|
|
|
+ ->select()->toArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function calculate(){
|
|
|
+ $info=[
|
|
|
+ 'amount_total'=>0,
|
|
|
+ 'amount_coupon'=>0,
|
|
|
+ 'amount_install'=>0,
|
|
|
+ 'num'=>0,
|
|
|
+ 'num_install'=>0,
|
|
|
+ 'goods'=>[]
|
|
|
+ ];
|
|
|
+ $user=$this->getUser();
|
|
|
+
|
|
|
+ $info['goods']=$this->getGoods();
|
|
|
+ $info['num']=array_sum(array_column($info['goods'],'num'));
|
|
|
+ $info['num_install']=array_sum(array_column($info['goods'],'num_install'));
|
|
|
+
|
|
|
+ foreach ($info['goods'] as $goods){
|
|
|
+ $amount=bcmul($goods['sku']['amount'],$goods['num']);
|
|
|
+ $info['amount_total']=bcadd($info['amount_total'],$amount);
|
|
|
+ }
|
|
|
+
|
|
|
+ #安装费
|
|
|
+ $info['amount_install']=InstallService::getFee(array_column($info['goods'],null,'goods_sku_id'),'num_install');
|
|
|
+ $info['amount_total']=bcadd($info['amount_total'],$info['amount_install']);
|
|
|
+
|
|
|
+ #优惠券
|
|
|
+ $couponAmount=0;
|
|
|
+ if(!empty($this->coupon_use)){
|
|
|
+ $use=false;
|
|
|
+ $coupon=$user->coupon()->findOrFail($this->coupon_id);
|
|
|
+ foreach ($info['goods'] as $goods){
|
|
|
+ $amount=bcmul($goods['sku']['amount'],$goods['num']);
|
|
|
+ if($coupon->canUse($amount,$goods['goods_id'])){
|
|
|
+ $use=true;
|
|
|
+ $couponAmount=$coupon['amount'];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!$use){
|
|
|
+ $this->error('优惠券不符合使用规则');
|
|
|
+ }
|
|
|
+ $info['amount_coupon']=$couponAmount;
|
|
|
+ }
|
|
|
+ $info['amount_total']=bcsub($info['amount_total'],$couponAmount);
|
|
|
+ return $info;
|
|
|
+ }
|
|
|
+}
|