| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- <?php
- namespace App\Http\Controllers\api\thirdPart\weight;
- use App\Events\WeighedEvent;
- use App\Jobs\WeightUpdateInstantBill;
- use App\MeasuringMachine;
- use App\OracleActAllocationDetails;
- use App\OracleDOCOrderHeader;
- use App\OrderPackage;
- use App\Services\OrderService;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Http\Request;
- class WeightBaseController
- {
- protected $weight = ''; // 重量
- protected $length = ''; // 长
- protected $width = ''; // 宽
- protected $height = ''; // 高
- protected $code = ''; // 快递单号
- protected $weight_at = ''; // 称重时间
- protected $hid = ''; // 称重设备id
- public function new(Request $request)
- {
- $this->weightOrderPackage($request);
- }
- public function weightOrderPackage(Request $request)
- {
- /**
- * @var OrderPackage $orderPackage
- * @var MeasuringMachine $measuringMachine
- */
- // 转化数据
- $params = [];
- foreach ($request->input() as $key => $item) {
- $params[strtolower($key)] = $item;
- }
- // 获取快递单号
- $logistic_number = $this->getCode($params);
- // 获取称重设备
- $measuringMachine = $this->getMeasuringMachine($params);
- // 快递单号对应的OrderPackage
- $orderPackage = $this->getOrderPackageByCode($logistic_number);
- if (is_null($orderPackage)) {
- /** @var OracleDOCOrderHeader $orderHeader */
- $orderHeader = $this->findOrderHeaderByLogisticNumber($logistic_number);
- if(is_null($orderHeader)){
- return $this->getNotFindOrderHeaderMessage($params,$orderPackage);
- }
- try {
- $order = $this->createOrderByOrderHeader($orderHeader);
- $orderPackage = $this->createOrderPackage($params, $measuringMachine, $order);
- } catch (\Exception $e) {
- return json_encode(["success"=>false,"message"=>"写入WAS失败!"],JSON_UNESCAPED_UNICODE);
- }
- }
- // 更新包裹信息
- $this->updateOrderPackage($orderPackage,$params,$measuringMachine);
- // 处理波次信息
- try {
- $this->activityWaveNoProcessing($orderPackage);
- } catch (\Exception $e) {
- app('LogService')->log(__METHOD__,'HengLi weightApi (Error)'.__FUNCTION__,json_encode($orderPackage).'||'.json_encode($e),null);
- return $this->getWeithMessage($orderPackage,$e);
- }
- $this->afterApply($orderPackage);
- $response = $this->getSuccessMessage($params,$orderPackage);
- app('LogService')->log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request->getContent()).'||'.json_encode($response),null);
- return json_encode($response,JSON_UNESCAPED_UNICODE);
- }
- // region ---称重完成之后的操作
- // 后续操作
- public function afterApply(OrderPackage $orderPackage)
- {
- $orderPackage->loadMissing(['order' => function ($query) {
- $query->with('owner', 'logistic');
- }, 'measuringMachine', 'paperBox']);
- event(new WeighedEvent($orderPackage));
- dispatch(new WeightUpdateInstantBill($orderPackage));
- }
- // endregion
- // region ---消息返回
- // 返回称重成功信息
- public function getSuccessMessage($params, $orderPackage): array
- {
- return ['code' => 'success', 'error' => 'weight success'];
- }
- // 返回包裹未找到异常
- public function getNotFindOrderPackageMessage($params, $orderPackage): string
- {
- return json_encode(['success'=>false,'message'=>'未找打包裹信息',JSON_UNESCAPED_UNICODE]);
- }
- // 返回富勒信息未找到异常
- public function getNotFindOrderHeaderMessage($params, $orderPackage):string
- {
- return json_encode(['success'=>false,'message'=> '富勒信息未找到'],JSON_UNESCAPED_UNICODE);
- }
- // 返回称重下发错误
- public function getWeithMessage($orderPackage,$e)
- {
- return json_encode(['success'=>false,'message'=> $e->getMessage],JSON_UNESCAPED_UNICODE);
- }
- // endregion
- // region ---参数校验
- public function validator(Request $request): array
- {
- return [];
- }
- // endregion
- // region ---参数获取
- // 重量
- public function getWeight($params)
- {
- return $this->getValue($this->width, $params);
- }
- // 高
- public function getHeight($params)
- {
- return $this->getValue($this->height, $params);
- }
- // 长
- public function getLength($params)
- {
- return $this->getValue($this->length, $params);
- }
- // 宽
- public function getWidth($params)
- {
- return $this->getValue($this->width, $params);
- }
- // 快递单号
- public function getCode($params)
- {
- return $this->getValue($this->code, $params);
- }
- // 称重时间
- public function getWeightAt($params)
- {
- return $this->getValue($this->weight_at, $params);
- }
- // 获取参数
- public function getValue($name, $param)
- {
- $names = explode(',', $name);
- $value = array_reduce($names, function ($data, $key) {
- if (isset($data[$key])) $data = $data[$key];
- else $data = [];
- return $data;
- }, $param);
- if (is_array($value) && count($value) == 0) return null;
- return $value;
- }
- // 排序参数
- public function getEdges($params): array
- {
- $length = $this->getLength($params);
- $height = $this->getHeight($params);
- $width = $this->getWidth($params);
- $edges = [$length??0,$width??0,$height??0];
- rsort($edges);
- return $edges;
- }
- // endregion
- // region ---包裹
- // 获取包裹
- public function getOrderPackageByCode($code)
- {
- return OrderPackage::query()
- ->with(['order' => function ($query) {
- /** @var Builder $query */
- $query->with('owner', 'logistic');
- }])->where('logistic_number', $code)->first();
- }
- // 更新包裹
- public function updateOrderPackage(OrderPackage $orderPackage,$params,$measuringMachine)
- {
- $edges=$this->getEdges($params);
- $req_date=Carbon::now();
- $orderPackage->weight=$params['weight'];
- $orderPackage->measuring_machine_id=$measuringMachine->id;
- $orderPackage->length=$edges[0];
- $orderPackage->width=$edges[1];
- $orderPackage->height=$edges[2];
- $orderPackage->weighed_at=$req_date;
- $orderPackage->bulk=$edges[0]*$edges[1]*$edges[2]/1000;
- if($orderPackage->isActivityBatch()){
- $result=$this->activityWaveNoProcessing($orderPackage);
- if(!$result)return false;
- }
- return $orderPackage->save();
- }
- // 同步wms包裹信息
- public function synWmsOrderPackage($code)
- {
- }
- public function createOrderPackage($params,$measuringMachine,$order)
- {
- $weighed_at = Carbon::now();
- $edges=$this->getEdges($params);
- OrderPackage::query()->create([
- 'order_id'=>$order->id,
- 'logistic_number'=>$this->getCode($params),
- 'measuring_machine_id'=>$measuringMachine->id,
- 'weight'=>$this->getWeight($params),
- 'length'=>$edges[0],
- 'width'=>$edges[1],
- 'height'=>$edges[2],
- 'bulk'=>$edges[0]*$edges[1]*$edges[2],
- 'weighed_at'=>$weighed_at,
- 'status'=>"无",
- ]);
- return $this->getOrderPackageByCode($this->getCode($params));
- }
- // endregion
- // region ---称重设备
- // 获取称重设备
- public function getMeasuringMachine($params): MeasuringMachine
- {
- $hid = $this->getValue($this->hid, $params);
- /** @var MeasuringMachine $measuringMachine */
- $measuringMachine = MeasuringMachine::query()->firstOrCreate(['code' => $hid]); // 称重设备
- $measuringMachine->turnOn();
- $measuringMachine->turnOffInMinutes(30);
- return $measuringMachine;
- }
- // endregion
- // region ---wms操作
- // 获取orderHeader
- public function findOrderHeaderByLogisticNumber($code)
- {
- $query = OracleActAllocationDetails::query()->select('order_no')->where('picktotraceid',$code);
- return OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->whereIn('Order_No',$query)->first();
- }
- // 根据WMS订单信息创建订单信息
- public function createOrderByOrderHeader($orderHeader)
- {
- /** @var OrderService $orderService */
- $orderService = app('OrderService');
- $order_create_params = $orderService->getParamByOrderHeader($orderHeader);
- $order = $orderService->first(['code' => $orderHeader->orderno]);
- if ($order) return $order;
- $order = $orderService->createOrder($order_create_params);
- app('LogService')->log(__METHOD__, __FUNCTION__, 'GoodScan 创建Order', json_encode($order) . " || " . $orderHeader);
- return $order;
- }
- public function activityWaveNoProcessing(&$orderPackage): array //处理活动波次
- {
- $fluxController = new \App\Http\Controllers\api\thirdPart\flux\PackageController();
- if($orderPackage->isActivityBatch()){
- app('LogService')->log(__METHOD__,__FUNCTION__,"HengLi 依波次号同步所有包裹:".json_encode($orderPackage),null);
- OrderPackage::query()->where('batch_number',$orderPackage['batch_number'])->update([
- 'weight'=>$orderPackage['weight'] ?? null,
- 'length'=>$orderPackage['length'] ?? null,
- 'width'=>$orderPackage['width'] ?? null,
- 'height'=>$orderPackage['height'] ?? null,
- 'bulk'=>$orderPackage['bulk'] ?? null,
- 'measuring_machine_id'=>$orderPackage['measuring_machine_id'] ?? null,
- 'weighed_at'=>$orderPackage['weighed_at'] ?? null,
- 'paper_box_id'=>$orderPackage['paper_box_id'] ?? null,
- ]);
- $result=$fluxController->markWMSOnBatch($orderPackage['batch_number'], $orderPackage['weight']);
- if(!$result['result']){
- $orderPackage->uploaded_to_wms="异常";
- }
- }else{
- app('LogService')->log(__METHOD__,__FUNCTION__,"HengLi 写入包裹至WMS:".json_encode($orderPackage),null);
- try{
- $result=$fluxController->accomplishToWMS($orderPackage);
- if ($result['result'] == 'false') $orderPackage->uploaded_to_wms="是";
- else $orderPackage->uploaded_to_wms="异常";
- }catch (\Exception $e){
- $orderPackage->uploaded_to_wms="否";
- }
- }
- return $orderPackage->save();
- }
- // endregion
- }
|