WaveController.php 5.3 KB

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