TestController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Commodity;
  4. use App\CommodityMaterialBoxModel;
  5. use App\Components\AsyncResponse;
  6. use App\Components\ErrorPush;
  7. use App\ErrorTemp;
  8. use App\Feature;
  9. use App\Jobs\OrderCreateWaybill;
  10. use App\MaterialBox;
  11. use App\MaterialBoxModel;
  12. use App\Order;
  13. use App\Owner;
  14. use App\OwnerFeeDetail;
  15. use App\OwnerPriceOperation;
  16. use App\OrderPackageCountingRecord;
  17. use App\RejectedBill;
  18. use App\Services\ForeignHaiRoboticsService;
  19. use App\Services\StationService;
  20. use App\Services\StorageService;
  21. use App\Station;
  22. use App\StationTask;
  23. use App\StationTaskMaterialBox;
  24. use App\TaskTransaction;
  25. use App\Unit;
  26. use App\Waybill;
  27. use Carbon\Carbon;
  28. use Carbon\CarbonPeriod;
  29. use Illuminate\Database\Eloquent\Collection;
  30. use Illuminate\Http\Request;
  31. use Illuminate\Support\Facades\Cache;
  32. use Illuminate\Support\Facades\Auth;
  33. use Illuminate\Support\Facades\Cookie;
  34. use Illuminate\Support\Facades\DB;
  35. use Illuminate\Support\Facades\Http;
  36. class TestController extends Controller
  37. {
  38. use AsyncResponse,ErrorPush;
  39. const ASNREFERENCE_2 = 'ASNREFERENCE2';
  40. private $data = [];
  41. public function __construct()
  42. {
  43. $this->data["active_test"] = "active";
  44. }
  45. public function method(Request $request, $method)
  46. {
  47. return call_user_func([$this, $method], $request);
  48. }
  49. public function lightUp()
  50. {
  51. app("CacheShelfService")->lightUp('HAIB1-02-02','3','0');
  52. }
  53. public function lightOff()
  54. {
  55. $params = [
  56. "areaCode" => "1004",
  57. 'locCode' => "HAIB1-02-02",
  58. 'PTLAction' => 0,
  59. ];
  60. $response = Http::post(config('api.haiq.storage.light'), $params);
  61. return json_decode($response->body());
  62. }
  63. private function checkHaiQ(array $boxCodes)
  64. {
  65. $haiBoxes = DB::connection("mysql_haiRobotics")->table("ks_bin")
  66. ->where("status",1)->whereIn("ks_bin_code",$boxCodes)->get();
  67. if ($haiBoxes->count()==0)return array(null,null);
  68. $codes = [];
  69. $haiBoxes->each(function ($haiBox)use(&$codes){$codes[$haiBox->ks_bin_code] = true;});
  70. $haiBoxes = DB::connection("mysql_haiRobotics_ess")->table("ks_ess_task_detail")
  71. ->whereIn("bin_code",$boxCodes)
  72. ->whereNotIn("status",[0,4])->get();
  73. $notCodes = [];
  74. $haiBoxes->each(function ($haiBox)use(&$notCodes){$notCodes[$haiBox->bin_code] = true;});
  75. return array($codes,$notCodes);
  76. }
  77. public function getModelAvailableBox(int $modelId, bool $sqlQuery = false, array $blacklist = [])
  78. {
  79. $query = MaterialBox::query()->where("material_box_model_id",$modelId);
  80. $boxes = $query->whereNotIn("id",MaterialBox::query()->where("material_box_model_id",$modelId)->select("id")
  81. ->whereHas("performTask"));
  82. if ($blacklist)$boxes = $boxes->whereNotIn("id",$blacklist);
  83. $boxes = $boxes->get();
  84. //筛选下海柔可用箱
  85. list($codes,$notCodes) = $this->checkHaiQ(array_column($boxes->toArray(),"code"));
  86. if (!$codes)$boxes = new \Illuminate\Database\Eloquent\Collection();
  87. $boxes = $boxes->filter(function ($box)use($codes,$notCodes){
  88. if (!isset($codes[$box->code]) || isset($notCodes[$box->code]))return false;
  89. return true;
  90. });
  91. if (!$sqlQuery)return $boxes;
  92. if ($boxes->count()==0)return array(null,null);
  93. $boxCodes = "";
  94. $map = [];
  95. foreach ($boxes as $box){
  96. $boxCodes .= "'".$box->code."',";
  97. $map[$box->code] = $box->id;
  98. }
  99. return array(rtrim($boxCodes,","),$map);
  100. }
  101. public function test()
  102. {
  103. $a = collect(["a"]);
  104. $b = collect(["b"]);
  105. dd($a->merge($b));
  106. $lotNum = 'LT00551703';
  107. $commodity = Commodity::query()->find(593292);
  108. /** @var \Illuminate\Database\Eloquent\Collection $models */
  109. $models = app("MaterialBoxModelService")->getModelSortedByOwner($commodity->owner_id);
  110. $models->load(["commodity"=>function($query)use($commodity){
  111. $query->where("commodity_id",$commodity->id);
  112. }]);
  113. $models = $models->whereNotNull("commodity");
  114. if ($models->count()==0)$this->success(["status"=>false,"commodityId"=>$commodity->id]);
  115. $sql = <<<SQL
  116. SELECT LOCATIONID,QTY FROM INV_LOT_LOC_ID WHERE LOTNUM = '{$lotNum}'
  117. AND LOCATIONID LIKE 'IDE%' AND SKU = '{$commodity->sku}' AND TRACEID = '*' AND QTY > 0 AND QTY > 0 ORDER BY QTY
  118. SQL;
  119. $invs = DB::connection("oracle")->select(DB::raw($sql));
  120. if ($invs){
  121. $map = [];
  122. $codes = [];
  123. foreach ($invs as $inv){
  124. $map[$inv->locationid] = $inv->qty;
  125. $codes[] = $inv->locationid;
  126. }
  127. $modelMap = [];
  128. $orderBy = "CASE material_box_model_id ";
  129. foreach ($models as $key=>$model){
  130. $orderBy .= 'WHEN '.$model->id." THEN ".$key;
  131. $modelMap[$model->id] = $model->commodity->maximum;
  132. }
  133. $orderBy.= " END";
  134. $boxes = MaterialBox::query()->whereIn("code",$codes)->orderByRaw($orderBy)->get();
  135. foreach ($boxes as $box){
  136. if ($modelMap[$box->material_box_model_id]<=$map[$box->code])continue;
  137. $num = $modelMap[$box->material_box_model_id]-$map[$box->code];
  138. dump([$box,$num]);
  139. }
  140. }
  141. }
  142. //快递称重 生成历史数据
  143. public function addRecord(Request $request)
  144. {
  145. ini_set('max_execution_time',-1);
  146. OrderPackageCountingRecord::query()->truncate();
  147. $start = Carbon::parse(request("month"))->startOfMonth();
  148. $end = Carbon::parse(request('month'))->endOfMonth();
  149. foreach (CarbonPeriod::create($start,$end) as $date){
  150. /** @var $date Carbon */
  151. $yesterday = $date->format("Y-m-d");
  152. $sql = <<<sql
  153. SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(order_packages.measuring_machine_id,0) measuring_machine_id,order_packages.owner_id,
  154. SUM(CASE WHEN order_packages.weighed_at IS NOT NULL THEN 1 ELSE 0 END) AS count,
  155. COUNT(1) total FROM order_packages LEFT JOIN orders ON order_packages.order_id=orders.id
  156. WHERE orders.wms_status != '订单取消'
  157. AND order_packages.created_at BETWEEN '{$yesterday} 00:00:00' AND '{$yesterday} 23:59:59' GROUP BY date,order_packages.measuring_machine_id,order_packages.owner_id
  158. sql;
  159. $result = DB::select(DB::raw($sql));
  160. if (!$result) {
  161. $obj = [
  162. "targeted_at" => $yesterday,
  163. "un_weigh_count" => 0,
  164. "total_count" => 0,
  165. "measuring_machine_id" => 0,
  166. "owner_id" => 0
  167. ];
  168. $model = OrderPackageCountingRecord::query()->create($obj);
  169. Cache::put("weight.".$yesterday, $obj);
  170. }else{
  171. $objs = [];
  172. foreach ($result as $v){
  173. $obj = [
  174. "targeted_at" => $v->date,
  175. "un_weigh_count" => $v->count,
  176. "total_count" => $v->total,
  177. "measuring_machine_id" => $v->measuring_machine_id,
  178. "owner_id" => $v->owner_id
  179. ];
  180. $model = OrderPackageCountingRecord::query()->create($obj);
  181. array_push($objs, $obj);
  182. }
  183. Cache::put("weight.".$yesterday, $objs);
  184. }
  185. }
  186. }
  187. public function redis()
  188. {
  189. $start = 1606752000;$end = 1627747200;
  190. $len = ($end - $start) / 86400;
  191. for ($i=0; $i <= $len ; $i ++){
  192. $date = date("Y-m-d", $start + $i * 86400);
  193. Cache::pull('weight.'.$date);
  194. }
  195. }
  196. }