From 55d4fe7d2106154560729f098971bf62a5191b12 Mon Sep 17 00:00:00 2001
From: weiz <736250432@qq.com>
Date: Wed, 10 Apr 2024 17:27:44 +0800
Subject: [PATCH] update

---
 .../material/MaterialPurchaseRequestLogic.php | 350 ++++++++++--------
 .../MaterialPurchaseRequestValidate.php       |   6 +
 2 files changed, 193 insertions(+), 163 deletions(-)

diff --git a/app/adminapi/logic/material/MaterialPurchaseRequestLogic.php b/app/adminapi/logic/material/MaterialPurchaseRequestLogic.php
index 7f9cede99..affda229e 100644
--- a/app/adminapi/logic/material/MaterialPurchaseRequestLogic.php
+++ b/app/adminapi/logic/material/MaterialPurchaseRequestLogic.php
@@ -11,170 +11,194 @@
 // +----------------------------------------------------------------------
 // | author: likeadminTeam
 // +----------------------------------------------------------------------
-
-namespace app\adminapi\logic\material;
-
-
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
-use app\common\model\material\MaterialPurchaseRequest;
-use app\common\logic\BaseLogic;
-use app\common\model\material\MaterialPurchaseRequestDetail;
-use app\common\model\oa\FlowApprove;
-use app\common\model\project\Project;
-use app\common\model\project\ProjectMaterialBudgetDetail;
-use think\facade\Db;
-
-
-/**
- * 材料采购申请逻辑
- * Class MaterialPurchaseRequestLogic
- * @package app\adminapi\logic\material
- */
-class MaterialPurchaseRequestLogic extends BaseLogic
-{
-
-
-    /**
-     * @notes 添加材料采购申请
-     * @param array $params
-     * @return bool
-     * @author likeadmin
-     * @date 2024/01/09 13:47
-     */
-    public static function add(array $params,$admin_id): bool
-    {
-        Db::startTrans();
-        try {
-            $MaterialPurchaseRequestRes = MaterialPurchaseRequest::create([
-                'material_purchase_request_code' => data_unique_code('采购申请'),
-	            'org_id' => $params['org_id'],
-	            'dept_id' => $params['dept_id'],
-                'project_id' => $params['project_id'],
-                'apply_date' => strtotime($params['apply_date']),
-                'arrival_date' => strtotime($params['arrival_date']),
-                'remark' => $params['remark'] ?? '',
-                'annex' => $params['annex']? json_encode($params['annex']) : null,
-            ]);
-	        foreach ($params['purchase_request_detail'] as $item)
-	        {
-		        MaterialPurchaseRequestDetail::create([
-			        'project_material_budget_detail_id' => $item['project_material_budget_detail_id'],
-			        'material_purchase_request_id' => $MaterialPurchaseRequestRes->id,
-			        'num' => $item['num'],
-			        'remark' => $item['remark'] ?? '',
-		        ]);
-				//预算数量
-		        $project_material_budget_detail = ProjectMaterialBudgetDetail::field('num')->where('id',$item['project_material_budget_detail_id'])->findOrEmpty();
-				//已经申购的数量
-		        $purchase_request_num = MaterialPurchaseRequestDetail::where('project_material_budget_detail_id',$item['project_material_budget_detail_id'])->sum('num');
-				if($project_material_budget_detail['num'] - $purchase_request_num - $item['num'] <=0){
-					ProjectMaterialBudgetDetail::where('id',$item['project_material_budget_detail_id'])->update(['is_residual'=>1,'update_time'=>time()]);
-				}
-	        }
-            Db::commit();
-            return true;
-        } catch (\Exception $e) {
-            Db::rollback();
-            self::setError($e->getMessage());
-            return false;
-        }
-    }
-
-
-    /**
-     * @notes 编辑材料采购申请
-     * @param array $params
-     * @return bool
-     * @author likeadmin
-     * @date 2024/01/09 13:47
-     */
-    public static function edit(array $params): bool
-    {
-        Db::startTrans();
-        try {
-            MaterialPurchaseRequest::where('id', $params['id'])->update([
-	            'org_id' => $params['org_id'],
-	            'dept_id' => $params['dept_id'],
-	            'project_id' => $params['project_id'],
-	            'apply_date' => strtotime($params['apply_date']),
-	            'arrival_date' => strtotime($params['arrival_date']),
-	            'remark' => $params['remark'] ?? '',
-	            'annex' => $params['annex']? json_encode($params['annex']) : null,
-            ]);
-            Db::commit();
-            return true;
-        } catch (\Exception $e) {
-            Db::rollback();
-            self::setError($e->getMessage());
-            return false;
-        }
-    }
-
-
-    /**
-     * @notes 删除材料采购申请
-     * @param array $params
-     * @return bool
-     * @author likeadmin
-     * @date 2024/01/09 13:47
-     */
-    public static function delete(array $params): bool
-    {
-        return MaterialPurchaseRequest::destroy($params['id']);
-    }
-
-
-    /**
-     * @notes 获取材料采购申请详情
-     * @param $params
-     * @return array
-     * @author likeadmin
-     * @date 2024/01/09 13:47
-     */
-    public static function detail($params): array
-    {
-		$data = MaterialPurchaseRequest::field('id,org_id,dept_id,project_id,material_purchase_request_code,apply_date,arrival_date,remark,annex,approve_id')->findOrEmpty($params['id']);
-		$org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty();
-	    $dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty();
-		$project = Project::field('name,project_code')->where('id',$data['project_id'])->findOrEmpty();
-		$data['org_name'] = $org['name'];
-		$data['dept_name'] = $dept['name'];
-		$data['project_name'] = $project['name'];
-		$data['project_code'] = $project['project_code'];
-	    $approve_data = FlowApprove::where('id',$data['approve_id'])->findOrEmpty();
-	    $data['approve_check_status'] = $approve_data['check_status'];
-        return $data->toArray();
-    }
 	
-	public static function approve($params,$admin_id): bool{
-		$data = MaterialPurchaseRequest::where('id',$params['id'])->findOrEmpty();
-		$approve_data = FlowApprove::where('id',$data['approve_id'])->findOrEmpty();
-		if(!empty($data['approve_id']) && $approve_data['check_status'] != 3){
-			self::setError('当前内容存在审核信息,请勿重复提交');
-			return false;
-		}
-		Db::startTrans();
-		try {
-			$res = addApprove(
-				'材料申购',
-				$params['id'],
-				'app\common\model\material\MaterialPurchaseRequest',
-				$params['path'],
-				$params['flow_id'],
-				$admin_id
-			);
-			if($res){
-				MaterialPurchaseRequest::where('id',$params['id'])->update([
-					'approve_id' => $res,
+	namespace app\adminapi\logic\material;
+	
+	
+	use app\common\logic\BaseLogic;
+	use app\common\model\dept\Dept;
+	use app\common\model\dept\Orgs;
+	use app\common\model\material\MaterialPurchaseRequest;
+	use app\common\model\material\MaterialPurchaseRequestDetail;
+	use app\common\model\oa\FlowApprove;
+	use app\common\model\project\Project;
+	use app\common\model\project\ProjectMaterialBudgetDetail;
+	use think\facade\Db;
+	
+	
+	/**
+	 * 材料采购申请逻辑
+	 * Class MaterialPurchaseRequestLogic
+	 * @package app\adminapi\logic\material
+	 */
+	class MaterialPurchaseRequestLogic extends BaseLogic
+	{
+		
+		
+		/**
+		 * @notes 添加材料采购申请
+		 * @param array $params
+		 * @return bool
+		 * @author likeadmin
+		 * @date 2024/01/09 13:47
+		 */
+		public static function add(array $params, $admin_id): bool
+		{
+			Db::startTrans();
+			try {
+				$MaterialPurchaseRequestRes = MaterialPurchaseRequest::create([
+					'material_purchase_request_code' => data_unique_code('采购申请'),
+					'org_id' => $params['org_id'],
+					'dept_id' => $params['dept_id'],
+					'project_id' => $params['project_id'],
+					'apply_date' => strtotime($params['apply_date']),
+					'arrival_date' => strtotime($params['arrival_date']),
+					'remark' => $params['remark'] ?? '',
+					'annex' => $params['annex'] ? json_encode($params['annex']) : null,
 				]);
+				foreach ($params['purchase_request_detail'] as $item) {
+					MaterialPurchaseRequestDetail::create([
+						'project_material_budget_detail_id' => $item['project_material_budget_detail_id'],
+						'material_purchase_request_id' => $MaterialPurchaseRequestRes->id,
+						'num' => $item['num'],
+						'remark' => $item['remark'] ?? '',
+					]);
+					//预算数量
+					$project_material_budget_detail = ProjectMaterialBudgetDetail::field('num')->where('id', $item['project_material_budget_detail_id'])->findOrEmpty();
+					//已经申购的数量
+					$purchase_request_num = MaterialPurchaseRequestDetail::where('project_material_budget_detail_id', $item['project_material_budget_detail_id'])->sum('num');
+					if ($project_material_budget_detail['num'] - $purchase_request_num - $item['num'] <= 0) {
+						ProjectMaterialBudgetDetail::where('id', $item['project_material_budget_detail_id'])->update(['is_residual' => 1, 'update_time' => time()]);
+					}
+				}
+				Db::commit();
+				return true;
+			} catch (\Exception $e) {
+				Db::rollback();
+				self::setError($e->getMessage());
+				return false;
 			}
-			Db::commit();
-			return true;
-		} catch (\Exception $e) {
-			Db::rollback();
-			self::setError($e->getMessage());
-			return false;
 		}
-	}
-}
\ No newline at end of file
+		
+		
+		/**
+		 * @notes 编辑材料采购申请
+		 * @param array $params
+		 * @return bool
+		 * @author likeadmin
+		 * @date 2024/01/09 13:47
+		 */
+		public static function edit(array $params): bool
+		{
+			Db::startTrans();
+			try {
+				MaterialPurchaseRequest::where('id', $params['id'])->update([
+					'org_id' => $params['org_id'],
+					'dept_id' => $params['dept_id'],
+					'project_id' => $params['project_id'],
+					'apply_date' => strtotime($params['apply_date']),
+					'arrival_date' => strtotime($params['arrival_date']),
+					'remark' => $params['remark'] ?? '',
+					'annex' => $params['annex'] ? json_encode($params['annex']) : null,
+				]);
+				foreach ($params['purchase_request_detail'] as $item) {
+					if (!empty($item['id'])) {
+						MaterialPurchaseRequestDetail::where('id', $item['id'])->update([
+							'project_material_budget_detail_id' => $item['project_material_budget_detail_id'],
+							'material_purchase_request_id' => $params['id'],
+							'num' => $item['num'],
+							'remark' => $item['remark'] ?? '',
+						]);
+					} else {
+						MaterialPurchaseRequestDetail::create([
+							'project_material_budget_detail_id' => $item['project_material_budget_detail_id'],
+							'material_purchase_request_id' => $params['id'],
+							'num' => $item['num'],
+							'remark' => $item['remark'] ?? '',
+						]);
+					}
+					//预算数量
+					$project_material_budget_detail = ProjectMaterialBudgetDetail::field('num')->where('id', $item['project_material_budget_detail_id'])->findOrEmpty();
+					//已经申购的数量
+					$purchase_request_num = MaterialPurchaseRequestDetail::where('project_material_budget_detail_id', $item['project_material_budget_detail_id'])->sum('num');
+					if ($project_material_budget_detail['num'] - $purchase_request_num - $item['num'] <= 0) {
+						ProjectMaterialBudgetDetail::where('id', $item['project_material_budget_detail_id'])->update(['is_residual' => 1, 'update_time' => time()]);
+					}
+				}
+				Db::commit();
+				return true;
+			} catch (\Exception $e) {
+				Db::rollback();
+				self::setError($e->getMessage());
+				return false;
+			}
+		}
+		
+		
+		/**
+		 * @notes 删除材料采购申请
+		 * @param array $params
+		 * @return bool
+		 * @author likeadmin
+		 * @date 2024/01/09 13:47
+		 */
+		public static function delete(array $params): bool
+		{
+			return MaterialPurchaseRequest::destroy($params['id']);
+		}
+		
+		
+		/**
+		 * @notes 获取材料采购申请详情
+		 * @param $params
+		 * @return array
+		 * @author likeadmin
+		 * @date 2024/01/09 13:47
+		 */
+		public static function detail($params): array
+		{
+			$data = MaterialPurchaseRequest::field('id,org_id,dept_id,project_id,material_purchase_request_code,apply_date,arrival_date,remark,annex,approve_id')->findOrEmpty($params['id']);
+			$org = Orgs::field('name')->where('id', $data['org_id'])->findOrEmpty();
+			$dept = Dept::field('name')->where('id', $data['dept_id'])->findOrEmpty();
+			$project = Project::field('name,project_code')->where('id', $data['project_id'])->findOrEmpty();
+			$data['org_name'] = $org['name'];
+			$data['dept_name'] = $dept['name'];
+			$data['project_name'] = $project['name'];
+			$data['project_code'] = $project['project_code'];
+			$approve_data = FlowApprove::where('id', $data['approve_id'])->findOrEmpty();
+			$data['approve_check_status'] = $approve_data['check_status'];
+			return $data->toArray();
+		}
+		
+		public static function approve($params, $admin_id): bool
+		{
+			$data = MaterialPurchaseRequest::where('id', $params['id'])->findOrEmpty();
+			$approve_data = FlowApprove::where('id', $data['approve_id'])->findOrEmpty();
+			if (!empty($data['approve_id']) && $approve_data['check_status'] != 3) {
+				self::setError('当前内容存在审核信息,请勿重复提交');
+				return false;
+			}
+			Db::startTrans();
+			try {
+				$res = addApprove(
+					'材料申购',
+					$params['id'],
+					'app\common\model\material\MaterialPurchaseRequest',
+					$params['path'],
+					$params['flow_id'],
+					$admin_id
+				);
+				if ($res) {
+					MaterialPurchaseRequest::where('id', $params['id'])->update([
+						'approve_id' => $res,
+					]);
+				}
+				Db::commit();
+				return true;
+			} catch (\Exception $e) {
+				Db::rollback();
+				self::setError($e->getMessage());
+				return false;
+			}
+		}
+	}
\ No newline at end of file
diff --git a/app/adminapi/validate/material/MaterialPurchaseRequestValidate.php b/app/adminapi/validate/material/MaterialPurchaseRequestValidate.php
index 7e574e71a..f8265dd6e 100644
--- a/app/adminapi/validate/material/MaterialPurchaseRequestValidate.php
+++ b/app/adminapi/validate/material/MaterialPurchaseRequestValidate.php
@@ -170,6 +170,12 @@
 				return '申购明细数据格式错误';
 			}
 			foreach ($detail as $v) {
+				if (!empty($v['id'])) {
+					$data = MaterialPurchaseRequestDetail::where('id', $v['id'])->findOrEmpty();
+					if ($data->isEmpty()) {
+						return '申购明细信息不存在';
+					}
+				}
 				$project_material_budget_detail = ProjectMaterialBudgetDetail::where('id', $v['project_material_budget_detail_id'])->findOrEmpty();
 				if (empty($v['project_material_budget_detail_id'])) {
 					return '请选择材料预算明细';