PackageController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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. //
  24. // if (count($errors)>0){
  25. // $this->log(__METHOD__,'error'.__FUNCTION__,json_encode($request).'||'.json_encode($errors),null);
  26. // $response=["msg"=>$errors,"code"=>500,"data"=>null];
  27. // return json_encode($response);
  28. // }
  29. //
  30. // $measuringMachine=MeasuringMachine::where('code',$request['id'])->first();
  31. // if (!$measuringMachine){
  32. // $measuringMachine=new MeasuringMachine([
  33. // 'name'=>$request['id'],
  34. // 'code'=>$request['id'],
  35. // 'status'=>'在线'
  36. // ]);
  37. // $measuringMachine->save();
  38. // $this->log(__METHOD__,'weightApi(new measuring machine)'.__FUNCTION__,json_encode($request),null);
  39. // }else{
  40. // $measuringMachineStatus=new MeasuringMachine();
  41. // $measuringMachineStatus->changeStatus($measuringMachine);
  42. // }
  43. // MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
  44. //
  45. // $package=Package::where('logistic_number',$request['barcode'])->first();
  46. // if (isset($request['length'])&&isset($request['width'])&&isset($request['height'])){
  47. // $length=$request['length'];
  48. // $width=$request['width'];
  49. // $height=$request['height'];
  50. // $max=($length>=($width>=$height?$width:$height)?$length:($width>=$height?$width:$height));
  51. // if ($max==$length){
  52. // $centre=$width>=$height?$width:$height;
  53. // $min=$width<$height?$width:$height;
  54. // }elseif ($max==$width){
  55. // $centre=$length>=$height?$length:$height;
  56. // $min=$length<$height?$length:$height;
  57. // }else{
  58. // $centre=$width>=$length?$width:$length;
  59. // $min=$width<$length?$width:$length;
  60. // }
  61. // }else{
  62. // $max=0;$centre=0;$min=0;
  63. // }
  64. // $apiController=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
  65. // if ($package){
  66. // $packageController=new \App\Http\Controllers\PackageController();
  67. // $package->fetchPaperBox($max,$centre,$min,$package->owner_id);
  68. // //处理活动波次
  69. // if ($package->batch_rule&&strstr($package->batch_rule,'组合')){
  70. // $packageController->syncBatch($package->batch_number,$request['weight'],$max,$centre,$min,$reqDate,$package['paper_box_id']);
  71. // }else{
  72. // $package->measuring_machine_id=$measuringMachine->id;
  73. // $package->weight=$request['weight'];
  74. // $package->length=$max;
  75. // $package->width=$centre;
  76. // $package->height=$min;
  77. // $package->bulk=$max*$centre*$min;
  78. // $package->weighed_at=$reqDate;
  79. // $package->status="未上传";
  80. // $this->log(__METHOD__,'Batch_'.__FUNCTION__,json_encode($package),null);
  81. // $package->save();
  82. // $result=$apiController->accomplishToWMS($package);
  83. // if ($result['result']){
  84. // if ($package->status=="记录异常")$package->status="已上传异常";
  85. // else $package->status="已上传";
  86. // }else{
  87. // $package->status="上传异常";
  88. // }
  89. // $package->save();
  90. // }
  91. // if ($package->order_code){
  92. // $waybill=Waybill::where('wms_bill_number',$package->order_code)->where('status','!=','已完结')
  93. // ->where('status','!=','无模型')->first();
  94. // if ($waybill){
  95. // $waybill->warehouse_weight_other=$package->weight;
  96. // $waybill->warehouse_weight_unit_id_other=1;
  97. // $waybill->update();
  98. // }
  99. // }
  100. // event(new WeighedEvent($package));
  101. // $response=["msg"=>"保存成功",
  102. // "code"=>200,
  103. // "data"=>true,
  104. // "serverMsg"=>null,
  105. // "requestor"=>[
  106. // "requestor"=>"1",
  107. // "eventCode"=>"0",
  108. // "reqDate"=>$reqDate,
  109. // "resDate"=>Carbon::now()]
  110. // ];
  111. // $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'|'.json_encode($response),null);
  112. // return json_encode($response,JSON_UNESCAPED_UNICODE);
  113. // }
  114. // if (!$package){
  115. // $logisticNumber=$request['barcode'];
  116. // $createPackage=new Package([
  117. // 'logistic_number'=>$logisticNumber,
  118. // 'delivery_number'=>$logisticNumber,
  119. // 'measuring_machine_id'=>$measuringMachine->id,
  120. // 'weight'=>$request['weight'],
  121. // 'length'=>$max,
  122. // 'width'=>$centre,
  123. // 'height'=>$min,
  124. // 'bulk'=>$max*$centre*$min,
  125. // 'weighed_at'=>$reqDate,
  126. // 'status'=>"未下发",
  127. // ]);
  128. // $createPackage->fetchAllFromOracle();
  129. // $createPackage->fetchPaperBox($max, $centre, $min);
  130. // $result=$apiController->accomplishToWMS($createPackage);
  131. // if(!$result['result']){
  132. // $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($createPackage),null);
  133. // $response=["msg"=>"写入WMS失败!","code"=>500,"data"=>null];
  134. // return json_encode($response,JSON_UNESCAPED_UNICODE);
  135. // }
  136. // if ($createPackage->save()){
  137. // $measuringMachine->touch();
  138. // MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
  139. // MarkPackageExcepted::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
  140. // event(new WeighedEvent($createPackage));
  141. // $response=["msg"=>"保存成功",
  142. // "code"=>200,
  143. // "data"=>true,
  144. // "serverMsg"=>null,
  145. // "requestor"=>[
  146. // "requestor"=>"1",
  147. // "eventCode"=>"0",
  148. // "reqDate"=>$reqDate,
  149. // "resDate"=>Carbon::now()]
  150. // ];
  151. // $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
  152. // return json_encode($response,JSON_UNESCAPED_UNICODE);
  153. // }
  154. //
  155. // $response=["msg"=>"保存时发生错误(未下发)!","code"=>500,"data"=>null];
  156. // $this->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
  157. // return json_encode($response,JSON_UNESCAPED_UNICODE);
  158. // }
  159. // }
  160. public function new_(Request $requestInitial){
  161. $request=[];
  162. foreach ($requestInitial->all() as $k=>$v){
  163. $request[strtolower($k)]=$v;
  164. }
  165. $reqDate=isset($request['time'])?$request['time']:Carbon::now();
  166. $errors=$this->validatorWeight($request)->errors();
  167. if (count($errors)>0){
  168. $this->log(__METHOD__,'error'.__FUNCTION__,json_encode($request).'||'.json_encode($errors),null);
  169. return json_encode(["msg"=>$errors,"code"=>500,"data"=>null]);
  170. }
  171. $measuringMachine=MeasuringMachine::firstOrCreate('code',$request['id']);
  172. $measuringMachine->turnOn();
  173. $measuringMachine->turnOffInMinutes(30);
  174. $package=Package::where('logistic_number',$request['barcode'])->first();
  175. $edges=[$request['length']??0,$request['width']??0,$request['height']??0];
  176. rsort($edges);
  177. $fluxController=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
  178. if ($package){
  179. $packageController=new \App\Http\Controllers\PackageController();
  180. $package->fetchPaperBox($edges[0],$edges[1],$edges[2]);
  181. $package['bulk']=$edges[0]*$edges[1]*$edges[2];
  182. //处理活动波次
  183. if ($package->isActivityBatch()){
  184. $package->unifyThisMeasureUnderBatch();
  185. $result=$fluxController->markWMSOnBatch($package['batch_number'], $request['weight']);
  186. $packageController->syncBatch($package->batch_number,$request['weight'],$max,$centre,$min,$reqDate,$package['paper_box_id']);
  187. }else{
  188. $package->measuring_machine_id=$measuringMachine->id;
  189. $package->weight=$request['weight'];
  190. $package->length=$max;
  191. $package->width=$centre;
  192. $package->height=$min;
  193. $package->bulk=$max*$centre*$min;
  194. $package->weighed_at=$reqDate;
  195. $package->status="未上传";
  196. $this->log(__METHOD__,'Batch_'.__FUNCTION__,json_encode($package),null);
  197. $package->save();
  198. $result=$fluxController->accomplishToWMS($package);
  199. if ($result['result']){
  200. if ($package->status=="记录异常")$package->status="已上传异常";
  201. else $package->status="已上传";
  202. }else{
  203. $package->status="上传异常";
  204. }
  205. $package->save();
  206. }
  207. if ($package->order_code){
  208. $waybill=Waybill::where('wms_bill_number',$package->order_code)->where('status','!=','已完结')
  209. ->where('status','!=','无模型')->first();
  210. if ($waybill){
  211. $waybill->warehouse_weight_other=$package->weight;
  212. $waybill->warehouse_weight_unit_id_other=1;
  213. $waybill->update();
  214. }
  215. }
  216. event(new WeighedEvent($package));
  217. $response=["msg"=>"保存成功",
  218. "code"=>200,
  219. "data"=>true,
  220. "serverMsg"=>null,
  221. "requestor"=>[
  222. "requestor"=>"1",
  223. "eventCode"=>"0",
  224. "reqDate"=>$reqDate,
  225. "resDate"=>Carbon::now()]
  226. ];
  227. $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'|'.json_encode($response),null);
  228. return json_encode($response,JSON_UNESCAPED_UNICODE);
  229. }
  230. if (!$package){
  231. $logisticNumber=$request['barcode'];
  232. $createPackage=new Package([
  233. 'logistic_number'=>$logisticNumber,
  234. 'delivery_number'=>$logisticNumber,
  235. 'measuring_machine_id'=>$measuringMachine->id,
  236. 'weight'=>$request['weight'],
  237. 'length'=>$max,
  238. 'width'=>$centre,
  239. 'height'=>$min,
  240. 'bulk'=>$max*$centre*$min,
  241. 'weighed_at'=>$reqDate,
  242. 'status'=>"未下发",
  243. ]);
  244. $createPackage->fetchAllFromOracle();
  245. $createPackage->fetchPaperBox($max, $centre, $min);
  246. $result=$fluxController->accomplishToWMS($createPackage);
  247. if(!$result['result']){
  248. $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($createPackage),null);
  249. $response=["msg"=>"写入WMS失败!","code"=>500,"data"=>null];
  250. return json_encode($response,JSON_UNESCAPED_UNICODE);
  251. }
  252. if ($createPackage->save()){
  253. $measuringMachine->touch();
  254. MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
  255. MarkPackageExcepted::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
  256. event(new WeighedEvent($createPackage));
  257. $response=["msg"=>"保存成功",
  258. "code"=>200,
  259. "data"=>true,
  260. "serverMsg"=>null,
  261. "requestor"=>[
  262. "requestor"=>"1",
  263. "eventCode"=>"0",
  264. "reqDate"=>$reqDate,
  265. "resDate"=>Carbon::now()]
  266. ];
  267. $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
  268. return json_encode($response,JSON_UNESCAPED_UNICODE);
  269. }
  270. $response=["msg"=>"保存时发生错误(未下发)!","code"=>500,"data"=>null];
  271. $this->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
  272. return json_encode($response,JSON_UNESCAPED_UNICODE);
  273. }
  274. }
  275. public function validatorWeight(array $request){
  276. $validator=Validator::make($request,[
  277. 'id'=>['required','max:30',/*function ($attribute, $value, $fail) {
  278. $measuringMachine=MeasuringMachine::where('code',$value)->first();
  279. if (!$measuringMachine) {
  280. $fail($attribute.' 设备未录入在系统中!');
  281. }}*/],
  282. 'barcode'=>['required','max:191'],
  283. 'weight'=>['required','numeric','min:0'],
  284. 'length'=>['nullable','numeric','min:0'],
  285. 'width'=>['nullable','numeric','min:0'],
  286. 'height'=>['nullable','numeric','min:0'],
  287. ],[
  288. 'required'=>':attribute 为必填项',
  289. 'max'=>':attribute 字符过多或数值过大',
  290. 'min'=>':attribute 不得为负',
  291. 'numeric'=>':attribute 应为数字',
  292. ],[]);
  293. return $validator;
  294. }
  295. }