• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
php-laravel敏捷开发代码

1,新增

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use App\Http\Utils\ValidatorMsg;
use App\Exceptions\InvalidRequestException;

 

数据校验

public static function addSignComValidatorHK($requstData){
        $validator = Validator::make($requstData, [

            'com_name_hk' => 'required',
            'com_addr_hk' => 'required',
            'contact_hk' => 'required',


        ], [], [
            'com_name_hk' => '公司名称繁体',
            'com_addr_hk' => '公司地址繁文',
            'contact_hk' => '联系人繁体',

        ]);

        if ($validator->fails()) {
            $errors = $validator->errors()->toArray();
            $err_msg = ValidatorMsg::getMsg($errors);
            throw new InvalidRequestException($err_msg);
        }
    }

    public static function addSignComValidator($requstData){
        $validator = Validator::make($requstData, [
            'sign_com_type' => 'required',
            'com_name' => 'required',

        ], [], [
            'sign_com_type' => '签约公司分类 1大陆 2香港',
            'com_name' => '公司中文名称',

        if ($validator->fails()) {
            $errors = $validator->errors()->toArray();
            $err_msg = ValidatorMsg::getMsg($errors);
            throw new InvalidRequestException($err_msg);
        }
    }

控制器

public  function addSignCom(Request $request){
        $requestParams = $request->all();
        $signComType = arrayGet($requestParams,"sign_com_type");

        self::addSignComValidator($requestParams);

        if($signComType ==  SignComsModel::SIGN_COM_TYPE_CH){
//            self::addSignComValidatorCh($requestParams);
        }else{
            self::addSignComValidatorHK($requestParams);
        }


        SignComService::addSignCom($requestParams);
        return $this->setSuccess();
    }

    //新增快递物流
    public function addShipping(Request $request)
    {
        $requestParams = $request->all();
        $validator = Validator::make($requestParams, [
            'shipping_code' => 'required',
            'shipping_name' => 'required',
            'shipping_type' => 'required',

        ])->setAttributeNames(
            [
                'shipping_code' => '物流编码',
                'shipping_name' => '物流名称',
                'shipping_type' => '物流类型',
            ]
        );
        //验证钩子
        $validator->after(function ($validator) use ($requestParams) {
//            if (!in_array($requestParams["type"], [1, 2])) {
//                $validator->errors()->add('type', '库存类型参数:调拨/移位错误');
//            }
        });
        if ($validator->fails()) {
            $errors = $validator->errors()->all();
            throw new InvalidRequestException($errors[0] ?? "未知错误,请联系技术");
        }
        ShippingService::addShipping($requestParams);
        return $this->setSuccess();
    }

 

    public static function addShippingWarehouse($reqParams=[]){
        $shippingId = arrayGet($reqParams, "shipping_id", 0, "intval");
        $companyId = arrayGet($reqParams, "company_id", 0, "intval");
        $warehouseId = arrayGet($reqParams, "warehouse_id", 0, "intval");
        $lieShipMonthBalanceId = arrayGet($reqParams, "ship_month_balance_id", 0, "intval");
        $signComId = arrayGet($reqParams, "sign_com_id", 0, "intval");
        $remark = arrayGet($reqParams, "remark");

        $signcomInfo = SignComsModel::getOneById($signComId);
        if(empty($signcomInfo)){
            throw new InvalidRequestException("没有查询到改签约公司相关信息");
        }


        $shippingInfo = ShippingModel::where("shipping_id",$shippingId)->with(["shipping_mode","shipping_month_balance"])->first();
        if (empty($shippingInfo)) {
            throw new InvalidRequestException("没有查询到快递物流相关信息");
        }

        if ($shippingInfo["status"] == ShippingModel::$STATUS_DISABLE) {
            throw new InvalidRequestException("快递物流已禁用");
        }

//        $shippingMonthBalance = ShippingMonthBalanceModel::where("shipping_id",$shippingId)->where("id",$lieShipMonthBalanceId)->count();
//        if(empty($shippingMonthBalance)){
//            throw new InvalidRequestException("没找到物流/月结账号相关信息");
//        }
        $shippingWarehouseModel = new ShippingWarehouseModel();

        $isExists = $shippingWarehouseModel->checkShippingWarehouseIsExists([
            "company_id"=>$companyId,
            "warehouse_id"=>$warehouseId,
            "sign_com_id"=>$signComId,
            "shipping_id"=>$shippingId,
        ]);
        if($isExists){
            throw new InvalidRequestException("该仓库快递物流配置已存在");
        }

        try{

            \DB::connection("mysql")->beginTransaction();

            $shippingWarehouseId = $shippingWarehouseModel->addShippingWarehouse([
                "shipping_warehouse_code"=>"",
                "shipping_id"=>$shippingId,
                "ship_month_balance_id"=>$lieShipMonthBalanceId,
                "company_id"=>$companyId,
                "company_name"=>arrayGet(CommonEnum::$WmsCompanyNameList, $companyId),
                "warehouse_id"=>$warehouseId,
                "remark"=>$remark,
                "sign_com_id"=>$signComId,
                "sign_com_name"=>$signcomInfo["com_name"]??"",
                "create_uid"=>getAdminUserId(),
                "create_name"=>getAdminUserName(),
                "create_time"=>time(),
            ]);
            $shippingWarehouseModel->where("shipping_warehouse_id",$shippingWarehouseId)->update([
                "shipping_warehouse_code"=>str_pad((string)$shippingWarehouseId, 4, '0', STR_PAD_LEFT)
            ]);

            \DB::connection("mysql")->commit();
        }catch (\Throwable $e){
            \DB::connection("mysql")->rollBack();
            throw new InvalidRequestException(sprintf("新增快递物流配置失败:%s",$e->getMessage()));
        }
    }

 

 

 

 

服务层service

/判断是否存在相同数据
    public static function checkIsSameSignCom($comName,$useScope,$exclude=[]){
        $query =  SignComsModel::where("com_name",$comName)->where("use_scope",$useScope);

        if(!empty($exclude)){
            $query->whereNotIn("sign_com_id",$exclude);
        }
        return $query->count();
    }

    //判断是否存在相同数据
    public static function checkIsSamePendingProtocolByAddTaxinfo($params,$exclude=[])
    {
        $query = ProtocolModel::where("org_id", $params["org_id"])->where("user_id", $params['user_id'])
            ->where("tax_title", $params["tax_title"])
            ->whereIn("audit_status", [1, 2])
            ->where("protocol_type", 7)
            ->where("status", 1);

        if(!empty($exclude)){
            $query = $query->whereNotIn("id",$exclude);
        }
        $count =  $query->count();
        if ($count > 0) {
            throw new InvalidRequestException('客户协议已存在审核中的数据,请等待结果后操作');
        }

    }


    public static function addSignCom($requestParams){
        $data["sign_com_type"] = arrayGet($requestParams, "sign_com_type");
        $data["com_name"] = arrayGet($requestParams, "com_name");
        $data["com_name_hk"] = arrayGet($requestParams, "com_name_hk");
        $data["com_name_en"] = arrayGet($requestParams, "com_name_en");
        $data["com_website"] = arrayGet($requestParams, "com_website");
        $data["create_time"] = time();
        $data["create_uid"] = getAdminUserId();
        $data["create_name"] = getAdminUserName();
        if(self::checkIsSameSignCom($data["com_name"],$data["use_scope"])){
            throw new InvalidRequestException(sprintf("公司:%s已存在!",$data["com_name"]));
        }
        try{
            \DB::connection("mysql")->beginTransaction();
            $id = SignComsModel::insertGetId($data);

            $signComCode = sprintf("QYGS%s",str_pad($id, 4, "0", STR_PAD_LEFT));
            SignComsModel::where("sign_com_id",$id)->update([
            "sign_com_code"=>$signComCode
            ]);

            
            \DB::connection("mysql")->commit();
        }catch (\Throwable $e){
            \DB::connection("mysql")->rollBack();
            throw new InvalidRequestException(sprintf("新增失败:%s",$e->getMessage()));
        }


        ActionLogService::addLog(ActionLogService::TYPE_SIGN_COM_ADD, $id, [
            'message' => '新增了签约公司'
        ]);

        return $id;
    }


    public static function addShipping($reqParams=[]){
        $shippingCode = arrayGet($reqParams, "shipping_code", "", "trim");
        $shippingName = arrayGet($reqParams, "shipping_name", "", "trim");
        $shippingType = arrayGet($reqParams, "shipping_type", 0, "intval");
        $shippingDesc = arrayGet($reqParams, "shipping_desc", "", "trim");

        $shippingMonthBalance = arrayGet($reqParams, "shipping_month_balance", "", "trim");//json
        $shippingMode = arrayGet($reqParams, "shipping_mode", "", "trim");//json

        $shippingMonthBalance = json_decode($shippingMonthBalance,true);
        $shippingMode = json_decode($shippingMode,true);

        try{
            $shippingModel = new ShippingModel();

            if($shippingModel->checkCodeIsExists($shippingCode)){
                throw new InvalidRequestException("物流编码已存在");
            }

            if($shippingModel->checkNameIsExists($shippingName)){
                throw new InvalidRequestException("物流名称已存在");
            }

            \DB::connection("mysql")->beginTransaction();


            $shippingTypes =  self::getShippingTypes("物流类型");
            if(!in_array($shippingType,array_keys($shippingTypes))){
                throw new InvalidRequestException("物流类型不存在或已禁用");
            }

            $shippingId = $shippingModel->addShipping([
                "shipping_code"=>$shippingCode,
                "shipping_name"=>$shippingName,
                "shipping_desc"=>truncStr($shippingDesc),
                "shipping_type"=>$shippingType,
                "create_uid"=>getAdminUserId(),
                "create_name"=>getAdminUserName(),
                "create_time"=>time(),
            ]);

            if(!empty($shippingMonthBalance) && is_array($shippingMonthBalance)){
                foreach($shippingMonthBalance as $shippingMonthBalanceItem){
                    $shippingMonthBalanceItem = checkRequestParamsNull($shippingMonthBalanceItem);
                    $isDefault = !empty($shippingMonthBalanceItem["is_default"]) ? intval($shippingMonthBalanceItem["is_default"]) : 0;
                    if(empty($shippingMonthBalanceItem["month_balance_code"])){
                        continue;
                    }
                    ShippingMonthBalanceModel::insertGetId([
                        "shipping_id"=>$shippingId,
                        "month_balance_code"=>$shippingMonthBalanceItem["month_balance_code"],
                        "contact"=>$shippingMonthBalanceItem["contact"] ?? "",
                        "contact_tel"=>$shippingMonthBalanceItem["contact_tel"] ?? "",
                        "is_default"=>$isDefault,
                        "remark"=>$shippingMonthBalanceItem["remark"] ?? "",
                        "create_time"=>time(),
                    ]);
                }
            }


            if(!empty($shippingMode) && is_array($shippingMode)){
                foreach($shippingMode as $shippingModeItem){
                    $shippingModeItem = checkRequestParamsNull($shippingModeItem);
                    $isDefault = !empty($shippingModeItem["is_default"]) ? intval($shippingModeItem["is_default"]) : 0;
                    if(empty($shippingModeItem["shipping_mode_name"])){
                        continue;
                    }
                    ShippingModeModel::insertGetId([
                        "shipping_id"=>$shippingId,
                        "shipping_mode_code"=>$shippingModeItem["shipping_mode_code"]??"",
                        "shipping_mode_name"=>$shippingModeItem["shipping_mode_name"]??"",
                        "shipping_params"=>$shippingModeItem["shipping_params"] ?? "",
                        "is_default"=>$isDefault,
                        "remark"=>$shippingModeItem["remark"] ?? "",
                        "create_time"=>time(),
                    ]);
                }
            }

            \DB::connection("mysql")->commit();
        }catch (\Throwable $e){
            \DB::connection("mysql")->rollBack();
            throw new InvalidRequestException(sprintf("新增快递物流失败:%s",$e->getMessage()));
        }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

model层

<?php

namespace App\Http\Models;

use App\Http\Models\BaseModel;

class StockInModel extends BaseModel
{

    public $connection = 'mysql';
    protected $table = 'lie_stock_in';
    protected $primaryKey = 'stock_in_id';
    protected $guarded = ['stock_in_id'];  //设置字段黑名单
    const   CREATED_AT = 'create_time';
    const   UPDATED_AT = 'update_time';
    public $timestamps = false;


    public static $STATUS_ENABLE = 1;//启用
    public static $STATUS_DISABLE = 0;//禁用


    public static $STATUS_FORMAT = [
        1 => "启用",
        0 => "停用",
    ];


     /*
     * 自动维护更新时间
     */
    public function fromDateTime($value)
    {
        return strtotime(parent::fromDateTime($value));
    }

    public function getCreateTimeAttribute()
    {
        if ($this->attributes["create_time"] <= 0) {
            return "";
        }
        return date("Y-m-d H:i:s", $this->attributes["create_time"]);
    }


    public function stock_in_items()
    {
        return $this->hasMany(StockInItemModel::class, "stock_in_id", "stock_in_id");
    }

    //关联关系,关联到采购主表
    public function purchase_order()
    {
        return $this->belongsTo(PurchaseOrderModel::class, 'purchase_id', 'purchase_id');
    }


    /*
     * 新增
     */
    public function addStockIn($data)
    {
        $data = $this->filterField($data);
        return static::insertGetId($data);
    }

    public static function createInfo($data)
    {
        return self::insertGetId($data);
    }


    //判断是否存在    
    public  function checkCodeIsExists($shippingCode,$excludeIds=[]){
        $query = self::where("shipping_code",$shippingCode);
        if(!empty($excludeIds)){
            $query->whereNotIn("shipping_id",$excludeIds);
        }
        return $query->exists();
    }


    public  function checkNameIsExists($shippingName,$excludeIds=[]){
        $query = self::where("shipping_name",$shippingName);
        if(!empty($excludeIds)){
            $query->whereNotIn("shipping_id",$excludeIds);
        }
        return $query->exists();
    }


    public  function checkShippingWarehouseIsExists($whereIn=[],$excludeIds=[]){
        $query =  self::newQuery();
        foreach ($whereIn as $key=>$val){
            $query->where($key,$val);
        }
        if(!empty($excludeIds)){
            $query->whereNotIn("shipping_warehouse_id",$excludeIds);
        }
        return $query->exists();
    }

    public static function isExistsPurData($purInspectId)
    {
        return self::where('pur_inspect_id', $purInspectId)->exists();
    }

    //获取单挑数据
    public static function getOneById($id)
    {   
        $res = self::where('inspection_order_id', $id)->first();
        return $res ? $res->toArray() : [];
    }

    //获取多条数据
    public static function getListByIdArr($ids)
    {   
        $res = self::whereIn('inspection_order_id', $ids)->get();
        return $res ? $res->toArray() : [];
    }


    public static function getStockListByidsAndWhere($ids,$where=[])
    {
        return self::whereIn("id", $ids)->where($where)->with("stock_in_items")->get()->toArray();
    }

    public static function getStockInByErpSn($erp_stock_in_sn)
    {
        $info = self::where("erp_stock_in_sn", $erp_stock_in_sn)->where("status", "<>",
            self::STATUS_DISABLE)->with("stock_in_items")->get();
        return $info ? $info->toArray() : [];
    }

    

    public static function getListByWhere($where)
    {
        $res = self::where($where)->get();
        return $res ? $res->toArray() : [];
    }

    public static function getPurchaseUsersByPurIds($purchase_id = [])
    {
        return static::whereIn("purchase_id", (array)$purchase_id)->pluck("purchase_name", "purchase_id")->toArray();
    }

    public static function getPurchaseId($purchase_sn)
    {
        return static::where("purchase_sn", trim($purchase_sn))->rule(self::$ruleViewList)->value("purchase_id");
    }




    public static function getStockInfoAndStockInItemsAndLockInfoById($id)
    {
        $res = self::where('id', $id)->with("stock_in_items")->with([
            "stock_lock" => function ($q) {
                $q->where("lock_status", 1);
            }
        ])->first();
        return $res ? $res->toArray() : [];
    }

    public static function getStockInByPurchaseId($purchaseId)
    {
        return self::whereIn("stock_in_type", [StockInModel::STOCK_IN_TYPE_PURCHASE, StockInModel::STOCK_IN_TYPE_PLAN, StockInModel::STOCK_IN_TYPE_CONSIGNMENT, StockInModel::STOCK_IN_TYPE_CONSIGNMENT_PURCHASE,])
            ->whereHasIn("stock_in_items", function ($query) use ($purchaseId) {
                //排除作废的明细item_status=3
                $query->where("purchase_id", intval($purchaseId))->where("item_status", "!=",
                    StockInItemModel::ITEM_STATUS_DISABLE);
            })->get()->toArray();
    }


    //修改数据
    public static function updateById($id, $data)
    {
        return self::where('inspection_order_id', $id)->update($data);
    }

    public static function updateByIdArr($idArr, $data)
    {
        return self::whereIn('inspection_order_id', $idArr)->update($data);
    }


    /*
     * 作废
     */
    public function cancelStockIn($stock_in_id)
    {
        return static::where("stock_in_id", intval($stock_in_id))->where("status", self::STATUS_NEED_STOCK_IN)->update([
            "status"      => self::STATUS_DISABLE,
            "update_time" => time(),
        ]);
    }

    //删除
    public static function delStockByIds($isToStockSummaryIds){
        return self::whereIn("id",$isToStockSummaryIds)->delete();
    }


}

 

 

2,列表查询

<?php
查询列表
use App\Exceptions\InvalidRequestException;
use App\Http\Controllers\Controller;
use App\Http\Services\FreezeStockService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use App\Http\Utils\ValidatorMsg;

//控制器
public function getFreezeStock(Request $request)
{
    $requestParams = $request->all();
    list($list, $count) = FreezeStockService::getFreezeStock($requestParams);
    return $this->setSuccessData([
        "list" => $list ?? [],
        "total" => $count,
    ]);
}


//service

public static function getFreezeStock($requestParams = []){
        $pageInfo["page"] = arrayGet($requestParams, "page", 1, "intval");
        $pageInfo["limit"] = arrayGet($requestParams, "limit", static::_LIMIT_, "intval");

        $buildEqualQueryData["freeze_stock_sn"] = arrayGet($requestParams, "freeze_stock_sn");
        $buildEqualQueryData["status"] = arrayGet($requestParams, "status",null);

        $buildEqualQueryData["stock_in_batch_sn"] = arrayGet($requestParams, "stock_in_batch_sn");
        $buildEqualQueryData["identify_sn"] = arrayGet($requestParams, "identify_sn");
        $buildEqualQueryData["erp_stock_lot"] = arrayGet($requestParams, "erp_stock_lot");
        $buildEqualQueryData["warehouse_id"] = arrayGet($requestParams, "warehouse_id");
        $buildEqualQueryData["sku_id"] = arrayGet($requestParams, "sku_id");
        $buildEqualQueryData["goods_sn"] = arrayGet($requestParams, "goods_sn");

        $buildLikeQueryData["goods_name"] = arrayGet($requestParams, "goods_name");


        $buildTimeQueryData = [];
        $createTime =  arrayGet($requestParams, "create_time");
        $freezeTime =  arrayGet($requestParams, "freeze_time");
        $releaseTime =  arrayGet($requestParams, "release_time");
        if($createTime){
            $createTime = explode("~", $createTime);
            $buildTimeQueryData["create_time"]["begin_time"] = isset($createTime[0]) ? $createTime[0] : "";
            $buildTimeQueryData["create_time"]["end_time"] = isset($createTime[1]) ? $createTime[1] : "";
        }

        if($freezeTime){
            $freezeTime = explode("~", $freezeTime);
            $buildTimeQueryData["freeze_time"]["begin_time"] = isset($freezeTime[0]) ? $freezeTime[0] : "";
            $buildTimeQueryData["freeze_time"]["end_time"] = isset($freezeTime[1]) ? $freezeTime[1] : "";
        }

        if($releaseTime){
            $releaseTime = explode("~", $releaseTime);
            $buildTimeQueryData["release_time"]["begin_time"] = isset($releaseTime[0]) ? $releaseTime[0] : "";
            $buildTimeQueryData["release_time"]["end_time"] = isset($releaseTime[1]) ? $releaseTime[1] : "";
        }


        $query = FreezeStockModel::select("*")->buildEqualQuery($buildEqualQueryData)
                                                        ->buildTimeQuery($buildTimeQueryData)
                                                        ->buildLikeQuery($buildLikeQueryData);


        //关联表查询                                                
        if ($goods_name || $warehouse_receipt_sn) {
            $query->whereHasIn("consignment_items", function ($q) use ($goods_name, $warehouse_receipt_sn) {
                if ($goods_name) {
                    $q->where("goods_name", "like", trim($goods_name) . '%');
                }
                if ($warehouse_receipt_sn) {
                    //换行转为逗号
                    $warehouse_receipt_sn = str_replace(" ", ",", $warehouse_receipt_sn);
                    $warehouseReceiptSn = explode(",", $warehouse_receipt_sn);
                    $q->whereIn("warehouse_receipt_sn", $warehouseReceiptSn);
                }
            });
        }

        $list = $query->orderBy("id", "desc")->getList($pageInfo["page"], $pageInfo["limit"]);
        $list = $list->toArray();
        $arr = $list["data"] ?? [];
        $total = $list["total"] ?? 0;



        $positionIds = \Arr::pluck($arr,"position_id");
        $positionIds = array_filter_unique($positionIds);
        $positionList = WareHousePositionModel::getAllByIds($positionIds);
        $positionList = arrayChangeKeyByField($positionList,"position_id");

        //查询容器
        $containerIds = \Arr::pluck($arr,"container_id");
        $containerList = ContainerModel::getAllByIds($containerIds);
        $containerList = arrayChangeKeyByField($containerList,"id");



        foreach ($list["data"] as $k => $item) {
            
            $arr[$k]["position_name"] = $positionList[$item["position_id"]]["position_code"] ?? "";
            $arr[$k]["container_name"] =  $containerList[$item["container_id"]]["container_sn"] ?? "";


            $arr[$k]["create_time"] = dateDefault($item["create_time"]);
            $arr[$k]["freeze_time"] = dateDefault($item["freeze_time"]);
            $arr[$k]["release_time"] = dateDefault($item["release_time"]);
            $arr[$k]["status_cn"] = arrayGet(FreezeStockModel::$STATUS_FORMAT, $item["status"]);
        }
        return [$arr, $total];

        
    }

 

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/18753059

posted on 2025-03-05 17:12  孙龙-程序员  阅读(12)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3