ProcessController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. namespace App\Http\Controllers\Api\thirdPart\flux;
  3. use App\Commodity;
  4. use App\OracleBasSKU;
  5. use App\OracleDOCASNDetail;
  6. use App\OracleDOCMovementDetail;
  7. use App\OracleDOCMovementHeader;
  8. use App\OracleDOCOrderDetail;
  9. use App\Http\Controllers\Controller;
  10. use App\Owner;
  11. use Carbon\Carbon;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\DB;
  15. class ProcessController extends Controller
  16. {
  17. public function getProcessContent(Request $request){
  18. $wms_code=$request->input('wms_code');
  19. if (!$wms_code)return ['error'=>'提交的单据号为空'];
  20. try{
  21. $docASNs=OracleDOCASNDetail::query()->where("ASNNo",$wms_code)->get(); //入库单
  22. }
  23. catch (\Exception $e){
  24. return ['error'=>'数据库连接失败!'];
  25. }
  26. if (count($docASNs)>0){
  27. $owner=Owner::query()->where("code",$docASNs[0]->customerid)->first();
  28. if (!$owner)$owner=$this->storeOwner($docASNs[0]->customerid);
  29. if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
  30. $commodities=$this->resetData($docASNs,"sku","customerid","expectedqty","asnlineno");
  31. $processContent=[
  32. 'wms_code'=>$wms_code,
  33. 'owner_name'=>$owner->name,
  34. 'owner_id'=>$owner->id,
  35. 'commodities'=>$commodities,
  36. 'bill_type'=>'入库单',
  37. ];
  38. return json_encode($processContent);
  39. }
  40. $docOrders=OracleDOCOrderDetail::where("OrderNo",$wms_code)->get();//出库单
  41. if (count($docOrders)>0){
  42. $owners=Owner::withTrashed()->where("code",$docOrders[0]->customerid)->get();
  43. if ($owners->isEmpty()){
  44. $owner=$this->storeOwner($docOrders[0]->customerid);
  45. }else{
  46. $owner=$owners->first();
  47. }
  48. if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
  49. $commodities=$this->resetData($docOrders,"sku","customerid","qtyordered",'orderlineno');
  50. $processContent=[
  51. 'wms_code'=>$wms_code,
  52. 'owner_name'=>$owner->name,
  53. 'owner_id'=>$owner->id,
  54. 'commodities'=>$commodities,
  55. 'bill_type'=>'出库单',
  56. ];
  57. return json_encode($processContent);
  58. }
  59. $docMovementDetails=OracleDOCMovementDetail::where("MDOCNO",$wms_code)->get();//移库单
  60. if (count($docMovementDetails)>0){
  61. $docMovementHeaders=OracleDOCMovementHeader::select('CustomerID')->where('MDOCNO',$wms_code)->get();
  62. if (count($docMovementHeaders)<1)return ['error'=>'找到了移库单,但未查询移库单表头!'];
  63. $owner=Owner::where("code",$docMovementHeaders[0]->customerid)->first();
  64. if (!$owner)$owner=$this->storeOwner($docMovementHeaders[0]->customerid);
  65. if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
  66. $commodities=$this->resetData($docMovementDetails,"sku","customerid","toqty","mdoclineno",$docMovementHeaders);
  67. $processContent=[
  68. 'wms_code'=>$wms_code,
  69. 'owner_name'=>$owner->name,
  70. 'owner_id'=>$owner->id,
  71. 'commodities'=>$commodities,
  72. 'bill_type'=>'移库单',
  73. ];
  74. return json_encode($processContent);
  75. }
  76. return ['error'=>'未查到对应单据号'];
  77. }
  78. //重组商品数据
  79. private function resetData($doc,$skuColumn,$customeridColumn,$amountColumn,$lineNoColumn,$docHeader=null){
  80. //处理重组数据
  81. $docs=['owner_code'=>[],'sku'=>[]];
  82. $commodities=[];
  83. $commodity_ids=[];
  84. $i=0;
  85. $docSKUs=array_column($doc->toArray(),'sku');
  86. $docOwnerCodes=array_column($docHeader?$docHeader->toArray():$doc->toArray(),'customerid');
  87. $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docOwnerCodes){
  88. return $query->whereIn('code',$docOwnerCodes);
  89. }])->whereIn('sku',$docSKUs)->get();
  90. $commoditiesData=[];
  91. foreach ($commoditiesTem as $commodityTem){
  92. $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
  93. }
  94. foreach ($doc as $docOne){
  95. $customerid=$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn];
  96. $commodity=isset($commoditiesData[$docOne[$skuColumn]."_".$customerid])
  97. ?$commoditiesData[$docOne[$skuColumn]."_".$customerid]:null;
  98. if (!$commodity){
  99. array_push($docs['owner_code'],$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn]);
  100. array_push($docs['sku'],$docOne[$skuColumn]);
  101. $i++;
  102. continue;
  103. }
  104. $commodity->amount=$docOne[$amountColumn];
  105. $commodity->lineNo=$docOne[$lineNoColumn];
  106. if (isset($commodity_ids[$commodity->id]))
  107. $commodities[$commodity_ids[$commodity->id]]['amount'] += $commodity->amount;
  108. else{
  109. array_push($commodities,$commodity->toArray());
  110. $commodity_ids[$commodity->id] = count($commodities)-1;
  111. }
  112. unset($doc[$i]);
  113. $i++;
  114. }
  115. unset($docSKUs,$docOwnerCodes,$commoditiesTem,$commoditiesData,$customerid);
  116. if (count($docs['sku'])>0 && count($docs['owner_code'])>0){
  117. $this->storeCommodity($docs);
  118. $docSKUs=array_column($doc->toArray(),'sku');
  119. $docOwnerCodes=array_column($docHeader?$docHeader->toArray():$doc->toArray(),'customerid');
  120. $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docOwnerCodes){
  121. return $query->whereIn('code',$docOwnerCodes);
  122. }])->whereIn('sku',$docSKUs)->get();
  123. $commoditiesData=[];
  124. foreach ($commoditiesTem as $commodityTem){
  125. $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
  126. }
  127. foreach ($doc as $docOne){
  128. $customerid=$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn];
  129. $commodity=isset($commoditiesData[$docOne[$skuColumn]."_".$customerid])
  130. ?$commoditiesData[$docOne[$skuColumn]."_".$customerid]:null;
  131. if (!$commodity)continue;
  132. $commodity->amount=$docOne[$amountColumn];
  133. $commodity->lineNo=$docOne[$lineNoColumn];
  134. if (isset($commodity_ids[$commodity->id]))
  135. $commodities[$commodity_ids[$commodity->id]]['amount'] += $commodity->amount;
  136. else{
  137. array_push($commodities,$commodity->toArray());
  138. $commodity_ids[$commodity->id] = count($commodities)-1;
  139. }
  140. }
  141. }
  142. return $commodities;
  143. }
  144. private function storeCommodity($basSKUs){
  145. $oracleBasSkus=OracleBasSKU::whereIn("CustomerID",$basSKUs['owner_code'])->whereIn("SKU",$basSKUs['sku'])->get();
  146. if (count($oracleBasSkus)<1)return;
  147. $commoditiesData=[];
  148. $commoditiesTem=["sku"=>[],"owner_id"=>[]];
  149. $commodityBarCodeData=[];
  150. $commodityBarCodeTem=[];
  151. $owners_code=array_column($oracleBasSkus->toArray(),'customerid');
  152. $ownersTem=Owner::withTrashed()->whereIn('code',$owners_code)->get();
  153. $owners=array_column($ownersTem->toArray(),'id','code');
  154. for($i=0;$i<count($oracleBasSkus);$i++){
  155. if (!$owners[$oracleBasSkus[$i]->customerid])$owners[$oracleBasSkus[$i]->customerid]=$this->storeOwner($oracleBasSkus[$i]->customerid);
  156. array_push($commoditiesData,["owner_id"=>$owners[$oracleBasSkus[$i]->customerid],"name"=>$oracleBasSkus[$i]->descr_c,"sku"=>$oracleBasSkus[$i]->sku,"created_at"=>Carbon::now()]);
  157. array_push($commoditiesTem['sku'],$oracleBasSkus[$i]->sku);
  158. array_push($commoditiesTem['owner_id'],$owners[$oracleBasSkus[$i]->customerid]);
  159. $commodityBarCodeData[$oracleBasSkus[$i]->sku."_".$owners[$oracleBasSkus[$i]->customerid]]=["code"=>$oracleBasSkus[$i]->alternate_sku1,"commodity_id"=>'','created_at'=>Carbon::now()];
  160. }
  161. DB::table('commodities')->insert($commoditiesData);
  162. $this->log(__METHOD__, 'FLUX二次加工单接口录入商品__' . __FUNCTION__, json_encode($commoditiesData), Auth::user()['id']);
  163. $commodities=Commodity::whereIn('sku',$commoditiesTem['sku'])->whereIn('owner_id',$commoditiesTem['owner_id'])->get();
  164. foreach ($commodities as $commodity){
  165. $commodityBarCodeData[$commodity->sku."_".$commodity->owner_id]['commodity_id']=$commodity->id;
  166. }
  167. foreach ($commodityBarCodeData as $key=>$value){
  168. array_push($commodityBarCodeTem,$value);
  169. }
  170. DB::table('commodity_barcodes')->insert($commodityBarCodeTem);
  171. $this->log(__METHOD__, 'FLUX二次加工单接口录入商品条码__' . __FUNCTION__, json_encode($commodityBarCodeTem), Auth::user()['id']);
  172. }
  173. private function storeOwner($code){
  174. $owner=new Owner([
  175. "name"=>$code,
  176. "code"=>$code
  177. ]);
  178. $owner->save();
  179. $this->log(__METHOD__, 'FLUX二次加工单接口录入货主__' . __FUNCTION__, json_encode($owner), Auth::user()['id']);
  180. return $owner;
  181. }
  182. }