|
|
@@ -1,163 +1,129 @@
|
|
|
<?php
|
|
|
|
|
|
-namespace App\Http\Controllers;
|
|
|
+namespace App\Http\Controllers\Api\thirdPart\flux;
|
|
|
|
|
|
-use App\Depository;
|
|
|
-use App\Owner;
|
|
|
-use App\Services\LogService;
|
|
|
+use App\Http\Controllers\Controller;
|
|
|
use App\Store;
|
|
|
-use App\StoreItems;
|
|
|
-use App\Warehouse;
|
|
|
use App\WMSReflectReceive;
|
|
|
-use Carbon\Carbon;
|
|
|
-use Illuminate\Contracts\Foundation\Application;
|
|
|
-use Illuminate\Contracts\View\Factory;
|
|
|
-use Illuminate\Http\RedirectResponse;
|
|
|
-use Illuminate\Http\Request;
|
|
|
-use Illuminate\Http\Response;
|
|
|
-use Illuminate\Routing\Redirector;
|
|
|
-use Illuminate\Support\Facades\DB;
|
|
|
-use Illuminate\Support\Facades\Gate;
|
|
|
-use Illuminate\Support\Facades\Validator;
|
|
|
-use Illuminate\View\View;
|
|
|
-use App\Http\Controllers\Api\thirdPart\flux\StoreController as FStoreController;
|
|
|
+use App\WMSReflectReceiveSku;
|
|
|
+use Zttp\Zttp;
|
|
|
|
|
|
class StoreController extends Controller
|
|
|
{
|
|
|
- /**
|
|
|
- * Display a listing of the resource.
|
|
|
- *
|
|
|
- * @return Application|Factory|Response|View
|
|
|
- */
|
|
|
- public function index()
|
|
|
- {
|
|
|
- if(!Gate::allows('入库管理-快速入库-查询')){ return redirect(url('/')); }
|
|
|
- $stores=Store::orderBy('id','DESC')->paginate(50);
|
|
|
- return view('store.fast.index',['stores'=>$stores]);
|
|
|
- }
|
|
|
|
|
|
- /**
|
|
|
- * Show the form for creating a new resource.
|
|
|
- *
|
|
|
- * @return Application|Factory|Response|View
|
|
|
- */
|
|
|
- public function create()
|
|
|
- {
|
|
|
- if(!Gate::allows('入库管理-快速入库-录入')){ return redirect(url('/')); }
|
|
|
- return view('store.fast.create');
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
- * Store a newly created resource in storage.
|
|
|
- *
|
|
|
- * @param Request $request
|
|
|
- * @return RedirectResponse|Response|Redirector
|
|
|
+ * 入库回传给WMS
|
|
|
+ * @param Store $store
|
|
|
+ * @return bool
|
|
|
*/
|
|
|
- public function store(Request $request)
|
|
|
+ public function accomplishToWMS(Store $store, array $inputs)
|
|
|
{
|
|
|
- if(!Gate::allows('入库管理-快速入库-录入')){ return redirect(url('/')); }
|
|
|
- $this->validator($request);
|
|
|
- if ($request->test)$result = $this->quickStorage($request->input('asn_code'),$request->input('quality') == '正品' ? 'ZP' : 'CC',$request->input('depository_code'));
|
|
|
- else $result = $this->quickStorage_temp($request->input('asn_code'),$request->input('quality'),$request->input('depository_code'));
|
|
|
- $response = redirect('store/fast/create');
|
|
|
- if ($result['success'])return redirect('store/fast/create')->with('successTip',$result['data']);
|
|
|
- return $response->with('successError',$result['data']);
|
|
|
- }
|
|
|
-
|
|
|
- public function quickStorage_temp($asn,$quality,$depository_code){
|
|
|
- $WMSReflectReceive=WMSReflectReceive::with('skus')->where('ASNNO',$asn)->first();
|
|
|
- if (!$WMSReflectReceive)return ['success'=>false, 'data'=>"ASN编号不存在!"];
|
|
|
- $warehouse=Warehouse::query()->where('code',$WMSReflectReceive->WAREHOUSEID)->first();
|
|
|
- if (!$warehouse&&$WMSReflectReceive->WAREHOUSEID){
|
|
|
- $warehouse=new Warehouse([
|
|
|
- 'name'=>$WMSReflectReceive->WAREHOUSEID,
|
|
|
- 'code'=>$WMSReflectReceive->WAREHOUSEID
|
|
|
- ]);
|
|
|
- $warehouse->save();
|
|
|
+ $METHOD = __METHOD__;
|
|
|
+ $FUNCTION = __FUNCTION__;
|
|
|
+ Controller::logS(__METHOD__, __FUNCTION__, '快递入库进入WMS接口:' . $store['asn_code']);
|
|
|
+ $wmsReceiveds = WMSReflectReceive::query()->where('ASNNO', $store['asn_code'])->get();
|
|
|
+ if ($wmsReceiveds->isEmpty()) {
|
|
|
+ (new Controller())->log(__METHOD__, 'error_' . __FUNCTION__, '没有本地WMS入库单');
|
|
|
+ return false;
|
|
|
}
|
|
|
- $owner=Owner::query()->where('code',$WMSReflectReceive->CUSTOMERID)->first();
|
|
|
- if (!$owner&&$WMSReflectReceive->CUSTOMERID){
|
|
|
- $owner=new Owner([
|
|
|
- 'name'=>$WMSReflectReceive->CUSTOMERID,
|
|
|
- 'code'=>$WMSReflectReceive->CUSTOMERID
|
|
|
- ]);
|
|
|
- $owner->save();
|
|
|
- }
|
|
|
- $store=Store::query()->where('asn_code',$WMSReflectReceive->ASNNO)->first();
|
|
|
- if(!$store){
|
|
|
- $store=new Store([
|
|
|
- 'asn_code'=>$WMSReflectReceive->ASNNO,
|
|
|
- 'warehouse_id'=>$warehouse->id,
|
|
|
- 'owner_id'=>$owner->id,
|
|
|
- 'stored_method'=>'快速入库',
|
|
|
- 'status'=>'未入库',
|
|
|
- 'remark'=>$WMSReflectReceive->NOTES,
|
|
|
- ]);
|
|
|
- $store->save();
|
|
|
+ $success = true;
|
|
|
+ $wmsReceiveds->each(function ($wmsReceived) use (&$store, &$amountsItem, &$success, &$inputs, $METHOD, $FUNCTION) {
|
|
|
|
|
|
- $customDepository=(function()use($depository_code){
|
|
|
- $customDepository=Depository::query()->where('code',$depository_code)->first();
|
|
|
- if($depository_code){
|
|
|
- if (!$customDepository){
|
|
|
- $depository=new Depository([
|
|
|
- 'name'=>$depository_code,
|
|
|
- 'code'=>$depository_code
|
|
|
- ]);
|
|
|
- $depository->save();
|
|
|
- }
|
|
|
- }
|
|
|
- return $customDepository;
|
|
|
+ $wmsSkus = $wmsReceived->skus()->get();
|
|
|
+ $orderNumberCode = $wmsReceived['ASNREFERENCE1'] ?? $store['order_number'];
|
|
|
+ $amountsSku = (function () use ($wmsSkus) {
|
|
|
+ $result = [];
|
|
|
+ $wmsSkus->each(function ($sku) use (&$result) {
|
|
|
+ $result[$sku['id']] = $sku['EXPECTEDQTY_EACH'];
|
|
|
+ });
|
|
|
+ return $result;
|
|
|
})();
|
|
|
-
|
|
|
- if ($WMSReflectReceive->skus){
|
|
|
- foreach ($WMSReflectReceive->skus as $sku){
|
|
|
- $depository=(function()use($sku,$customDepository){
|
|
|
- if($customDepository)return $customDepository;
|
|
|
- $depository=Depository::query()->where('code',$sku->LOTATT05)->first();
|
|
|
- if (!$depository){
|
|
|
- if (!$sku->LOTATT05)return $depository;
|
|
|
- $depository=new Depository([
|
|
|
- 'name'=>$sku->LOTATT05,
|
|
|
- 'code'=>$sku->LOTATT05
|
|
|
- ]);
|
|
|
- $depository->save();
|
|
|
+ $skuStrList = [];
|
|
|
+ $customerCode = $store->owner()->first()['code'];
|
|
|
+ $wmsSkus->each(function (WMSReflectReceiveSku $sku) use (&$skuList, &$amountsItem, &$amountsSku, &$skuStrList, $wmsReceived, $customerCode, &$inputs) {
|
|
|
+ $STATUS = 'ZP';
|
|
|
+ if (isset($inputs['quality']) && $inputs['quality']
|
|
|
+ && $inputs['quality'] != '正品') {
|
|
|
+ $STATUS = 'CC';
|
|
|
+ }
|
|
|
+ $repositoryCode = $sku['LOTATT05'];
|
|
|
+ if (isset($inputs['depository_code']) && $inputs['depository_code']) {
|
|
|
+ $repositoryCode = $inputs['depository_code'];
|
|
|
+ }
|
|
|
+ $skuStr = "
|
|
|
+ {
|
|
|
+ \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
|
|
|
+ \"ASNLINENO\": \"{$sku['ASNLINENO']}\",
|
|
|
+ \"SKUCODE\": \"{$sku['SKU']}\",
|
|
|
+ \"QUANTITY\": \"{$sku['EXPECTEDQTY_EACH']}\",
|
|
|
+ \"LOTATT04\": \"{$sku['LOTATT04']}\",
|
|
|
+ \"LOTATT05\": \"{$repositoryCode}\",
|
|
|
+ \"STATUS\": \"{$STATUS}\",
|
|
|
+ \"USERDEFINE1\": \"{$inputs['follow_code']}\",
|
|
|
+ \"USERDEFINE2\": \"\",
|
|
|
+ \"USERDEFINE3\": \"\",
|
|
|
+ \"UNIQUE_CODE_LIST\": [" .
|
|
|
+ "]
|
|
|
}
|
|
|
- return $depository;
|
|
|
- })();
|
|
|
- $storeItem=new StoreItems([
|
|
|
- 'store_id'=>$store->id,
|
|
|
- 'asn_line_code'=>$sku->ASNLINENO,
|
|
|
- 'name'=>$sku->SKUDESCRC,
|
|
|
- 'sku'=>$sku->SKU,
|
|
|
- 'barcode'=>$sku->ALTERNATE_SKU1,
|
|
|
- 'quality'=>$quality,
|
|
|
- 'status'=>'未入库',
|
|
|
- ]);
|
|
|
- if ($depository)$storeItem->depository_id=$depository->id;
|
|
|
- $storeItem->save();
|
|
|
+ ";
|
|
|
+ $skuStrList[] = $skuStr;
|
|
|
+ });
|
|
|
+ $skuStrList = implode(',', $skuStrList);
|
|
|
+ $json = "
|
|
|
+ {
|
|
|
+ \"request\": [
|
|
|
+ {
|
|
|
+ \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
|
|
|
+ \"CUSTOMERID\": \"{$wmsReceived['CUSTOMERID']}\",
|
|
|
+ \"ASNTYPE\": \"{$wmsReceived['ASNTYPE']}\",
|
|
|
+ \"ASNREFERENCE1\": \"{$wmsReceived['ASNREFERENCE1']}\",
|
|
|
+ \"ADDWHO\": \"WCS\",
|
|
|
+ \"USERDEFINE1\": \"\",
|
|
|
+ \"USERDEFINE2\": \"\",
|
|
|
+ \"USERDEFINE3\": \"\",
|
|
|
+ \"SKU_LIST\": [{$skuStrList}]
|
|
|
+ }
|
|
|
+ ]
|
|
|
}
|
|
|
+ ";
|
|
|
+
|
|
|
+ $sendingJson = json_decode($json, true);
|
|
|
+ $url = url(config('api.flux.receive.new'));
|
|
|
+// (new Controller())->log($METHOD,$FUNCTION,$store['asn_code'].'||' .json_encode($sendingJson));
|
|
|
+ Controller::logS(__METHOD__, __FUNCTION__, '快递入库请求WMS接口开始:' . $store['asn_code']);
|
|
|
+ $response = Zttp::post($url, $sendingJson);
|
|
|
+ Controller::logS(__METHOD__, __FUNCTION__, '快递入库请求WMS接口结束:' . $store['asn_code'] . '||' . $response->body());
|
|
|
+ $noIssues = true;
|
|
|
+ $json = $response->json();
|
|
|
+ if (!$json || !isset($json['Response']) || !$json['Response']['return']['returnFlag'] == '1') {
|
|
|
+ $noIssues = false;
|
|
|
}
|
|
|
- }
|
|
|
- /** @var Store $store */
|
|
|
- $store=Store::with('storeItems')->where('asn_code',$asn)->first();
|
|
|
- $storeApi=new FStoreController();
|
|
|
- $result=$storeApi->accomplishToWMS($store,[
|
|
|
- 'quality'=>$quality,
|
|
|
- 'depository_code'=>$depository_code,
|
|
|
- 'follow_code'=>$store['id'],
|
|
|
- ]);
|
|
|
- if ($result){
|
|
|
- $store->status='已入库';
|
|
|
- $store->save();
|
|
|
- if ($store->storeItems){
|
|
|
- $store->storeItems->each(function ($storeItem)use($quality){
|
|
|
- $storeItem->status='已入库';
|
|
|
- $storeItem->quality=$quality;
|
|
|
- $storeItem->save();
|
|
|
- });
|
|
|
+ if ($json && isset($json['Response'])) {
|
|
|
+ if ($json['Response']['return']['returnFlag'] == '2') {
|
|
|
+ (new Controller())->log($METHOD, 'error_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+// if(isset($json['Response']['return']['returnDesc'])&&strpos($json['Response']['return']['returnDesc'],'唯一约束')!==false){
|
|
|
+// (new Controller())->log($METHOD,'error_'.$FUNCTION,$response->body());
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+ if (isset($json['Response']['return']['errordescr']) && strpos($json['Response']['return']['errordescr'], '已完成') !== false) {
|
|
|
+ (new Controller())->log($METHOD, 'error_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
- return ['success'=>true, 'data'=>"成功!"];
|
|
|
- }
|
|
|
- return ['success'=>false, 'data'=>"失败!请检查错误日志"];
|
|
|
+ if ($noIssues && $json['Response']['return']['returnFlag'] == '1') {
|
|
|
+ $wmsReceived['is_uploaded'] = 1;
|
|
|
+ $wmsReceived->save();
|
|
|
+ (new Controller())->log($METHOD, 'success_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ $success = false;
|
|
|
+ (new Controller())->log($METHOD, 'error_' . $FUNCTION, $store['asn_code'] . '||' . $response->body());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return $success;
|
|
|
}
|
|
|
}
|