ProcessController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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. $docASNs=OracleDOCASNDetail::where("ASNNo",$wms_code)->get(); //入库单
  21. if (count($docASNs)>0){
  22. $owner=Owner::where("code",$docASNs[0]->customerid)->first();
  23. if (!$owner)$owner=$this->storeOwner($docASNs[0]->customerid);
  24. if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
  25. /*$basSKUs=['owner_code'=>[],'sku'=>[]];
  26. $commodities=[];
  27. $i=0;
  28. $docAsnSKUs=array_column($docASNs->toArray(),'sku');
  29. $docAsnOwnerCodes=array_column($docASNs->toArray(),'customerid');
  30. $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docAsnOwnerCodes){
  31. return $query->whereIn('code',$docAsnOwnerCodes);
  32. }])->whereIn('sku',$docAsnSKUs)->get();
  33. $commoditiesData=[];
  34. foreach ($commoditiesTem as $commodityTem){
  35. $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
  36. }
  37. foreach ($docASNs as $docASN){
  38. $commodity=isset($commoditiesData[$docASN->sku."_".$docASN->customerid])?$commoditiesData[$docASN->sku."_".$docASN->customerid]:null;
  39. if (!$commodity){
  40. array_push($basSKUs['owner_code'],$docASN->customerid);
  41. array_push($basSKUs['sku'],$docASN->sku);
  42. $i++;
  43. continue;
  44. }
  45. $commodity->amount=$docASN->expectedqty;
  46. array_push($commodities,$commodity->toArray());
  47. unset($docASNs[$i]);
  48. $i++;
  49. }
  50. unset($docAsnOwnerCodes,$docAsnSKUs,$commoditiesTem,$commoditiesData);
  51. if (count($basSKUs['sku'])>0 && count($basSKUs['owner_code'])>0){
  52. $this->storeCommodity($basSKUs);
  53. $docAsnSKUs=array_column($docASNs->toArray(),'sku');
  54. $docAsnOwnerCodes=array_column($docASNs->toArray(),'customerid');
  55. $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docAsnOwnerCodes){
  56. return $query->whereIn('code',$docAsnOwnerCodes);
  57. }])->whereIn('sku',$docAsnSKUs)->get();
  58. $commoditiesData=[];
  59. foreach ($commoditiesTem as $commodityTem){
  60. $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
  61. }
  62. foreach ($docASNs as $docASN){
  63. $commodity=$commoditiesData[$docASN->sku."_".$docASN->customerid];
  64. if (!$commodity){
  65. continue;
  66. }
  67. $commodity->amount=$docASN->expectedqty;
  68. array_push($commodities,$commodity->toArray());
  69. }
  70. }*/
  71. $commodities=$this->resetData($docASNs,"sku","customerid","expectedqty","asnlineno");
  72. $processContent=[
  73. 'wms_code'=>$wms_code,
  74. 'owner_name'=>$owner->name,
  75. 'owner_id'=>$owner->id,
  76. 'commodities'=>$commodities,
  77. 'bill_type'=>'入库单',
  78. ];
  79. return json_encode($processContent);
  80. }
  81. $docOrders=OracleDOCOrderDetail::where("OrderNo",$wms_code)->get();//出库单
  82. if (count($docOrders)>0){
  83. $owner=Owner::where("code",$docOrders[0]->customerid)->first();
  84. if (!$owner)$owner=$this->storeOwner($docOrders[0]->customerid);
  85. if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
  86. $commodities=$this->resetData($docOrders,"sku","customerid","qtyordered",'orderlineno');
  87. $processContent=[
  88. 'wms_code'=>$wms_code,
  89. 'owner_name'=>$owner->name,
  90. 'owner_id'=>$owner->id,
  91. 'commodities'=>$commodities,
  92. 'bill_type'=>'出库单',
  93. ];
  94. return json_encode($processContent);
  95. }
  96. $docMovementDetails=OracleDOCMovementDetail::where("MDOCNO",$wms_code)->get();//移库单
  97. if (count($docMovementDetails)>0){
  98. $docMovementHeaders=OracleDOCMovementHeader::select('CustomerID')->where('MDOCNO',$wms_code)->get();
  99. if (count($docMovementHeaders)<1)return ['error'=>'找到了移库单,但未查询移库单表头!'];
  100. $owner=Owner::where("code",$docMovementHeaders[0]->customerid)->first();
  101. if (!$owner)$owner=$this->storeOwner($docMovementHeaders[0]->customerid);
  102. if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
  103. $commodities=$this->resetData($docMovementDetails,"sku","customerid","toqty","mdoclineno",$docMovementHeaders);
  104. /*$commodities=[];
  105. foreach ($docMovementDetails as $docMovementDetail){
  106. $commodity=Commodity::where('sku',$docMovementDetail->sku)->first();
  107. if (!$commodity)$commodity = $this->storeCommodity($owner->code,$docMovementDetail->sku);
  108. if (!$commodity)continue;
  109. array_push($commodities,['id'=>$commodity->id,'name'=>$commodity->name,
  110. 'barcodes'=>$commodity->barcodes,'sku'=>$commodity->sku,'amount'=>$docMovementDetail->toqty]);
  111. }*/
  112. $processContent=[
  113. 'wms_code'=>$wms_code,
  114. 'owner_name'=>$owner->name,
  115. 'owner_id'=>$owner->id,
  116. 'commodities'=>$commodities,
  117. 'bill_type'=>'移库单',
  118. ];
  119. return json_encode($processContent);
  120. }
  121. return ['error'=>'未查到对应单据号'];
  122. }
  123. //重组商品数据
  124. private function resetData($doc,$skuColumn,$customeridColumn,$amountColumn,$lineNoColumn,$docHeader=null){
  125. //处理重组数据
  126. $docs=['owner_code'=>[],'sku'=>[]];
  127. $commodities=[];
  128. $i=0;
  129. $docSKUs=array_column($doc->toArray(),'sku');
  130. $docOwnerCodes=array_column($docHeader?$docHeader->toArray():$doc->toArray(),'customerid');
  131. $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docOwnerCodes){
  132. return $query->whereIn('code',$docOwnerCodes);
  133. }])->whereIn('sku',$docSKUs)->get();
  134. $commoditiesData=[];
  135. foreach ($commoditiesTem as $commodityTem){
  136. $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
  137. }
  138. foreach ($doc as $docOne){
  139. $customerid=$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn];
  140. $commodity=isset($commoditiesData[$docOne[$skuColumn]."_".$customerid])
  141. ?$commoditiesData[$docOne[$skuColumn]."_".$customerid]:null;
  142. if (!$commodity){
  143. array_push($docs['owner_code'],$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn]);
  144. array_push($docs['sku'],$docOne[$skuColumn]);
  145. $i++;
  146. continue;
  147. }
  148. $commodity->amount=$docOne[$amountColumn];
  149. $commodity->lineNo=$docOne[$lineNoColumn];
  150. array_push($commodities,$commodity->toArray());
  151. unset($doc[$i]);
  152. $i++;
  153. }
  154. unset($docSKUs,$docOwnerCodes,$commoditiesTem,$commoditiesData,$customerid);
  155. if (count($docs['sku'])>0 && count($docs['owner_code'])>0){
  156. $this->storeCommodity($docs);
  157. $docSKUs=array_column($doc->toArray(),'sku');
  158. $docOwnerCodes=array_column($docHeader?$docHeader->toArray():$doc->toArray(),'customerid');
  159. $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docOwnerCodes){
  160. return $query->whereIn('code',$docOwnerCodes);
  161. }])->whereIn('sku',$docSKUs)->get();
  162. $commoditiesData=[];
  163. foreach ($commoditiesTem as $commodityTem){
  164. $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
  165. }
  166. foreach ($doc as $docOne){
  167. $customerid=$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn];
  168. $commodity=isset($commoditiesData[$docOne[$skuColumn]."_".$customerid])
  169. ?$commoditiesData[$docOne[$skuColumn]."_".$customerid]:null;
  170. if (!$commodity)continue;
  171. $commodity->amount=$docOne[$amountColumn];
  172. $commodity->lineNo=$docOne[$lineNoColumn];
  173. array_push($commodities,$commodity->toArray());
  174. }
  175. }
  176. return $commodities;
  177. }
  178. private function storeCommodity($basSKUs){
  179. $oracleBasSkus=OracleBasSKU::whereIn("CustomerID",$basSKUs['owner_code'])->whereIn("SKU",$basSKUs['sku'])->get();
  180. if (count($oracleBasSkus)<1)return;
  181. $commoditiesData=[];
  182. $commoditiesTem=["sku"=>[],"owner_id"=>[]];
  183. $commodityBarCodeData=[];
  184. $commodityBarCodeTem=[];
  185. $owners_code=array_column($oracleBasSkus->toArray(),'customerid');
  186. $ownersTem=Owner::whereIn('code',$owners_code)->get();
  187. $owners=array_column($ownersTem->toArray(),'id','code');
  188. for($i=0;$i<count($oracleBasSkus);$i++){
  189. if (!$owners[$oracleBasSkus[$i]->customerid])$owners[$oracleBasSkus[$i]->customerid]=$this->storeOwner($oracleBasSkus[$i]->customerid);
  190. array_push($commoditiesData,["owner_id"=>$owners[$oracleBasSkus[$i]->customerid],"name"=>$oracleBasSkus[$i]->descr_c,"sku"=>$oracleBasSkus[$i]->sku,"created_at"=>Carbon::now()]);
  191. array_push($commoditiesTem['sku'],$oracleBasSkus[$i]->sku);
  192. array_push($commoditiesTem['owner_id'],$owners[$oracleBasSkus[$i]->customerid]);
  193. $commodityBarCodeData[$oracleBasSkus[$i]->sku."_".$owners[$oracleBasSkus[$i]->customerid]]=["code"=>$oracleBasSkus[$i]->alternate_sku1,"commodity_id"=>'','created_at'=>Carbon::now()];
  194. }
  195. DB::table('commodities')->insert($commoditiesData);
  196. $this->log(__METHOD__, 'FLUX二次加工单接口录入商品__' . __FUNCTION__, json_encode($commoditiesData), Auth::user()['id']);
  197. $commodities=Commodity::whereIn('sku',$commoditiesTem['sku'])->whereIn('owner_id',$commoditiesTem['owner_id'])->get();
  198. foreach ($commodities as $commodity){
  199. $commodityBarCodeData[$commodity->sku."_".$commodity->owner_id]['commodity_id']=$commodity->id;
  200. }
  201. foreach ($commodityBarCodeData as $key=>$value){
  202. array_push($commodityBarCodeTem,$value);
  203. }
  204. DB::table('commodity_barcodes')->insert($commodityBarCodeTem);
  205. $this->log(__METHOD__, 'FLUX二次加工单接口录入商品条码__' . __FUNCTION__, json_encode($commodityBarCodeTem), Auth::user()['id']);
  206. }
  207. private function storeOwner($code){
  208. $owner=new Owner([
  209. "name"=>$code,
  210. "code"=>$code
  211. ]);
  212. $owner->save();
  213. $this->log(__METHOD__, 'FLUX二次加工单接口录入货主__' . __FUNCTION__, json_encode($owner), Auth::user()['id']);
  214. return $owner;
  215. }
  216. }