zhanglinxin před 1 rokem
rodič
revize
e3da0f8fed

+ 19 - 3
application/api/controller/Approveinfo.php

@@ -27,7 +27,7 @@ class Approveinfo extends Base
      *
      * @Apidoc\Method("POST")
      * @Apidoc\Param("way", type="string", require=true, desc="方式:create=申请,update=重新发起,edit=审批人修改")
-     * @Apidoc\Param("id", type="integer", require=true, desc="ID way=cretae 不传值或传0,way=update 传值申请记录接口的id,way=edit 传值审批列表接口的approve_id")
+     * @Apidoc\Param("id", type="integer", require=true, desc="ID way=cretae 不传值或传0,way=update 传值申请信息接口的id,way=edit 传值审批详情接口的approve_id")
      * @Apidoc\Param("module", type="integer", require=true, desc="模块类型:1=申购申请,2=呈批申请,3=入库申请,4=领用申请,5=出差申请,6=请假申请,7=用车申请,8=维修申请,9=合同呈批,10=收文批阅,11=学校文件")
      * @Apidoc\Param("reason", type="string", require=false, desc="module=1申购事由,module=2申请标题,module=4物品用途,module=5出差事由,module=6请假原因,module=7出发地点,module=8维修地点,module=9合同编号,module=10文件名称,module=11文件名称")
      * @Apidoc\Param("type", type="integer", require=false, desc="module=1采购类型,module=2呈批类型,module=5出差类型,module=6请假类型,module=8维修类型,module=9合同类型")
@@ -41,6 +41,7 @@ class Approveinfo extends Base
      * @Apidoc\Param("pay_type", type="integer", require=false, desc="module=1支付方式")
      * @Apidoc\Param("word_size", type="integer", require=false, desc="module=2发文字号")
      * @Apidoc\Param("number", type="integer", require=false, desc="module=2印制份数,module=9印制份数")
+     * @Apidoc\Param("apply_id", type="integer", require=false, desc="module=3采购审批单ID")
      * @Apidoc\Param("is_who", type="integer", require=false, desc="module=5是否跨关内关外:0=否,1=是 type=1")
      * @Apidoc\Param("start_am", type="string", require=false, desc="module=6开始时间段(上午或下午)")
      * @Apidoc\Param("end_am", type="string", require=false, desc="module=6结束时间段(上午或下午)")
@@ -71,6 +72,19 @@ class Approveinfo extends Base
      *          @Apidoc\Param("stock", type="integer", require=true,desc="数量"),
      *     ),
      * )
+     * @Apidoc\Param("stock_goods", type="array", require=false, desc="module=3 必传入库物品数据",
+     *     @Apidoc\Param("id", type="integer", require=false, desc="商品ID 传值=商品库选择,不传值=添加新商品"),
+     *     @Apidoc\Param("goods_category_first", type="integer", require=false, desc="商品分类一级ID"),
+     *     @Apidoc\Param("goods_category_id", type="integer", require=false, desc="商品分类ID"),
+     *     @Apidoc\Param("goods_no", type="string", require=false, desc="商品编号"),
+     *     @Apidoc\Param("goods_name", type="string", require=true, desc="商品名称"),
+     *     @Apidoc\Param("goods_brand", type="string", require=false, desc="商品品牌"),
+     *     @Apidoc\Param("goods_stock", type="array", require=true, desc="规格列表",
+     *          @Apidoc\Param("id", type="integer", require=false,desc="规格ID 传值=商品库选择,不传值=添加新商品"),
+     *          @Apidoc\Param("name", type="string", require=true,desc="规格名称"),
+     *          @Apidoc\Param("stock", type="integer", require=true,desc="数量"),
+     *     ),
+     * )
      * @Apidoc\Param("peer_user", type="array", require=false, desc="module=5 传同行员工数据",
      *     @Apidoc\Param("is_who", type="integer", require=true, desc="是否外部人员:0=否,1=是"),
      *     @Apidoc\Param("user_id", type="string", require=false, desc="用户userid"),
@@ -80,7 +94,7 @@ class Approveinfo extends Base
      */
     public function create()
     {
-        // {"method":"create","id": "","module": "1","reason": "测试","type": "1","desc": "","start_time": "","end_time": "","document": "","images": "","remark": "","total_amount": "1000","pay_type": "1","word_size": "","number": "","is_who": "","start_am": "","end_am": "","time": "","reach_address": "","end_address": "","scope": "","legal_opinion": "","founder": "","serial_number": "","apply_date": "","degree": "","department": "","department_sign": "","approve_user": "1925696723824730358","copy_user": "","apply_goods": [{"id": "1","goods_category_first": "1","goods_category_id": "3","goods_no": "100001","goods_name": "医疗口罩一次性","goods_brand": "一次性口罩","goods_stock": [{"id": "1","name": "均码,白色","price": "1","stock": "110"},{"id": "2","name": "均码,蓝色","price": "1","stock": "100"},{"id": "19","name": "均码,红色","price": "1","stock": "120"}]},{"id": "2","goods_category_first": "1","goods_category_id": "3","goods_no": "100002","goods_name": "84消毒液","goods_brand": "安其生","goods_stock": [{"id": "3","name": "380ml,低浓度","price": "1","stock": "110"},{"id": "4","name": "380ml,高浓度","price": "1","stock": "100"}]},{"id": "","goods_category_first": "1","goods_category_id": "3","goods_no": "100003","goods_name": "一次性手套丁腈橡胶","goods_brand": "万力","goods_stock": [{"name": "白色","price": "0.2","stock": "110"},{"name": "蓝色","price": "0.2","stock": "100"}]}],"peer_user": [{"is_who": "","user_id": "","name": "","desc": ""}]}
+        // {"way":"create","id": "","module": "1","reason": "测试","type": "1","desc": "","start_time": "","end_time": "","document": "","images": "","remark": "","total_amount": "1000","pay_type": "1","word_size": "","number": "","is_who": "","start_am": "","end_am": "","time": "","reach_address": "","end_address": "","scope": "","legal_opinion": "","founder": "","serial_number": "","apply_date": "","degree": "","department": "","department_sign": "","approve_user": "1925696723824730358","copy_user": "","apply_goods": [{"id": "1","goods_category_first": "1","goods_category_id": "3","goods_no": "100001","goods_name": "医疗口罩一次性","goods_brand": "一次性口罩","goods_stock": [{"id": "1","name": "均码,白色","price": "1","stock": "110"},{"id": "2","name": "均码,蓝色","price": "1","stock": "100"},{"id": "19","name": "均码,红色","price": "1","stock": "120"}]},{"id": "2","goods_category_first": "1","goods_category_id": "3","goods_no": "100002","goods_name": "84消毒液","goods_brand": "安其生","goods_stock": [{"id": "3","name": "380ml,低浓度","price": "1","stock": "110"},{"id": "4","name": "380ml,高浓度","price": "1","stock": "100"}]},{"id": "","goods_category_first": "1","goods_category_id": "3","goods_no": "100003","goods_name": "一次性手套丁腈橡胶","goods_brand": "万力","goods_stock": [{"name": "白色","price": "0.2","stock": "110"},{"name": "蓝色","price": "0.2","stock": "100"}]}],"peer_user": [{"is_who": "","user_id": "","name": "","desc": ""}]}
         $way = input('way');
         $id = input('id');
         $module = input('module');
@@ -95,6 +109,7 @@ class Approveinfo extends Base
         $total_amount = input('total_amount');
         $pay_type = input('pay_type');
         $word_size = input('word_size');
+        $apply_id = input('apply_id');
         $number = input('number');
         $is_who = input('is_who');
         $start_am = input('start_am');
@@ -113,8 +128,9 @@ class Approveinfo extends Base
         $approve_user = input('approve_user');
         $copy_user = input('copy_user');
         $apply_goods = input('apply_goods');
+        $stock_goods = input('stock_goods');
         $peer_user = input('peer_user');
-        $params = compact("way","id", "module", "reason", "type", "desc", "start_time", "end_time", "document", "images", "remark", "total_amount", "pay_type", "word_size", "number", "is_who", "start_am", "end_am", "time", "reach_address", "end_address", "scope", "legal_opinion", "founder", "serial_number", "apply_date", "degree", "department", "department_sign", "approve_user", "copy_user", "apply_goods", "peer_user");
+        $params = compact("way","id", "module", "reason", "type", "desc", "start_time", "end_time", "document", "images", "remark", "total_amount", "pay_type", "word_size", "apply_id","number", "is_who", "start_am", "end_am", "time", "reach_address", "end_address", "scope", "legal_opinion", "founder", "serial_number", "apply_date", "degree", "department", "department_sign", "approve_user", "copy_user", "apply_goods", "stock_goods","peer_user");
         $user = $this->user;
         if($way == CommonConstant::edit){
             ApproveService::make($id, $params, $user, CommonConstant::edit);

+ 20 - 0
application/common/model/StockGoods.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace app\common\model;
+
+use think\Model;
+
+/**
+ * 入库商品模型
+ */
+class StockGoods extends Model
+{
+    // 表名
+    protected $name = 'approve_stock_goods';
+
+    // 追加属性
+    protected $append = [
+
+    ];
+
+}

+ 42 - 12
application/common/service/ApproveInfoService.php

@@ -11,6 +11,7 @@ use app\common\model\ApproveInfo;
 use app\common\model\Department;
 use app\common\model\Goods;
 use app\common\model\GoodsStock;
+use app\common\model\StockGoods;
 use app\common\model\User;
 use think\Db;
 use think\Exception;
@@ -70,6 +71,7 @@ class ApproveInfoService
             'desc' => $params['desc'],
             'start_time' => $params['start_time'],
             'end_time' => $params['end_time'],
+            'apply_id' => $params['apply_id'],
         ];
 
         Db::startTrans();
@@ -121,12 +123,13 @@ class ApproveInfoService
         switch ($module) {
             case CommonConstant::MODULE_1:
                 // 添加申购物品
-                self::create_apply_goods($info_id, $params['apply_goods'], $type);
+                $res = self::create_goods($info_id, $module, $params['apply_goods'], $type);
 
                 $data['info_id'] = $info_id;
                 $data['reason'] = $params['reason'];
                 $data['type'] = $params['type'];
-                $data['total_amount'] = $params['total_amount'];
+//                $data['total_amount'] = $params['total_amount'];
+                $data['total_amount'] = $res['total_amount'];
                 $data['apply_date'] = $params['apply_date'];
                 $data['document'] = $params['document'];
                 $data['images'] = $params['images'];
@@ -143,6 +146,9 @@ class ApproveInfoService
                 $data['document'] = $params['document'];
                 break;
             case CommonConstant::MODULE_3:
+                // 添加入库物品
+                self::create_goods($info_id, $module, $params['stock_goods'], $type);
+
                 $data['info_id'] = $info_id;
                 $data['document'] = $params['document'];
                 $data['images'] = $params['images'];
@@ -242,21 +248,35 @@ class ApproveInfoService
     }
 
     /**
-     * 添加申购物品 1
+     * 添加申购物品/入库物品
      *
      * @param integer $info_id 申请ID
+     * @param integer $module 模块类型:1,3
      * @param array $params 申购物品数据
      * @param string $type 类型:create=申请,update=重新发起
      **/
-    public static function create_apply_goods($info_id, $params, $type)
+    public static function create_goods($info_id, $module, $params, $type)
     {
         if (!$params) {
             return true;
         }
 
+        switch ($module) {
+            case CommonConstant::MODULE_1:
+                $model = ApplyGoods::class;
+                break;
+            case CommonConstant::MODULE_3:
+                $model = StockGoods::class;
+                break;
+        }
+        if ($type == 'update') {
+            $model::where('info_id', $info_id)->delete();
+        }
+
         $goods_ids = [];
         $goods_ids_new = [];
         $goods_list_new = [];
+        $total_amount = 0;
         foreach ($params as $value) {
             if ($value['id'] > 0) {
                 // 商品库选择
@@ -281,6 +301,7 @@ class ApproveInfoService
                 }
             }
         }
+
         // 商品库选择
         if ($goods_ids) {
             $goods_list = Goods::field('status,is_deleted,create_at', true)
@@ -295,20 +316,23 @@ class ApproveInfoService
             $goods_name = '';
             $goods_stock_name = '';
             $apply_goods_data = [];
-            foreach ($goods_ids as $value) {
+            foreach ($goods_ids as $key=>$value) {
                 if (array_key_exists($value['id'], $goods_object)) {
                     // 商品库里有该商品
                     $goods_info = $goods_object[$value['id']];
                     $goods_stock_info = array_column($goods_info['goods_stock'], null, 'id');
                     $goods_stock_data = [];
+                    $total_price = 0;
                     foreach ($value['goods_stock'] as $val) {
                         if (array_key_exists($val['id'], $goods_stock_info)) {
                             // 商品库里有该商品规格
+                            $price = isset($val['price']) ? $val['price'] : 0;
+                            $total_price = bcadd($total_price, $price, 2);
                             $goods_stock_data[] = [
                                 'id' => $val['id'],
                                 'goods_id' => $goods_info['id'],
                                 'name' => $val['name'],
-                                'price' => $val['price'],
+                                'price' => $price,
                                 'stock' => $val['stock'],
                             ];
                         } else {
@@ -324,8 +348,10 @@ class ApproveInfoService
                         'goods_no' => $goods_info['goods_no'],
                         'goods_name' => $goods_info['goods_name'],
                         'goods_brand' => $goods_info['goods_brand'],
+                        'total_price' => $total_price,
                         'goods_data' => json_encode($goods_stock_data, JSON_UNESCAPED_UNICODE),
                     ];
+                    $total_amount = bcadd($total_amount,$total_price,2);
                 } else {
                     // 商品库里没有该商品
                     $goods_name .= $value['goods_name'] . '、';
@@ -339,8 +365,7 @@ class ApproveInfoService
                 // 商品库选择的商品的规格 在商品库没有匹配到 返回错误提示
                 except($goods_stock_name . '等商品规格在商品库里不存在或已删除');
             }
-            // 添加申购商品数据
-            ApplyGoods::insertAll($apply_goods_data);
+            $model::insertAll($apply_goods_data);
         }
         // 添加新商品
         if ($goods_ids_new) {
@@ -366,6 +391,7 @@ class ApproveInfoService
                     $goods_stock_info = [];
                 }
                 $goods_stock_data = [];
+                $total_price = 0;
                 foreach ($value['goods_stock'] as $val) {
                     if (array_key_exists($val['name'], $goods_stock_info)) {
                         // 商品库里有该商品规格
@@ -379,25 +405,29 @@ class ApproveInfoService
                         $stock = GoodsStock::create($stock_data);
                         $stock_id = $stock->id;
                     }
+                    $price = isset($val['price']) ? $val['price'] : 0;
+                    $total_price = bcadd($total_price, $price, 2);
                     $goods_stock_data[] = [
                         'id' => $stock_id,
                         'goods_id' => $goods_id,
                         'name' => $val['name'],
-                        'price' => $val['price'],
+                        'price' => $price,
                         'stock' => $val['stock'],
                     ];
                 }
                 $goods_data['info_id'] = $info_id;
+                $goods_data['total_price'] = $total_price;
                 $goods_data['goods_data'] = json_encode($goods_stock_data, JSON_UNESCAPED_UNICODE);
                 $apply_goods_data[] = $goods_data;
+                $total_amount = bcadd($total_amount,$total_price,2);
             }
-            // 添加申购商品数据
-            ApplyGoods::insertAll($apply_goods_data);
+            $model::insertAll($apply_goods_data);
         }
+        return compact("total_amount");
     }
 
     /**
-     * 添加同行人员 5
+     * 添加同行人员
      *
      * @param integer $info_id 申请ID
      * @param array $params 同行人员数据

+ 6 - 4
application/common/validate/ApproveStock.php

@@ -13,6 +13,7 @@ class ApproveStock extends Validate
      * 验证规则
      */
     protected $rule = [
+        'stock_goods' => 'require',
         'approve_user' => 'require',
     ];
     /**
@@ -24,9 +25,9 @@ class ApproveStock extends Validate
      * 验证场景
      */
     protected $scene = [
-        'create' => ['approve_user'],
-        'update' => ['approve_user'],
-        'edit' => [],
+        'create' => ['stock_goods','approve_user'],
+        'update' => ['stock_goods','approve_user'],
+        'edit' => ['stock_goods'],
     ];
 
     /**
@@ -39,10 +40,11 @@ class ApproveStock extends Validate
     public function __construct(array $rules = [], $message = [], $field = [])
     {
         $this->field = [
+            'apply_goods' => '入库物品',
             'approve_user' => '审批人',
         ];
         $this->message = array_merge($this->message, [
-
+            'apply_goods.require' => '请添加入库物品',
         ]);
         parent::__construct($rules, $message, $field);
     }