WaveController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Batch;
  4. use App\Components\AsyncResponse;
  5. use App\Order;
  6. use App\OrderBin;
  7. use App\Services\WaveService;
  8. use Exception;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\DB;
  12. use Illuminate\Support\Facades\Gate;
  13. use Illuminate\Support\Facades\Http;
  14. class WaveController extends Controller
  15. {
  16. use AsyncResponse;
  17. public function __construct()
  18. {
  19. app()->bind("WaveService",WaveService::class);
  20. }
  21. // 主页
  22. public function index(Request $request){
  23. if(!Gate::allows('订单管理-波次-查询')){ return redirect(url('/')); }
  24. $waveService = app("WaveService");
  25. $waves = $waveService->queryWave($request);
  26. $param = $waveService->getPageParameter($request);
  27. $search = $waveService->getSearchCondition($request);
  28. foreach ($waves as $index=>$wave){
  29. $wave->pickerPrint = '';
  30. $wave->pickerPrintTime = '';
  31. $wave->expressPrinting = '';
  32. $wave->expressPrintTime = '';
  33. if(!is_null($wave->userdefine1)){
  34. $str = $wave->userdefine1;
  35. $index = strpos($str,'-PK');
  36. $wave->pickerPrint = substr($str,0,$index);
  37. $wave->pickerPrintTime = substr($str,$index+3);
  38. }
  39. if(!is_null($wave->userdefine2)){
  40. $str = $wave->userdefine2;
  41. if(strpos($str,'-EX')){
  42. $index = strpos($str,'-EX');
  43. $wave->expressPrinting = substr($str,0,$index);
  44. $wave->expressPrintTime = substr($str,$index+3);
  45. }else if(strpos($str,'-Auto')){
  46. $index = strpos($str,'-Auto');
  47. $wave->expressPrinting = substr($str,0,$index);
  48. $wave->expressPrintTime = substr($str,$index+5);
  49. }
  50. }
  51. }
  52. return view("order/wave/search",compact('waves','param','search'));
  53. }
  54. public function cancelPrinting(Request $request){
  55. if(!Gate::allows('订单管理-波次-重置打印')){ return ['success'=>false,'fail_info'=>'没有权限,请联系管理员']; }
  56. $waveService = app("WaveService");
  57. $ids = $request->input("ids");
  58. /** @var WaveService $waveService */
  59. $meg = $waveService->cancelPrint($ids);
  60. if($meg['fail_info']){
  61. return $meg;
  62. }
  63. app('LogService')->log(__METHOD__,'重置打印标记'.__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
  64. return $meg;
  65. }
  66. public function exportExcelOnParams(Request $request){
  67. $sql = app("WaveService")->getSql($request);
  68. $post = Http::post(config('go.export.url'),['type'=>'orderWave','sql'=>$sql]);
  69. if ($post->status() == 500){
  70. throw new Exception($post->header("Msg"));
  71. }
  72. return response($post,200, [
  73. "Content-type"=>"application/octet-stream",
  74. "Content-Disposition"=>"attachment; filename=波次记录-".date('ymdHis').'.xlsx',
  75. ]);
  76. }
  77. public function repairBatch()
  78. {
  79. $error = [];
  80. foreach (\request("codes") as $code){
  81. if (!$code)continue;
  82. $wave = DB::connection("oracle")->selectOne(DB::raw("select * from DOC_WAVE_HEADER where WAVENO = ?"),[$code]);
  83. if (!$wave){
  84. $error[] = $code."FLUX无波次";
  85. continue;
  86. }
  87. $owner = app("OwnerService")->codeGetOwner($wave->customerid);
  88. $obj = [
  89. "wms_status" => $this->wms_status($wave),
  90. "wms_type"=>$wave->descr,
  91. "created_at"=>date("Y-m-d H:i:s"),
  92. "wms_created_at"=>$wave->addtime,
  93. "updated_at"=>$wave->edittime,
  94. "owner_id"=>$owner->id,
  95. ];
  96. $wave = Batch::query()->where("code",$code)->first();
  97. if (!$wave){
  98. $error[] = $code."本地无波次";
  99. $obj["code"] = $code;
  100. $wave = Batch::query()->create($obj);
  101. }else{
  102. Batch::query()->where("code",$code)->update($obj);
  103. }
  104. $ordernos = array_column(DB::connection("oracle")->select(DB::raw("select orderno from DOC_WAVE_DETAILS where WAVENO = ?"),[$code]),"orderno");
  105. $count = Order::query()->whereIn("code",$ordernos)->count();
  106. if (count($ordernos)!=$count)$error[] = $code."本地订单缺失";
  107. Order::query()->whereIn("code",$ordernos)->update([
  108. "batch_id"=>$wave->id
  109. ]);
  110. Order::query()->with(["batch","bin"])->whereIn("code",$ordernos)->get()->each(function ($order){
  111. if (!$order->bin){
  112. $bin = DB::connection("oracle")->selectOne(DB::raw("select seqno from DOC_WAVE_DETAILS where waveno = ? and orderno = ?"),[$order->batch->code,$order->code]);
  113. if ($bin){
  114. OrderBin::query()->create([
  115. 'order_id' => $order->id,
  116. 'number' => $bin->seqno,
  117. ]);
  118. }
  119. }
  120. });
  121. }
  122. $this->success($error);
  123. }
  124. /**
  125. * @param $wave
  126. * @return string
  127. */
  128. private function wms_status($wave): string
  129. {
  130. switch ($wave->wavestatus) {
  131. case 00:
  132. $wms_status = '创建';
  133. break;
  134. case 40:
  135. $wms_status = '部分收货';
  136. break;
  137. case 90:
  138. $wms_status = '取消';
  139. break;
  140. case 99:
  141. $wms_status = '完成';
  142. break;
  143. case 62:
  144. $wms_status = '部分装箱';
  145. break;
  146. default:
  147. $wms_status = (string)$wave->wavestatus;
  148. }
  149. return $wms_status;
  150. }
  151. }