PackageController.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace App\Http\Controllers\Api\thirdPart\weight;
  3. use App\Events\WeighedEvent;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Controllers\LogisticNumberFeatureController;
  6. use App\Jobs\MeasuringMachineQueue;
  7. use App\Jobs\MarkPackageExcepted;
  8. use App\MeasuringMachine;
  9. use App\Package;
  10. use App\Waybill;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Carbon;
  13. use Illuminate\Support\Facades\Validator;
  14. class PackageController extends Controller
  15. {
  16. public function new_(Request $requestInitial){
  17. $request=[];
  18. foreach ($requestInitial->all() as $k=>$v){
  19. $request[strtolower($k)]=$v;
  20. }
  21. $reqDate=isset($request['time'])?$request['time']:Carbon::now();
  22. $errors=$this->validatorWeight($request)->errors();
  23. if (count($errors)>0){
  24. $this->log(__METHOD__,'error'.__FUNCTION__,json_encode($request).'||'.json_encode($errors),null);
  25. $response=["msg"=>$errors,"code"=>500,"data"=>null];
  26. return json_encode($response);
  27. }
  28. $measuringMachine=MeasuringMachine::where('code',$request['id'])->first();
  29. if (!$measuringMachine){
  30. $measuringMachine=new MeasuringMachine([
  31. 'name'=>$request['id'],
  32. 'code'=>$request['id'],
  33. 'status'=>'在线'
  34. ]);
  35. $measuringMachine->save();
  36. $this->log(__METHOD__,'weightApi(new measuring machine)'.__FUNCTION__,json_encode($request),null);
  37. }else{
  38. $measuringMachineStatus=new MeasuringMachine();
  39. $measuringMachineStatus->changeStatus($measuringMachine);
  40. }
  41. MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
  42. $package=Package::where('logistic_number',$request['barcode'])->first();
  43. if (isset($request['length'])&&isset($request['width'])&&isset($request['height'])){
  44. $length=$request['length'];
  45. $width=$request['width'];
  46. $height=$request['height'];
  47. $max=($length>=($width>=$height?$width:$height)?$length:($width>=$height?$width:$height));
  48. if ($max==$length){
  49. $centre=$width>=$height?$width:$height;
  50. $min=$width<$height?$width:$height;
  51. }elseif ($max==$width){
  52. $centre=$length>=$height?$length:$height;
  53. $min=$length<$height?$length:$height;
  54. }else{
  55. $centre=$width>=$length?$width:$length;
  56. $min=$width<$length?$width:$length;
  57. }
  58. }else{
  59. $max=0;$centre=0;$min=0;
  60. }
  61. $apiController=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
  62. if ($package){
  63. $packageController=new \App\Http\Controllers\PackageController();
  64. $package->fetchPaperBox($max,$centre,$min,$package->owner_id);
  65. //处理活动波次
  66. if ($package->batch_rule&&strstr($package->batch_rule,'组合')){
  67. $packageController->syncBatch($package->batch_number,$request['weight'],$max,$centre,$min,$reqDate,$package['paper_box_id']);
  68. }else{
  69. $package->measuring_machine_id=$measuringMachine->id;
  70. $package->weight=$request['weight'];
  71. $package->length=$max;
  72. $package->width=$centre;
  73. $package->height=$min;
  74. $package->bulk=$max*$centre*$min;
  75. $package->weighed_at=$reqDate;
  76. $package->status="未上传";
  77. $this->log(__METHOD__,'Batch_'.__FUNCTION__,json_encode($package),null);
  78. $package->save();
  79. $result=$apiController->accomplishToWMS($package);
  80. if ($result['result']){
  81. if ($package->status=="记录异常")$package->status="已上传异常";
  82. else $package->status="已上传";
  83. }else{
  84. $package->status="上传异常";
  85. }
  86. $package->save();
  87. }
  88. if ($package->order_code){
  89. $waybill=Waybill::where('wms_bill_number',$package->order_code)->where('status','!=','已完结')
  90. ->where('status','!=','无模型')->first();
  91. if ($waybill){
  92. $waybill->warehouse_weight_other=$package->weight;
  93. $waybill->warehouse_weight_unit_id_other=1;
  94. $waybill->update();
  95. }
  96. }
  97. event(new WeighedEvent($package));
  98. $response=["msg"=>"保存成功",
  99. "code"=>200,
  100. "data"=>true,
  101. "serverMsg"=>null,
  102. "requestor"=>[
  103. "requestor"=>"1",
  104. "eventCode"=>"0",
  105. "reqDate"=>$reqDate,
  106. "resDate"=>Carbon::now()]
  107. ];
  108. $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'|'.json_encode($response),null);
  109. return json_encode($response,JSON_UNESCAPED_UNICODE);
  110. }
  111. if (!$package){
  112. $logisticNumber=$request['barcode'];
  113. $createPackage=new Package([
  114. 'logistic_number'=>$logisticNumber,
  115. 'delivery_number'=>$logisticNumber,
  116. 'measuring_machine_id'=>$measuringMachine->id,
  117. 'weight'=>$request['weight'],
  118. 'length'=>$max,
  119. 'width'=>$centre,
  120. 'height'=>$min,
  121. 'bulk'=>$max*$centre*$min,
  122. 'weighed_at'=>$reqDate,
  123. 'status'=>"未下发",
  124. ]);
  125. $createPackage->fetchAllFromOracle();
  126. $createPackage->fetchPaperBox($max, $centre, $min);
  127. $result=$apiController->accomplishToWMS($createPackage);
  128. if(!$result['result']){
  129. $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($createPackage),null);
  130. $response=["msg"=>"写入WMS失败!","code"=>500,"data"=>null];
  131. return json_encode($response,JSON_UNESCAPED_UNICODE);
  132. }
  133. if ($createPackage->save()){
  134. $measuringMachine->touch();
  135. MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
  136. MarkPackageExcepted::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
  137. event(new WeighedEvent($createPackage));
  138. $response=["msg"=>"保存成功",
  139. "code"=>200,
  140. "data"=>true,
  141. "serverMsg"=>null,
  142. "requestor"=>[
  143. "requestor"=>"1",
  144. "eventCode"=>"0",
  145. "reqDate"=>$reqDate,
  146. "resDate"=>Carbon::now()]
  147. ];
  148. $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
  149. return json_encode($response,JSON_UNESCAPED_UNICODE);
  150. }
  151. $response=["msg"=>"保存时发生错误(未下发)!","code"=>500,"data"=>null];
  152. $this->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
  153. return json_encode($response,JSON_UNESCAPED_UNICODE);
  154. }
  155. }
  156. public function validatorWeight(array $request){
  157. $validator=Validator::make($request,[
  158. 'id'=>['required','max:30',/*function ($attribute, $value, $fail) {
  159. $measuringMachine=MeasuringMachine::where('code',$value)->first();
  160. if (!$measuringMachine) {
  161. $fail($attribute.' 设备未录入在系统中!');
  162. }}*/],
  163. 'barcode'=>['required','max:191'],
  164. 'weight'=>['required','numeric','min:0'],
  165. 'length'=>['nullable','numeric','min:0'],
  166. 'width'=>['nullable','numeric','min:0'],
  167. 'height'=>['nullable','numeric','min:0'],
  168. ],[
  169. 'required'=>':attribute 为必填项',
  170. 'max'=>':attribute 字符过多或数值过大',
  171. 'min'=>':attribute 不得为负',
  172. 'numeric'=>':attribute 应为数字',
  173. ],[]);
  174. return $validator;
  175. }
  176. }