From 3469513d7717aab25c04706140f499e4b8c22284 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Wed, 21 Aug 2024 17:02:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(warehouse=5Forder):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WarehouseOrderController.php | 6 +- .../warehouse_order/WarehouseOrderLists.php | 2 +- .../warehouse_order/WarehouseOrderLogic.php | 133 +++++++++++------- 3 files changed, 91 insertions(+), 50 deletions(-) diff --git a/app/admin/controller/warehouse_order/WarehouseOrderController.php b/app/admin/controller/warehouse_order/WarehouseOrderController.php index 0b6a4d0f9..1b5661c4f 100644 --- a/app/admin/controller/warehouse_order/WarehouseOrderController.php +++ b/app/admin/controller/warehouse_order/WarehouseOrderController.php @@ -149,7 +149,8 @@ class WarehouseOrderController extends BaseAdminController */ public function edit() { - $params = (new WarehouseOrderValidate())->post()->goCheck('edit'); + $params = $this->request->post(); + $params['admin_id']=$this->adminId; $result = WarehouseOrderLogic::edit($params); if (true === $result) { return $this->success('编辑成功', [], 1, 1); @@ -168,6 +169,9 @@ class WarehouseOrderController extends BaseAdminController { $params = (new WarehouseOrderValidate())->post()->goCheck('delete'); WarehouseOrderLogic::delete($params); + if(WarehouseOrderLogic::hasError()){ + return $this->fail(WarehouseOrderLogic::getError()); + } return $this->success('删除成功', [], 1, 1); } diff --git a/app/admin/lists/warehouse_order/WarehouseOrderLists.php b/app/admin/lists/warehouse_order/WarehouseOrderLists.php index 2a32dbb7e..543c26ca7 100644 --- a/app/admin/lists/warehouse_order/WarehouseOrderLists.php +++ b/app/admin/lists/warehouse_order/WarehouseOrderLists.php @@ -46,7 +46,7 @@ class WarehouseOrderLists extends BaseAdminDataLists implements ListsSearchInter public function lists(): array { return WarehouseOrder::where($this->searchWhere) - ->field(['id', 'warehouse_id', 'supplier_id', 'store_id', 'code', 'financial_pm', 'admin_id', 'batch', 'mark', 'purchase', 'total_price', 'status', 'create_time']) + ->field(['id', 'warehouse_id', 'supplier_id', 'store_id', 'code', 'financial_pm', 'admin_id', 'batch', 'mark', 'purchase', 'total_price', 'status', 'create_time','completed_amount','outstanding_amount']) ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) ->select()->each(function ($item){ diff --git a/app/admin/logic/warehouse_order/WarehouseOrderLogic.php b/app/admin/logic/warehouse_order/WarehouseOrderLogic.php index 4f597e145..6e4b075ab 100644 --- a/app/admin/logic/warehouse_order/WarehouseOrderLogic.php +++ b/app/admin/logic/warehouse_order/WarehouseOrderLogic.php @@ -5,9 +5,9 @@ namespace app\admin\logic\warehouse_order; use app\admin\logic\warehouse_product\WarehouseProductLogic; use app\common\model\warehouse_order\WarehouseOrder; use app\common\logic\BaseLogic; +use app\common\model\warehouse_product\WarehouseProduct; use think\facade\Db; - /** * 仓储商品单逻辑 * Class WarehouseOrderLogic @@ -28,40 +28,42 @@ class WarehouseOrderLogic extends BaseLogic { Db::startTrans(); try { - $arr=[ - 'warehouse_id'=>$params['warehouse_id'], - 'supplier_id'=>$params['supplier_id'], - 'code'=>$params['code'], - 'admin_id'=>$params['admin_id'], - 'financial_pm'=>1, - 'batch'=>0, - 'mark'=>$params['remark'], - 'total_price'=>$params['remark'], + $arr = [ + 'warehouse_id' => $params['warehouse_id'], + 'supplier_id' => $params['supplier_id'], + 'code' => $params['code'], + 'admin_id' => $params['admin_id'], + 'financial_pm' => 1, + 'batch' => 0, + 'mark' => $params['remark'], + 'total_price' => $params['remark'], + 'completed_amount' => $params['completed_amount']??0, + 'outstanding_amount' => $params['outstanding_amount']??0, ]; - $total_price=0; - foreach($params['product_arr'] as $k=>$v){ - $total_price+=$v['total_price']; + $total_price = 0; + foreach ($params['product_arr'] as $k => $v) { + $total_price += $v['total_price']; } - $arr['total_price']=$total_price; - $res=WarehouseOrder::create($arr); - foreach($params['product_arr'] as $k=>$v){ - $data['admin_id']=$params['admin_id']; - $data['store_id']=0; - $data['oid']=$res['id']; - $data['supplier_id']=$params['supplier_id']; - $data['warehouse_id']=$params['warehouse_id']; - $data['code']=$params['code']; - $data['product_id']=$v['product_id']; - $data['nums']=$v['nums']; - $data['purchase']=$v['purchase']; - $data['total_price']=$v['total_price']; - $data['financial_pm']=1; - if(!empty($v['manufacture'])){ - $data['manufacture']=$v['manufacture']; + $arr['total_price'] = $total_price; + $res = WarehouseOrder::create($arr); + foreach ($params['product_arr'] as $k => $v) { + $data['admin_id'] = $params['admin_id']; + $data['store_id'] = 0; + $data['oid'] = $res['id']; + $data['supplier_id'] = $params['supplier_id']; + $data['warehouse_id'] = $params['warehouse_id']; + $data['code'] = $params['code']; + $data['product_id'] = $v['product_id']; + $data['nums'] = $v['nums']; + $data['purchase'] = $v['purchase']; + $data['total_price'] = $v['total_price']; + $data['financial_pm'] = 1; + if (!empty($v['manufacture'])) { + $data['manufacture'] = $v['manufacture']; } - if(!empty($v['expiration_date'])){ - $data['expiration_date']=$v['expiration_date']; + if (!empty($v['expiration_date'])) { + $data['expiration_date'] = $v['expiration_date']; } WarehouseProductLogic::add($data); } @@ -84,25 +86,47 @@ class WarehouseOrderLogic extends BaseLogic */ public static function edit(array $params): bool { + $find = WarehouseOrder::where('id', $params['id'])->find(); + if (!$find) { + self::setError('订单不存在'); + return false; + } Db::startTrans(); try { - WarehouseOrder::where('id', $params['id'])->update([ - 'warehouse_id' => $params['warehouse_id'], - 'supplier_id' => $params['supplier_id'], - 'store_id' => $params['store_id'], - 'code' => $params['code'], - 'financial_pm' => $params['financial_pm'], - 'admin_id' => $params['admin_id'], - 'batch' => $params['batch'], - 'mark' => $params['mark'], - 'purchase' => $params['purchase'], - 'total_price' => $params['total_price'], - 'status' => $params['status'] - ]); - + foreach ($params['product_arr'] as $k => $v) { + $data['admin_id'] = $params['admin_id']; + $data['store_id'] = 0; + $data['oid'] = $find['id']; + $data['supplier_id'] = $find['supplier_id']; + $data['warehouse_id'] = $find['warehouse_id']; + $data['code'] = $find['code']; + $data['product_id'] = $v['id']; + $data['nums'] = $v['nums']; + $data['purchase'] = $v['purchase']; + $data['total_price'] = $v['total_price']; + $data['financial_pm'] = $find['financial_pm']; + if (!empty($v['manufacture'])) { + $data['manufacture'] = $v['manufacture']; + } + if (!empty($v['expiration_date'])) { + $data['expiration_date'] = $v['expiration_date']; + } + if($find['financial_pm']==0){ + $data['purchase'] = $v['prices']; + $data['total_price'] = bcmul($v['prices'], $v['nums'], 2); + } + WarehouseProductLogic::add($data); + } + $find = WarehouseProduct::where('oid', $params['id'])->field('sum(nums) as nums,sum(total_price) as total_price')->find(); + if ($find) { + WarehouseOrder::where('id', $params['id'])->update([ + 'nums' => $find['nums'], + 'total_price' => $find['total_price'] + ]); + } Db::commit(); return true; - } catch (\Exception $e) { + } catch (\Throwable $e) { Db::rollback(); self::setError($e->getMessage()); return false; @@ -119,7 +143,20 @@ class WarehouseOrderLogic extends BaseLogic */ public static function delete(array $params): bool { - return WarehouseOrder::destroy($params['id']); + $count = WarehouseProduct::where('oid', $params['id'])->count(); + if ($count >= 1) { + self::setError('该订单下还有商品没有删除,请先删除商品'); + return false; + } + $find = WarehouseProduct::where('oid', $params['id'])->field('sum(nums) as nums,sum(total_price) as total_price')->find(); + if ($find) { + WarehouseOrder::where('id', $params['id'])->update([ + 'nums' => $find['nums'], + 'total_price' => $find['total_price'] + ]); + } + WarehouseOrder::destroy($params['id']); + return true; } @@ -134,4 +171,4 @@ class WarehouseOrderLogic extends BaseLogic { return WarehouseOrder::findOrEmpty($params['id'])->toArray(); } -} \ No newline at end of file +}