diff --git a/app/adminapi/controller/bid/BidDocumentExaminationDetailController.php b/app/adminapi/controller/bid/BidDocumentExaminationDetailController.php index d9d706570..e5f0b60bc 100644 --- a/app/adminapi/controller/bid/BidDocumentExaminationDetailController.php +++ b/app/adminapi/controller/bid/BidDocumentExaminationDetailController.php @@ -52,7 +52,7 @@ class BidDocumentExaminationDetailController extends BaseAdminController public function add() { $params = (new BidDocumentExaminationDetailValidate())->post()->goCheck('add'); - $result = BidDocumentExaminationDetailLogic::add($params); + $result = BidDocumentExaminationDetailLogic::add($params,$this->adminId); if (true === $result) { return $this->success('添加成功', [], 1, 1); } @@ -69,7 +69,7 @@ class BidDocumentExaminationDetailController extends BaseAdminController public function edit() { $params = (new BidDocumentExaminationDetailValidate())->post()->goCheck('edit'); - $result = BidDocumentExaminationDetailLogic::edit($params); + $result = BidDocumentExaminationDetailLogic::edit($params,$this->adminId); if (true === $result) { return $this->success('编辑成功', [], 1, 1); } diff --git a/app/adminapi/lists/bid/BidDocumentExaminationDetailLists.php b/app/adminapi/lists/bid/BidDocumentExaminationDetailLists.php index 9ae3a5364..769ed7fdc 100644 --- a/app/adminapi/lists/bid/BidDocumentExaminationDetailLists.php +++ b/app/adminapi/lists/bid/BidDocumentExaminationDetailLists.php @@ -16,8 +16,12 @@ namespace app\adminapi\lists\bid; use app\adminapi\lists\BaseAdminDataLists; +use app\common\model\bid\BidDocumentExamination; use app\common\model\bid\BidDocumentExaminationDetail; use app\common\lists\ListsSearchInterface; +use app\common\model\custom\Custom; +use app\common\model\material\Material; +use app\common\model\project\Project; /** @@ -38,7 +42,7 @@ class BidDocumentExaminationDetailLists extends BaseAdminDataLists implements Li public function setSearch(): array { return [ - '=' => ['bid_document_examination_id', 'product_id'], + '=' => ['bid_document_examination_id'], ]; } @@ -54,11 +58,33 @@ class BidDocumentExaminationDetailLists extends BaseAdminDataLists implements Li */ public function lists(): array { - return BidDocumentExaminationDetail::where($this->searchWhere) - ->field(['id', 'bid_document_examination_id', 'product_id', 'product_num', 'cost_unit_price', 'amount', 'rate', 'unit_price', 'total_amount', 'create_user']) + $params = $this->request->get(['bid_document_examination_code','product_name']); + $where = []; + if(isset($params['bid_document_examination_code']) && $params['bid_document_examination_code'] != ''){ + $bid_document_examination_ids = BidDocumentExamination::where('code','like','%'.$params['bid_document_examination_code'].'%')->column('id'); + $where[] = ['bid_document_examination_id','in',$bid_document_examination_ids]; + } + if(isset($params['product_name']) && $params['product_name'] != ''){ + $product_ids = Material::where('name','like','%'.$params['product_name'].'%')->column('id'); + $where[] = ['product_id','in',$product_ids]; + } + return BidDocumentExaminationDetail::where($this->searchWhere)->where($where) + ->field('id,bid_document_examination_id,product_id,num,points,cost_price,cost_amount,sale_price,sale_amount') ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) - ->select() + ->select()->each(function($item){ + $bid_document_examination = BidDocumentExamination::field('project_id,code')->where('id',$item['bid_document_examination_id'])->findOrEmpty(); + $project = Project::field('name,project_code,custom_id')->where('id',$bid_document_examination['project_id'])->findOrEmpty(); + $custom = Custom::field('name')->where('id',$project['custom_id'])->findOrEmpty(); + $product = Material::field('name,specs,unit')->where('id',$item['product_id'])->findOrEmpty(); + $item['bid_document_examination_code'] = $bid_document_examination['code']; + $item['project_name'] = $project['name']; + $item['project_code'] = $project['project_code']; + $item['custom_name'] = $custom['name']; + $item['product_name'] = $product['name']; + $item['product_specs'] = $product['specs']; + $item['product_unit'] = $product['unit']; + }) ->toArray(); } @@ -71,7 +97,17 @@ class BidDocumentExaminationDetailLists extends BaseAdminDataLists implements Li */ public function count(): int { - return BidDocumentExaminationDetail::where($this->searchWhere)->count(); + $params = $this->request->get(['bid_document_examination_code','product_name']); + $where = []; + if(isset($params['bid_document_examination_code']) && $params['bid_document_examination_code'] != ''){ + $bid_document_examination_ids = BidDocumentExamination::where('code','like','%'.$params['bid_document_examination_code'].'%')->column('id'); + $where[] = ['bid_document_examination_id','in',$bid_document_examination_ids]; + } + if(isset($params['product_name']) && $params['product_name'] != ''){ + $product_ids = Material::where('name','like','%'.$params['product_name'].'%')->column('id'); + $where[] = ['product_id','in',$product_ids]; + } + return BidDocumentExaminationDetail::where($this->searchWhere)->where($where)->count(); } } \ No newline at end of file diff --git a/app/adminapi/logic/bid/BidDocumentExaminationDetailLogic.php b/app/adminapi/logic/bid/BidDocumentExaminationDetailLogic.php index 0204135bd..5aaea48f2 100644 --- a/app/adminapi/logic/bid/BidDocumentExaminationDetailLogic.php +++ b/app/adminapi/logic/bid/BidDocumentExaminationDetailLogic.php @@ -15,8 +15,13 @@ namespace app\adminapi\logic\bid; +use app\common\model\auth\Admin; +use app\common\model\bid\BidDocumentExamination; use app\common\model\bid\BidDocumentExaminationDetail; use app\common\logic\BaseLogic; +use app\common\model\custom\Custom; +use app\common\model\material\Material; +use app\common\model\project\Project; use think\facade\Db; @@ -36,22 +41,22 @@ class BidDocumentExaminationDetailLogic extends BaseLogic * @author likeadmin * @date 2023/12/02 09:59 */ - public static function add(array $params): bool + public static function add(array $params,$admin_id): bool { Db::startTrans(); try { BidDocumentExaminationDetail::create([ 'bid_document_examination_id' => $params['bid_document_examination_id'], 'product_id' => $params['product_id'], - 'product_num' => $params['product_num'], - 'cost_unit_price' => $params['cost_unit_price'], - 'amount' => $params['amount'], - 'rate' => $params['rate'], - 'unit_price' => $params['unit_price'], - 'total_amount' => $params['total_amount'], - 'create_user' => $params['create_user'] + 'num' => $params['num'], + 'points' => $params['points'], + 'cost_price' => $params['cost_price'], + 'cost_amount' => $params['cost_price'] * $params['num'], + 'sale_price' => $params['sale_price'], + 'sale_amount' => $params['sale_price'] * $params['num'], + 'add_user' => $admin_id, + 'update_user' => $admin_id, ]); - Db::commit(); return true; } catch (\Exception $e) { @@ -69,22 +74,22 @@ class BidDocumentExaminationDetailLogic extends BaseLogic * @author likeadmin * @date 2023/12/02 09:59 */ - public static function edit(array $params): bool + public static function edit(array $params,$admin_id): bool { Db::startTrans(); try { BidDocumentExaminationDetail::where('id', $params['id'])->update([ - 'bid_document_examination_id' => $params['bid_document_examination_id'], - 'product_id' => $params['product_id'], - 'product_num' => $params['product_num'], - 'cost_unit_price' => $params['cost_unit_price'], - 'amount' => $params['amount'], - 'rate' => $params['rate'], - 'unit_price' => $params['unit_price'], - 'total_amount' => $params['total_amount'], - 'create_user' => $params['create_user'] + 'bid_document_examination_id' => $params['bid_document_examination_id'], + 'product_id' => $params['product_id'], + 'num' => $params['num'], + 'points' => $params['points'], + 'cost_price' => $params['cost_price'], + 'cost_amount' => $params['cost_price'] * $params['num'], + 'sale_price' => $params['sale_price'], + 'sale_amount' => $params['sale_price'] * $params['num'], + 'update_user' => $admin_id, + 'update_time' => time(), ]); - Db::commit(); return true; } catch (\Exception $e) { @@ -117,6 +122,21 @@ class BidDocumentExaminationDetailLogic extends BaseLogic */ public static function detail($params): array { - return BidDocumentExaminationDetail::findOrEmpty($params['id'])->toArray(); + $data = BidDocumentExaminationDetail::field('id,bid_document_examination_id,product_id,num,points,cost_price,cost_amount,sale_price,sale_amount,add_user,update_user,create_time,update_time')->findOrEmpty($params['id']); + $bid_document_examination = BidDocumentExamination::field('project_id,code')->where('id',$data['bid_document_examination_id'])->findOrEmpty(); + $project = Project::field('name,project_code,custom_id')->where('id',$bid_document_examination['project_id'])->findOrEmpty(); + $custom = Custom::field('name')->where('id',$project['custom_id'])->findOrEmpty(); + $product = Material::field('name,specs,unit')->where('id',$data['product_id'])->findOrEmpty(); + $admin = Admin::where('id','in',[$data['add_user'],$data['update_user']])->column('name','id'); + $data['bid_document_examination_code'] = $bid_document_examination['code']; + $data['project_name'] = $project['name']; + $data['project_code'] = $project['project_code']; + $data['custom_name'] = $custom['name']; + $data['product_name'] = $product['name']; + $data['product_specs'] = $product['specs']; + $data['product_unit'] = $product['unit']; + $data['add_user_name'] = $admin[$data['add_user']]; + $data['update_user_name'] = $admin[$data['update_user']]; + return $data->toArray(); } } \ No newline at end of file diff --git a/app/adminapi/validate/bid/BidDocumentExaminationDetailValidate.php b/app/adminapi/validate/bid/BidDocumentExaminationDetailValidate.php index ab1c90a4c..546b8dcae 100644 --- a/app/adminapi/validate/bid/BidDocumentExaminationDetailValidate.php +++ b/app/adminapi/validate/bid/BidDocumentExaminationDetailValidate.php @@ -15,6 +15,8 @@ namespace app\adminapi\validate\bid; +use app\common\model\bid\BidDocumentExamination; +use app\common\model\material\Material; use app\common\validate\BaseValidate; @@ -32,15 +34,30 @@ class BidDocumentExaminationDetailValidate extends BaseValidate */ protected $rule = [ 'id' => 'require', + 'bid_document_examination_id' => 'require|checkBidDocumentExamination', + 'product_id' => 'require|checkProduct', + 'num' => 'require|integer|egt:0', + 'points' => 'require|integer|egt:0', + 'cost_price' => 'require|float|egt:0', + 'sale_price' => 'require|float|egt:0', ]; - - /** - * 参数描述 - * @var string[] - */ - protected $field = [ - 'id' => 'id', + protected $message = [ + 'id.require' => '缺少必要参数', + 'bid_document_examination_id.require' => '请选择审查内容', + 'product_id.require' => '请选择产品', + 'num.require' => '请填写产品数量', + 'num.integer' => '产品数量值必须是整数', + 'num.egt' => '产品数量值必须大于等于0', + 'points.require' => '请填写点数', + 'points.integer' => '点数值必须是整数', + 'points.egt' => '点数值必须大于等于0', + 'cost_price.require' => '请填写成本单价', + 'cost_price.float' => '成本单价值必须是数字', + 'cost_price.egt' => '成本单价值必须大于等于0', + 'sale_price.require' => '请填写报价单价', + 'sale_price.float' => '报价单价值必须是数字', + 'sale_price.egt' => '报价单价值必须大于等于0', ]; @@ -63,9 +80,7 @@ class BidDocumentExaminationDetailValidate extends BaseValidate * @date 2023/12/02 09:59 */ public function sceneEdit() - { - return $this->only(['id']); - } + {} /** @@ -90,5 +105,23 @@ class BidDocumentExaminationDetailValidate extends BaseValidate { return $this->only(['id']); } + + public function checkBidDocumentExamination($value): bool|string + { + $data = BidDocumentExamination::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '标书审查内容不存在'; + } + return true; + } + + public function checkProduct($value): bool|string + { + $data = Material::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '产品信息不存在'; + } + return true; + } } \ No newline at end of file