|
@@ -0,0 +1,232 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Service;
|
|
|
+
|
|
|
+use App\Model\Construction;
|
|
|
+use App\Model\ConstructionOrderSub;
|
|
|
+use App\Model\InOutRecord;
|
|
|
+use App\Model\Inventory;
|
|
|
+use App\Model\InventoryInSub;
|
|
|
+use App\Model\InventoryOutSub;
|
|
|
+use App\Model\MaterialCharge;
|
|
|
+use App\Model\MaterialOrder;
|
|
|
+use App\Model\MaterialOrderInSub;
|
|
|
+use App\Model\MaterialReturn;
|
|
|
+use App\Model\RollFilmInventory;
|
|
|
+use App\Model\Setting;
|
|
|
+use App\Model\Transfer;
|
|
|
+use App\Model\TransferInSub;
|
|
|
+use App\Model\TransferOutSub;
|
|
|
+use App\Model\Warranty;
|
|
|
+use App\Service\Oa\OaService;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 所有审批相关与流水
|
|
|
+ * @package App\Models
|
|
|
+ */
|
|
|
+class CheckService extends Service
|
|
|
+{
|
|
|
+ //审批操作对应的数值
|
|
|
+ const one = 1; //领料单申领区域审批
|
|
|
+ const two = 2; //领料单发货区域审批
|
|
|
+ const three = 3; //领料单收货区域审批
|
|
|
+ const four = 4; //领料单入库区域审批
|
|
|
+ const five = 5; //施工单审核
|
|
|
+ const six = 6; //退料单审核
|
|
|
+ const seven = 7; //调拨单详情审核
|
|
|
+ const eight = 8; //调拨单入库审核
|
|
|
+ const nine = 9; //调拨单出库审核
|
|
|
+ const ten = 10; //盘点单详情审核
|
|
|
+ const eleven = 11; //盘点单入库审核
|
|
|
+ const twl = 12; //盘点单出库审核
|
|
|
+ const thirteen = 13; //计费领料单审核
|
|
|
+
|
|
|
+ //中文对照
|
|
|
+ public $map = [
|
|
|
+ self::one => '领料单申领区域审批',
|
|
|
+ self::two => '领料单发货区域审批',
|
|
|
+ self::three => '领料单收货区域审批',
|
|
|
+ self::four => '领料单入库区域审批',
|
|
|
+ self::five => '施工单审核',
|
|
|
+ self::six => '退料单审核',
|
|
|
+ self::seven => '调拨单详情审核',
|
|
|
+ self::eight => '调拨单入库审核',
|
|
|
+ self::nine => '调拨单出库审核',
|
|
|
+ self::ten => '盘点单详情审核',
|
|
|
+ self::eleven => '盘点单入库审核',
|
|
|
+ self::twl => '盘点单出库审核',
|
|
|
+ self::thirteen => '计费领料单审核',
|
|
|
+ ];
|
|
|
+
|
|
|
+ const TYPE_ONE = 1;//通过
|
|
|
+ const TYPE_TWO = 2;//不通过
|
|
|
+
|
|
|
+ //对应具体单子的具体操作数值(将待审批改为通过或者未审批)
|
|
|
+ public static $opt_case = [
|
|
|
+ self::one => 'check_material_order_apply', //领料单申领区域审批
|
|
|
+ self::two => 'check_material_order_send', //领料单发货区域审批
|
|
|
+ self::three => 'check_material_order_take', //领料单收货区域审批
|
|
|
+ self::four => 'check_material_order_In', //领料单入库区域审批 审批通过后有入库流水
|
|
|
+ self::five => 'check_construction', //施工单审核 审批通过后有出库流水
|
|
|
+ self::six => 'check_material_return', //退料单审核 审批通过后有出库流水
|
|
|
+ self::seven => 'check_transfer_sub', //调拨单详情审核
|
|
|
+ self::eight => 'check_transfer_in_sub', //调拨单入库审核 审批通过后有入库流水
|
|
|
+ self::nine => 'check_transfer_out_sub', //调拨单出库审核 审批通过后有出库流水
|
|
|
+ self::ten => 'check_inventory_sub', //盘点单详情审核
|
|
|
+ self::eleven => 'check_inventory_in_sub', //盘点单入库审核 审批通过后有入库流水
|
|
|
+ self::twl => 'check_inventory_out_sub', //盘点单出库审核 审批通过后有出库流水
|
|
|
+ self::thirteen => 'check_material_charge', //计费领料单审核
|
|
|
+ ];
|
|
|
+
|
|
|
+ //单子审批通过后产生流水
|
|
|
+ public static $record = [
|
|
|
+ self::four => 'record_material_order_In', //领料单入库区域审批 审批通过后有入库流水
|
|
|
+ self::five => 'record_construction', //施工单审核 审批通过后有出库流水
|
|
|
+ self::six => 'record_material_return', //退料单审核 审批通过后有出库流水
|
|
|
+ self::eight => 'record_transfer_in_sub', //调拨单入库审核 审批通过后有入库流水
|
|
|
+ self::nine => 'record_transfer_out_sub', //调拨单出库审核 审批通过后有出库流水
|
|
|
+ self::eleven => 'record_inventory_in_sub', //盘点单入库审核 审批通过后有入库流水
|
|
|
+ self::twl => 'record_inventory_out_sub', //盘点单出库审核 审批通过后有出库流水
|
|
|
+ ];
|
|
|
+
|
|
|
+ //将状态改为待审核
|
|
|
+ public static $opt_case2 = [
|
|
|
+ self::one => 'set_check_material_order_apply', //领料单申领区域审批
|
|
|
+ self::two => 'set_check_material_order_send', //领料单发货区域审批
|
|
|
+ self::three => 'set_check_material_order_take', //领料单收货区域审批
|
|
|
+ self::four => 'set_check_material_order_In', //领料单入库区域审批 审批通过后有入库流水
|
|
|
+ self::five => 'set_check_construction', //施工单审核 审批通过后有出库流水
|
|
|
+ self::six => 'set_check_material_return', //退料单审核 审批通过后有出库流水
|
|
|
+ self::seven => 'set_check_transfer_sub', //调拨单详情审核
|
|
|
+ self::eight => 'set_check_transfer_in_sub', //调拨单入库审核 审批通过后有入库流水
|
|
|
+ self::nine => 'set_check_transfer_out_sub', //调拨单出库审核 审批通过后有出库流水
|
|
|
+ self::ten => 'set_check_inventory_sub', //盘点单详情审核
|
|
|
+ self::eleven => 'set_check_inventory_in_sub', //盘点单入库审核 审批通过后有入库流水
|
|
|
+ self::twl => 'set_check_inventory_out_sub', //盘点单出库审核 审批通过后有出库流水
|
|
|
+ self::thirteen => 'set_check_material_charge', //计费领料单审核
|
|
|
+ ];
|
|
|
+
|
|
|
+ public static $opt_case3 = [
|
|
|
+ self::five => 'create_warranty', //施工单审核 审批产生质保单
|
|
|
+ ];
|
|
|
+
|
|
|
+ //将状态改为待审核
|
|
|
+ public function set_status_to_one($data){
|
|
|
+ $modelOne = MaterialOrder::where('order_number',$data['order_number'])->where('del_time',0)->first();
|
|
|
+
|
|
|
+ //待审
|
|
|
+ if($modelOne->apply_status >= MaterialOrder::STATE_ONE) return [false,'已待审或审核通过,操作失败!'];
|
|
|
+
|
|
|
+ $modelOne->apply_status = MaterialOrder::STATE_ONE;
|
|
|
+ $modelOne->save();
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * order_number 单据名称
|
|
|
+ * opt_case 审核单据的区域 有已经定义的方法
|
|
|
+ */
|
|
|
+ public function checkAll($data,$user){
|
|
|
+ if(empty($data['order_number']) || empty($data['opt_case']) || ! isset(self::$opt_case2[$data['opt_case']])) return [false,'必传参数不能为空或者参数值错误!'];
|
|
|
+
|
|
|
+ //具体方法
|
|
|
+ $function = self::$opt_case2[$data['opt_case']];
|
|
|
+
|
|
|
+ $function2 = self::$opt_case3[$data['opt_case']] ?? '';
|
|
|
+ try{
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ //更新单据的状态 从待审变成已审核
|
|
|
+ list($bool,$msg) = $this->$function($data);
|
|
|
+
|
|
|
+ if(! $bool){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $msg];
|
|
|
+ }
|
|
|
+
|
|
|
+ if($function2){
|
|
|
+ $this->$function2($data,$user);
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建审批流
|
|
|
+ $args = [
|
|
|
+ 'order_no' => $data['order_number'],
|
|
|
+ 'menu_id' => $data['menu_id'] ?? 0,
|
|
|
+ 'type' => $data['opt_case']
|
|
|
+ ];
|
|
|
+ $oa = new OaService();
|
|
|
+ $bool = $oa->createOaOrder($args);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ return [true, ''];
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //创建审批流 将状态改为待审核 结束
|
|
|
+
|
|
|
+ //将待审核状态改为审批通过或者驳回
|
|
|
+ public function check_status($data){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //产生流水
|
|
|
+ public function record_create($data){
|
|
|
+ $result = [];
|
|
|
+
|
|
|
+ //写入流水
|
|
|
+ InOutRecord::insert($result);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 业务单据审核统一入库
|
|
|
+ * order_number 订单编号
|
|
|
+ * type 1 =》 通过 2 =》 驳回
|
|
|
+ * opt_case 具体审核类型 已定义同名静态变量
|
|
|
+ */
|
|
|
+ public function createRecordAndInventory($data = []){
|
|
|
+ if(empty($data['order_number']) || empty($data['type']) || empty($data['opt_case']) || ! isset(self::$opt_case[$data['opt_case']])) return [false,config('response.FAILED')];
|
|
|
+
|
|
|
+ //具体方法
|
|
|
+ $function = self::$opt_case[$data['opt_case']];
|
|
|
+
|
|
|
+ try{
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ //更新单据的状态
|
|
|
+ $bool = $this->$function($data);
|
|
|
+
|
|
|
+ if($bool && $data['type'] == self::TYPE_ONE && isset(self::$record[$data['opt_case']])){
|
|
|
+ //审批通过 创建流水
|
|
|
+ $function_record = self::$record[$data['opt_case']];
|
|
|
+
|
|
|
+ $boolean = $this->$function_record($data);
|
|
|
+
|
|
|
+ if(! $boolean) { //创建流水失败 数据库回滚
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, config('response.FAILED')];
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新库存
|
|
|
+ $inventy = new InventoryService();
|
|
|
+ $boole = $inventy->changeInventory($data);
|
|
|
+ if(! $boole){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, config('response.FAILED')];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ return [true, config('response.SUCCESS')];
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, config('response.FAILED')];
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|