| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 | <?phpnamespace App\Service;use App\Model\Record;use Illuminate\Support\Facades\DB;class U8ServerService extends Service{    protected $databaseService;    /**     * @var string|null     */    protected $error;    /**     * U8ServerService constructor.     */    public function __construct($loginUser = [])    {        $service = new U8DatabaseServerService($loginUser);        $this->databaseService = $service->db;        $this->error = $service->error;    }    /**     * 获取错误信息     *     * @return string|null     */    public function getError()    {        return $this->error;    }    public function purchaseRequisition($data, $user){        $qx = $user['qx'];        $order_date = $data['order_date'] ?? [];        $order_date = array_filter($order_date);        $order_number = $data['order_number'] ?? "";        $model = $this->databaseService->table('PU_AppVouch as a')            ->leftJoin('Person as c', 'c.cPersonCode', 'a.cPersonCode')            ->when(empty($qx), function ($query) use($user){                return $query->where('a.cMaker',$user['username']);            })            ->when(! empty($order_number), function ($query) use($order_number){                return $query->where('a.cCode','LIKE', '%'.$order_number.'%');            })            ->when(! empty($order_date), function ($query) use($order_date){                $start = date('Y-m-d H:i:s.000', $order_date[0]);                $end = date('Y-m-d H:i:s.000', $order_date[1]);                return $query->whereBetween('a.dDate', [$start, $end]);            })            ->where(function ($query) {                $query->where('a.iverifystateex', 0)                    ->OrwhereNull('a.iverifystateex');            })            ->select('a.cMaker as crt_name', DB::raw("COALESCE(c.cPersonName, '') as purchase_name"),'a.cBusType as business_type','a.cCode as order_number',DB::raw("CONVERT(varchar(10), a.dDate, 120) as order_date"))            ->orderBy('a.ID','desc');        $list = $this->limit($model,'',$data);        $list = $this->fillAll($list, 2);       return [true , $list];    }    public function purchaseRequisitionDetail($data, $user){        if(empty($data['order_number'])) return [false, '采购请购单号不能为空'];        $order = $this->databaseService->table('PU_AppVouch as a')            ->leftJoin('Person as c', 'c.cPersonCode', 'a.cPersonCode')//            ->where('a.cMaker',$user['username'])//            ->where('a.iverifystateex',0)            ->where('cCode', $data['order_number'])            ->select('a.cMaker as crt_name', DB::raw("COALESCE(c.cPersonName, '') as purchase_name"),'a.cBusType as business_type','a.cCode as order_number',DB::raw("CONVERT(varchar(10), a.dDate, 120) as order_date"),'a.ID as id')            ->first();        if(empty($order)) return [false, '采购请购单不存在'];        $order = (array) $order;        $detail = $this->databaseService->table('PU_AppVouchs as a')            ->leftJoin('Inventory as b', 'b.cInvCode', 'a.cInvCode')            ->leftJoin('ComputationUnit as c', 'c.cComunitCode', 'b.cComUnitCode')            ->where('a.ID', $order['id'])            ->select('b.cInvName as product_title','b.cInvCode as product_code','a.fQuantity as quantity','c.cComUnitName as unit_title',DB::raw("CONVERT(varchar(10), a.dRequirDate, 120) as need_arrived_date"))            ->get();        // 转为数组的数组        $detail = array_map(function ($item) {            return (array) $item;        }, $detail->toArray());        $order['detail'] = $detail;        return [true, $order];    }    public function purchaseOrder($data, $user){        $qx = $user['qx'];        $order_date = $data['order_date'] ?? [];        $order_date = array_filter($order_date);        $order_number = $data['order_number'] ?? "";        $model = $this->databaseService->table('PO_Pomain as a')            ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cVenCode')            ->when(empty($qx), function ($query) use($user){                return $query->where('a.cMaker',$user['username']);            })            ->when(! empty($order_number), function ($query) use($order_number){                return $query->where('a.cPOID','LIKE', '%'.$order_number.'%');            })            ->when(! empty($order_date), function ($query) use($order_date){                $start = date('Y-m-d H:i:s.000', $order_date[0]);                $end = date('Y-m-d H:i:s.000', $order_date[1]);                return $query->whereBetween('a.dPODate', [$start, $end]);            })            ->where('a.iverifystateex',0)            ->select('a.cMaker as crt_name', 'a.cBusType as business_type','a.cPOID as order_number',DB::raw("CONVERT(varchar(10), a.dPODate, 120) as order_date"),'c.cVenName as supplier_title')            ->orderBy('a.POID','desc');        $list = $this->limit($model,'',$data);        $list = $this->fillAll($list, 1);        return [true , $list];    }    public function purchaseOrderDetail($data, $user){        if(empty($data['order_number'])) return [false, '采购单号不能为空'];        $order = $this->databaseService->table('PO_Pomain as a')            ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cVenCode')            ->where('cPOID', $data['order_number'])//            ->where('a.cMaker',$user['username'])//            ->where('a.iverifystateex',0)            ->select('a.cMaker as crt_name', 'a.cBusType as business_type','a.cPOID as order_number',DB::raw("CONVERT(varchar(10), a.dPODate, 120) as order_date"),'c.cVenName as supplier_title','a.POID as id')            ->first();        if(empty($order)) return [false, '采购单不存在'];        $order = (array) $order;        $detail = $this->databaseService->table('PO_Podetails as a')            ->leftJoin('Inventory as b', 'b.cInvCode', 'a.cInvCode')            ->leftJoin('ComputationUnit as c', 'c.cComunitCode', 'b.cComUnitCode')            ->where('a.POID', $order['id'])            ->select('b.cInvName as product_title','b.cInvCode as product_code','a.iQuantity as quantity','c.cComUnitName as unit_title','a.iSum as amount')            ->get();        // 转为数组的数组        $detail = array_map(function ($item) {            return (array) $item;        }, $detail->toArray());        $order['detail'] = $detail;        return [true, $order];    }    public function paymentOrder($data, $user){        $qx = $user['qx'];        $order_date = $data['order_date'] ?? [];        $order_date = array_filter($order_date);        $order_number = $data['order_number'] ?? "";        $model = $this->databaseService->table('AP_ApplyPayVouch as a')            ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cDwCode')            ->when(empty($qx), function ($query) use($user){                return $query->where('a.cOperator',$user['username']);            })            ->when(! empty($order_number), function ($query) use($order_number){                return $query->where('a.cVouchID','LIKE', '%'.$order_number.'%');            })            ->when(! empty($order_date), function ($query) use($order_date){                $start = date('Y-m-d H:i:s.000', $order_date[0]);                $end = date('Y-m-d H:i:s.000', $order_date[1]);                return $query->whereBetween('a.dVouchDate', [$start, $end]);            })            ->whereNull('a.cCheckMan')            ->select('a.cOperator as crt_name', 'c.cVenName as supplier_title','a.cVouchID as order_number',DB::raw("CONVERT(varchar(10), a.dVouchDate, 120) as order_date"))            ->orderBy('a.PID','desc');        $list = $this->limit($model,'',$data);        $list = $this->fillAll($list, 3);        return [true , $list];    }    public function paymentOrderDetail($data, $user){        if(empty($data['order_number'])) return [false, '付款单号不能为空'];        $order = $this->databaseService->table('AP_ApplyPayVouch as a')            ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cDwCode')//            ->where('a.cOperator',$user['username'])//            ->whereNull('a.cCheckMan')            ->where('cVouchID', $data['order_number'])            ->select('a.cOperator as crt_name', 'c.cVenName as supplier_title','a.cVouchID as order_number',DB::raw("CONVERT(varchar(10), a.dVouchDate, 120) as order_date"),'a.PID as id')            ->first();        if(empty($order)) return [false, '付款单不存在'];        $order = (array) $order;        $detail = $this->databaseService->table('AP_ApplyPayVouchs as a')            ->where('a.PID', $order['id'])            ->select('a.cSource as source','a.cCoVouchID as source_order_number','a.iApplyAmt_f as amount')            ->get();        // 转为数组的数组        $detail = array_map(function ($item) {            return (array) $item;        }, $detail->toArray());        $order['detail'] = $detail;        return [true, $order];    }    public function getOrderDetails($data,$user){        $type = $data['type'];        if($type == 1){            // 采购单            [$success, $order] = $this->purchaseOrderDetail($data,$user);        }elseif ($type == 2){            // 请购单            [$success, $order] = $this->purchaseRequisitionDetail($data,$user);        }else{            // 付款单            [$success, $order] = $this->paymentOrderDetail($data,$user);        }        return [$success, $order];    }    private function fillAll($list, $type){        if(empty($list['data'])) return $list;        $map = Record::where('del_time',0)            ->where('type', $type)            ->whereIn('order_number',array_column($list['data'],'order_number'))            ->pluck('id','order_number')            ->toArray();        foreach ($list['data'] as $key => $value){            $is_create = 0;            if(isset($map[$value->order_number])) $is_create = 1;            $list['data'][$key]->is_create = $is_create;        }        return $list;    }}
 |