2024-08-01 16:53:26 +08:00
< ? php
namespace app\admin\logic\purchase_order ;
use app\common\model\purchase_order\PurchaseOrder ;
use app\common\logic\BaseLogic ;
2024-08-01 18:03:45 +08:00
use app\common\model\purchase_order_info\PurchaseOrderInfo ;
2024-08-16 17:51:38 +08:00
use app\common\model\purchase_product_offer\PurchaseProductOffer ;
2024-08-01 18:03:45 +08:00
use app\common\model\store_order\StoreOrder ;
use app\common\model\store_order_cart_info\StoreOrderCartInfo ;
2024-08-16 17:51:38 +08:00
use app\common\model\store_product\StoreProduct ;
2024-08-01 22:41:52 +08:00
use app\common\model\system_store\SystemStore ;
2024-08-27 20:46:44 +08:00
use support\exception\BusinessException ;
2024-08-01 16:53:26 +08:00
use think\facade\Db ;
/**
* 采购订单逻辑
* Class PurchaseOrderLogic
* @ package app\admin\logic\purchase_order
*/
class PurchaseOrderLogic extends BaseLogic
{
2024-08-16 17:51:38 +08:00
public static function mergeOrder ( $params )
{
$oid_arr = [];
$store_arr = [];
2024-08-17 14:44:20 +08:00
$purchaseOrderInfo = new PurchaseOrderInfo ();
2024-08-16 17:51:38 +08:00
foreach ( $params as $k => $v ) {
$oid_arr [] = $v [ 'oid' ];
$store_arr [] = $v [ 'store_id' ];
}
$store_arr = array_unique ( $store_arr );
2024-08-17 14:44:20 +08:00
// Db::startTrans();
// try {
$price = StoreOrder :: whereIn ( 'id' , $oid_arr ) -> whereIn ( 'store_id' , $store_arr ) -> group ( 'store_id' ) -> field ( 'store_id,SUM(pay_price) as pay_price,SUM(total_price) as total_price' ) -> select () -> toArray ();
$purchase_arr = [];
$order_arr = [];
$total_price = 0 ;
$pay_price = 0 ;
foreach ( $price as $k => $v ) {
foreach ( $params as $key => $value ){
if ( $value [ 'store_id' ] == $v [ 'store_id' ]){
$order_arr [] = $value [ 'oid' ];
}
}
$total_price += $v [ 'total_price' ];
$pay_price += $v [ 'pay_price' ];
2024-08-16 17:51:38 +08:00
$data = [
2024-08-17 14:44:20 +08:00
'store_id' => $v [ 'store_id' ],
'order_arr' => json_encode ( $order_arr ),
'order_id' => getNewOrderId ( 'CG' ),
'total' => $v [ 'total_price' ],
'actual' => $v [ 'pay_price' ],
'money' => $v [ 'pay_price' ],
2024-08-16 17:51:38 +08:00
'paid' => 1 ,
2024-08-17 14:44:20 +08:00
'is_mer' => 1 ,
2024-08-16 17:51:38 +08:00
'create_time' => time (),
'update_time' => time (),
];
2024-08-17 14:44:20 +08:00
//创建门店合计订单
2024-08-16 17:51:38 +08:00
$res = PurchaseOrder :: create ( $data );
2024-08-17 14:44:20 +08:00
$purchase_arr [] = [ 'id' => $res [ 'id' ], 'store_id' => $v [ 'store_id' ]];
$purchase_id [] = $res [ 'id' ];
}
$info = StoreOrderCartInfo :: where ( 'oid' , 'in' , $order_arr ) -> field ( 'store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num' ) -> group ( 'store_id, product_id' ) -> select () -> toArray ();
//创建门店合计商品
foreach ( $purchase_arr as $k => $v ){
2024-08-16 17:51:38 +08:00
foreach ( $info as $item ) {
2024-08-17 14:44:20 +08:00
if ( $v [ 'store_id' ] == $item [ 'store_id' ]){
$arr [ 'oid' ] = $v [ 'id' ];
$arr [ 'store_id' ] = $item [ 'store_id' ];
$arr [ 'product_id' ] = $item [ 'product_id' ];
$arr [ 'price' ] = $item [ 'price' ];
$arr [ 'total_price' ] = $item [ 'total_price' ];
$arr [ 'cart_num' ] = $item [ 'cart_num' ];
$arr [ 'status' ] = 1 ;
$purchase_order_info [] = $arr ;
}
2024-08-16 17:51:38 +08:00
}
}
2024-08-17 14:44:20 +08:00
$purchaseOrderInfo -> saveAll ( $purchase_order_info );
//---------------生成平台订单-----------------
$data = [
'store_id' => 0 ,
'store_arr' => json_encode ( $store_arr ),
'order_arr' => json_encode ( $purchase_id ),
'order_id' => getNewOrderId ( 'PT' ),
'total' => $total_price ,
'actual' => $pay_price ,
'money' => $pay_price ,
'paid' => 1 ,
'is_mer' => 2 ,
'create_time' => time (),
'update_time' => time (),
];
$res = PurchaseOrder :: create ( $data );
$info = PurchaseOrderInfo :: where ( 'oid' , 'in' , $purchase_id ) -> field ( 'store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num' ) -> group ( 'store_id, product_id' ) -> select ();
$purchase_order_info_two = [];
foreach ( $info as $item ) {
$arr [ 'oid' ] = $res [ 'id' ];
$arr [ 'store_id' ] = $item [ 'store_id' ];
$arr [ 'product_id' ] = $item [ 'product_id' ];
$arr [ 'price' ] = $item [ 'price' ];
$arr [ 'total_price' ] = $item [ 'total_price' ];
$arr [ 'cart_num' ] = $item [ 'cart_num' ];
$arr [ 'status' ] = 1 ;
$purchase_order_info_two [] = $arr ;
}
$purchaseOrderInfo -> saveAll ( $purchase_order_info_two );
2024-08-19 17:58:45 +08:00
// $productOffer = [];
// foreach ($info as $item) {
// $arr['order_id'] = $res['id'];
// $arr['product_id'] = $item['product_id'];
// $arr['price'] = $item['price'];
// $arr['total_price'] = $item['total_price'];
// $arr['need_num'] = $item['cart_num'];
// $arr['unit'] = StoreProduct::where('id', $item['product_id'])->value('unit');
// $productOffer[] = $arr;
// }
// $purchaseProductOffer = new PurchaseProductOffer();
// $purchaseProductOffer->saveAll($productOffer);
2024-08-17 14:44:20 +08:00
// StoreOrder::whereIn('id', $oid_arr)->update(['is_merge' => 1]);
// Db::commit();
// return true;
// } catch (\Throwable $e) {
// Db::rollback();
// self::setError($e->getMessage());
// return false;
// }
2024-08-16 17:51:38 +08:00
}
2024-08-01 16:53:26 +08:00
/**
2024-08-01 18:03:45 +08:00
* @ notes 合并今日商户订单
2024-08-01 16:53:26 +08:00
* @ param array $params
* @ return bool
* @ author admin
* @ date 2024 / 08 / 01 16 : 32
*/
2024-08-01 18:03:45 +08:00
public static function StoreTodayOrder () : bool
2024-08-01 16:53:26 +08:00
{
Db :: startTrans ();
try {
2024-08-01 18:03:45 +08:00
$store_arr = StoreOrder :: where ([ 'paid' => 1 , 'refund_status' => 0 ]) -> whereDay ( 'create_time' ) -> group ( 'store_id' ) -> column ( 'store_id' );
$purchaseOrderInfo = new PurchaseOrderInfo ();
foreach ( $store_arr as $store_id ) {
$purchase_order_info = [];
$order_arr = StoreOrder :: where ([ 'paid' => 1 , 'refund_status' => 0 , 'store_id' => $store_id ]) -> whereDay ( 'create_time' ) -> column ( 'id' );
$price = StoreOrder :: where ([ 'paid' => 1 , 'refund_status' => 0 , 'store_id' => $store_id ]) -> whereDay ( 'create_time' ) -> field ( 'SUM(pay_price) as pay_price,SUM(total_price) as total_price' ) -> find ();
$data = [
'store_id' => $store_id ,
'order_arr' => json_encode ( $order_arr ),
'order_id' => getNewOrderId ( 'CG' ),
'total' => $price [ 'total_price' ],
'actual' => $price [ 'pay_price' ],
'money' => $price [ 'pay_price' ],
'paid' => 1 ,
'is_mer' => 1 ,
'create_time' => time (),
'update_time' => time (),
];
$res = PurchaseOrder :: create ( $data );
$info = StoreOrderCartInfo :: where ( 'oid' , 'in' , $order_arr ) -> field ( 'store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num' ) -> group ( 'store_id, product_id' ) -> select ();
foreach ( $info as $item ) {
$arr [ 'oid' ] = $res [ 'id' ];
$arr [ 'store_id' ] = $item [ 'store_id' ];
$arr [ 'product_id' ] = $item [ 'product_id' ];
$arr [ 'price' ] = $item [ 'price' ];
$arr [ 'total_price' ] = $item [ 'total_price' ];
$arr [ 'cart_num' ] = $item [ 'cart_num' ];
$arr [ 'status' ] = 1 ;
$purchase_order_info [] = $arr ;
}
$purchaseOrderInfo -> saveAll ( $purchase_order_info );
}
2024-08-01 16:53:26 +08:00
Db :: commit ();
return true ;
} catch ( \Exception $e ) {
Db :: rollback ();
2024-08-27 20:46:44 +08:00
throw new BusinessException ( $e -> getMessage ());
2024-08-01 16:53:26 +08:00
}
}
/**
2024-08-01 18:03:45 +08:00
* @ notes 合并今日平台订单
2024-08-01 16:53:26 +08:00
* @ param array $params
* @ return bool
* @ author admin
* @ date 2024 / 08 / 01 16 : 32
*/
2024-08-01 18:03:45 +08:00
public static function platformTodayOrder ()
2024-08-01 16:53:26 +08:00
{
2024-08-01 22:41:52 +08:00
Db :: startTrans ();
try {
2024-08-01 18:03:45 +08:00
$purchaseOrderInfo = new PurchaseOrderInfo ();
2024-08-16 17:51:38 +08:00
$purchase_order_info = [];
$order_arr = PurchaseOrder :: whereDay ( 'create_time' ) -> where ( 'is_mer' , 1 ) -> column ( 'id' );
2024-08-01 22:41:52 +08:00
$price = PurchaseOrder :: whereDay ( 'create_time' ) -> field ( 'SUM(actual) as pay_price,SUM(total) as total_price' ) -> find ();
$data = [
'store_id' => 0 ,
'order_arr' => json_encode ( $order_arr ),
'order_id' => getNewOrderId ( 'PT' ),
'total' => $price [ 'total_price' ],
'actual' => $price [ 'pay_price' ],
'money' => $price [ 'pay_price' ],
'paid' => 1 ,
'is_mer' => 2 ,
'create_time' => time (),
'update_time' => time (),
];
$res = PurchaseOrder :: create ( $data );
$info = PurchaseOrderInfo :: where ( 'oid' , 'in' , $order_arr ) -> field ( 'store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num' ) -> group ( 'store_id, product_id' ) -> select ();
2024-08-01 18:03:45 +08:00
foreach ( $info as $item ) {
$arr [ 'oid' ] = $res [ 'id' ];
$arr [ 'store_id' ] = $item [ 'store_id' ];
$arr [ 'product_id' ] = $item [ 'product_id' ];
$arr [ 'price' ] = $item [ 'price' ];
$arr [ 'total_price' ] = $item [ 'total_price' ];
$arr [ 'cart_num' ] = $item [ 'cart_num' ];
$arr [ 'status' ] = 1 ;
$purchase_order_info [] = $arr ;
}
$purchaseOrderInfo -> saveAll ( $purchase_order_info );
2024-08-01 16:53:26 +08:00
2024-08-01 22:41:52 +08:00
Db :: commit ();
return true ;
} catch ( \Exception $e ) {
Db :: rollback ();
2024-08-27 20:46:44 +08:00
throw new BusinessException ( $e -> getMessage ());
2024-08-01 22:41:52 +08:00
}
2024-08-01 16:53:26 +08:00
}
/**
* @ notes 删除采购订单
* @ param array $params
* @ return bool
* @ author admin
* @ date 2024 / 08 / 01 16 : 32
*/
public static function delete ( array $params ) : bool
{
return PurchaseOrder :: destroy ( $params [ 'id' ]);
}
/**
* @ notes 获取采购订单详情
* @ param $params
* @ return array
* @ author admin
* @ date 2024 / 08 / 01 16 : 32
*/
2024-08-01 22:41:52 +08:00
public static function detail ( $id ) : array
2024-08-01 16:53:26 +08:00
{
2024-08-16 17:51:38 +08:00
$data = PurchaseOrder :: findOrEmpty ( $id ) -> toArray ();
if ( $data ) {
if ( $data [ 'store_id' ]) {
$data [ 'system_store' ] = SystemStore :: where ( 'id' , $data [ 'store_id' ]) -> value ( 'name' );
} else {
$data [ 'system_store' ] = '平台' ;
2024-08-01 22:41:52 +08:00
}
switch ( $data [ 'storage' ]) {
case 0 :
$data [ 'storage_name' ] = '未入库' ;
break ;
case 1 :
$data [ 'storage_name' ] = '部分入库' ;
break ;
case 2 :
$data [ 'storage_name' ] = '已入库' ;
break ;
default :
$data [ 'storage_name' ] = '未入库' ;
}
}
return $data ;
2024-08-01 16:53:26 +08:00
}
2024-08-01 18:03:45 +08:00
}