1,新增
use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Validator; use App\Http\Utils\ValidatorMsg; use App\Exceptions\InvalidRequestException;
數(shù)據(jù)校驗(yàn)
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' => '聯(lián)系人繁體', ]); 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' => '物流類型', ] ); //驗(yàn)證鉤子 $validator->after(function ($validator) use ($requestParams) { // if (!in_array($requestParams["type"], [1, 2])) { // $validator->errors()->add('type', '庫(kù)存類型參數(shù):調(diào)撥/移位錯(cuò)誤'); // } }); if ($validator->fails()) { $errors = $validator->errors()->all(); throw new InvalidRequestException($errors[0] ?? "未知錯(cuò)誤,請(qǐng)聯(lián)系技術(shù)"); } 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("沒有查詢到改簽約公司相關(guān)信息"); } $shippingInfo = ShippingModel::where("shipping_id",$shippingId)->with(["shipping_mode","shipping_month_balance"])->first(); if (empty($shippingInfo)) { throw new InvalidRequestException("沒有查詢到快遞物流相關(guān)信息"); } 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("沒找到物流/月結(jié)賬號(hào)相關(guān)信息"); // } $shippingWarehouseModel = new ShippingWarehouseModel(); $isExists = $shippingWarehouseModel->checkShippingWarehouseIsExists([ "company_id"=>$companyId, "warehouse_id"=>$warehouseId, "sign_com_id"=>$signComId, "shipping_id"=>$shippingId, ]); if($isExists){ throw new InvalidRequestException("該倉(cāng)庫(kù)快遞物流配置已存在"); } 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())); } }
服務(wù)層service
/判斷是否存在相同數(shù)據(jù) 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(); } //判斷是否存在相同數(shù)據(jù) 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('客戶協(xié)議已存在審核中的數(shù)據(jù),請(qǐng)等待結(jié)果后操作'); } } 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']; //設(shè)置字段黑名單 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 => "停用", ]; /* * 自動(dòng)維護(hù)更新時(shí)間 */ 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"); } //關(guān)聯(lián)關(guān)系,關(guān)聯(lián)到采購(gòu)主表 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(); } //獲取單挑數(shù)據(jù) public static function getOneById($id) { $res = self::where('inspection_order_id', $id)->first(); return $res ? $res->toArray() : []; } //獲取多條數(shù)據(jù) 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) { //排除作廢的明細(xì)item_status=3 $query->where("purchase_id", intval($purchaseId))->where("item_status", "!=", StockInItemModel::ITEM_STATUS_DISABLE); })->get()->toArray(); } //修改數(shù)據(jù) 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); //關(guān)聯(lián)表查詢 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) { //換行轉(zhuǎn)為逗號(hào) $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"); //查詢?nèi)萜?/span> $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]; }
本文來自博客園,作者:孫龍-程序員,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/sunlong88/p/18753059
浙公網(wǎng)安備 33010602011771號(hào)