/* Copyright 2013 Scott Logic Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #import "ScannerViewController.h" @import AVFoundation; #import #import "SCShapeView.h" #import "ScannerControllerView.h" #import "DetailViewController.h" #import "const.h" #import "AppDelegate.h" #import "MainViewController.h" #import "ContactListViewController.h" #import "CartUtils.h" #import "ERPUtils.h" #import "RANetwork.h" #define SCANNER_TARGET_DETAIL 0 #define SCANNER_TARGET_CART 1 #define SCANNER_TYPE_MODELNAME 0 #define SCANNER_TYPE_UPCCODE 1 //#import "ScannerControlViewController.h" @interface ScannerViewController () { AVCaptureVideoPreviewLayer *_previewLayer; SCShapeView *_boundingBox; NSTimer *_boxHideTimer; UILabel *_decodedMessage; } @end @implementation ScannerViewController //- (UIInterfaceOrientationMask)supportedInterfaceOrientations //{ // return UIInterfaceOrientationMaskPortrait; //} //- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation //{ // // return (toInterfaceOrientation == UIInterfaceOrientationPortrait); // //} //- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { // return UIInterfaceOrientationLandscapeRight; //// return UIInterfaceOrientationPortrait; //} - (BOOL)shouldAutorotate { return false; } #pragma mark routate - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:^(id _Nonnull context) { // what ever you want to prepare } completion:^(id _Nonnull context) { CGRect rect=self.view.bounds; DebugLog(@"%@",NSStringFromCGRect(self.focusZone.frame)); // rect.origin.y=rect.origin.y+40; // rect.size.height = rect.size.height-40; // self->_previewLayer [CATransaction begin]; [CATransaction setAnimationDuration:0.5]; [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; // [self updatePreviewLayerForOrientation:toInterfaceOrientation]; self->_previewLayer.position = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); // self.backgroundView.highLightRect = CGRectInset(self.focusZone.frame,6,6); self->_previewLayer.bounds = rect; UIInterfaceOrientation orientation = [[UIApplication sharedApplication]statusBarOrientation]; switch (orientation) { case UIInterfaceOrientationPortrait: // [_previewLayer setAffineTransform:CGAffineTransformMakeRotation(0)]; self->_previewLayer.connection.videoOrientation=AVCaptureVideoOrientationPortrait; break; case UIInterfaceOrientationPortraitUpsideDown: //[_previewLayer setAffineTransform:CGAffineTransformMakeRotation(M_PI)]; self->_previewLayer.connection.videoOrientation=AVCaptureVideoOrientationPortraitUpsideDown; break; case UIInterfaceOrientationLandscapeLeft: // [_previewLayer setAffineTransform:CGAffineTransformMakeRotation(M_PI/2)]; self->_previewLayer.connection.videoOrientation=AVCaptureVideoOrientationLandscapeLeft; break; case UIInterfaceOrientationLandscapeRight: // [_previewLayer setAffineTransform:CGAffineTransformMakeRotation(-M_PI/2)]; self->_previewLayer.connection.videoOrientation=AVCaptureVideoOrientationLandscapeRight; break; default: break; } [CATransaction commit]; }]; } //-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation //{ // // // [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; // CGRect rect=self.view.bounds; // // DebugLog(@"%@",NSStringFromCGRect(self.focusZone.frame)); // // rect.origin.y=rect.origin.y+40; // // rect.size.height = rect.size.height-40; // // // // // // // // [CATransaction begin]; // [CATransaction setAnimationDuration:0.5]; // [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; //// [self updatePreviewLayerForOrientation:toInterfaceOrientation]; // _previewLayer.position = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); // // // self.backgroundView.highLightRect = CGRectInset(self.focusZone.frame,6,6); // _previewLayer.bounds = rect; // // UIInterfaceOrientation orientation = [[UIApplication sharedApplication]statusBarOrientation]; // switch (orientation) { // // // // case UIInterfaceOrientationPortrait: // // [_previewLayer setAffineTransform:CGAffineTransformMakeRotation(0)]; // // _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationPortrait; // break; // case UIInterfaceOrientationPortraitUpsideDown: // //[_previewLayer setAffineTransform:CGAffineTransformMakeRotation(M_PI)]; // _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationPortraitUpsideDown; // break; // case UIInterfaceOrientationLandscapeLeft: // // [_previewLayer setAffineTransform:CGAffineTransformMakeRotation(M_PI/2)]; // _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationLandscapeLeft; // break; // case UIInterfaceOrientationLandscapeRight: // // [_previewLayer setAffineTransform:CGAffineTransformMakeRotation(-M_PI/2)]; // _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationLandscapeRight; // break; // default: // break; // } // [CATransaction commit]; // // //} //- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation //{ // return UIInterfaceOrientationPortrait; //} -(void) playSound { /* SystemSoundID sameViewSoundID; // NSString *filePath = [[NSBundle mainBundle]pathForResource:@"sound" ofType:@"m4r"]; // NSString *thesoundFilePath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]; //音乐文件路径 NSString *path = @"/System/Library/Audio/UISounds/begin_video_record.caf"; CFURLRef thesoundURL = (__bridge CFURLRef) [NSURL fileURLWithPath:path] ; AudioServicesCreateSystemSoundID(thesoundURL, &sameViewSoundID); //变量SoundID与URL对应 DebugLog(@"%u",(unsigned int)sameViewSoundID); AudioServicesPlaySystemSound(1112); //播放SoundID声音 */ CFBundleRef mainBundle; SystemSoundID soundFileObject; mainBundle = CFBundleGetMainBundle (); CFURLRef soundFileURLRef = CFBundleCopyResourceURL ( mainBundle, CFSTR ("softScanBeep" ), CFSTR ("wav" ), NULL ); AudioServicesCreateSystemSoundID ( soundFileURLRef, &soundFileObject ); AudioServicesPlaySystemSound(soundFileObject); } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:NO animated:NO]; // //[ attemptRotationToDeviceOrientation]; //[UIViewController attemptRotationToDeviceOrientation]; // // [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; // self.view.transform = CGAffineTransformMakeRotation(M_PI/2); // CGRect frame = [UIScreen mainScreen].applicationFrame; // self.view.bounds = CGRectMake(0, 0, 768, 1024); } - (void)onBackClick:(UIButton *)sender { [self.navigationController popViewControllerAnimated:FALSE]; } - (void)viewDidLoad { [super viewDidLoad]; #ifdef SCANNER_ORDER #if TARGET_IPHONE_SIMULATOR//模拟器 // if(RASingleton.sharedInstance.enable_OfflineOrder) { // self.scan_val = @"[[\"1111\",\"name0\",\"description\",\"10.1 X 20.2 X 30.3\",\"2\",\"12.34\",\"VIET\",\"VCSF\",\"May\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\"],[\"2222\",\"name1\",\"description\",\"10.1 X 20.2 X 30.3\",\"2\",\"12.34\",\"VIET\",\"VCSF\",\"May\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\",\"123.45\",\"234.56\"]]"; self.scan_val =@"[\"MT-USH08Q\",\"9468BE-2\",\"1000A70WH\",\"1002A70BK\"]";// @"[\"1002A70BK\"]";// [self addtocart]; } return; #endif #endif #ifdef SCANNER_ORDER self.auto_style = true; #else self.auto_style = false; #endif UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAutomatic] style:UIBarButtonItemStylePlain target:self action:@selector( onBackClick:)]; #ifdef SCANNER_ORDER closeButton.tintColor = [UIColor whiteColor]; #endif // closeButton.tintColor = UIColorFromRGB(0x996633); self.navigationItem.leftBarButtonItem = closeButton; // return; // [self.backgroundView removeFromSuperview]; //self.back = (ScannerControllerView*)self.view; if(self.auto_style) { // cgrectoff self.focusZone.frame = self.view.frame; self.backgroundView.auto_style = self.auto_style; self.backgroundView.highLightRect = self.view.frame; self.scanButton.hidden = true; self.handelOutput = true; } else { self.backgroundView.highLightRect = CGRectInset(self.focusZone.frame,6,6); self.handelOutput = false; } // self.backgroundView.autoresizingMask=0xff; #ifdef SCANNER_ORDER self.targetButton.hidden = true; #endif // Do any additional setup after loading the view, typically from a nib. // Create a new AVCaptureSession AVCaptureSession *session = [[AVCaptureSession alloc] init]; session.sessionPreset = AVCaptureSessionPresetHigh; AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // float factor = device.videoZoomFactor; // float up = device.activeFormat.videoZoomFactorUpscaleThreshold; // [device lockForConfiguration:nil]; // device.videoZoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold; // [device unlockForConfiguration]; NSError *error = nil; // Want the normal device AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; if(input) { // Add the input to the session [session addInput:input]; } else { DebugLog(@"error: %@", error); return; } AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; // Have to add the output before setting metadata types [session addOutput:output]; // What different things can we register to recognise? DebugLog(@"%@", [output availableMetadataObjectTypes]); // We're only interested in QR Codes [output setMetadataObjectTypes:@[AVMetadataObjectTypeUPCECode,AVMetadataObjectTypeCode39Code,AVMetadataObjectTypeCode39Mod43Code,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeCode93Code,AVMetadataObjectTypeCode128Code,AVMetadataObjectTypePDF417Code,AVMetadataObjectTypeQRCode,AVMetadataObjectTypeAztecCode]]; DebugLog(@"%@", [output metadataObjectTypes]); // NSArray* supporttype=output.availableMetadataObjectTypes; // [output setMetadataObjectTypes:output.availableMetadataObjectTypes]; // This VC is the delegate. Please call us on the main queue [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; // // CGRect rt1 = self.ScannerControl.scannerZone.frame; // Display on screen _previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session]; _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; // _previewLayer.orientation= AVCaptureVideoOrientationLandscapeRight; UIInterfaceOrientation orientation = [[UIApplication sharedApplication]statusBarOrientation]; switch (orientation) { // UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, // UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, // UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight, // UIInterfaceOrientationLandscapeRight // AVCaptureVideoOrientationPortrait = 1, // AVCaptureVideoOrientationPortraitUpsideDown = 2, // AVCaptureVideoOrientationLandscapeRight = 3, // AVCaptureVideoOrientationLandscapeLeft = 4, case UIInterfaceOrientationPortrait: _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationPortrait; break; case UIInterfaceOrientationPortraitUpsideDown: _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationPortraitUpsideDown; break; case UIInterfaceOrientationLandscapeLeft: _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationLandscapeLeft; break; case UIInterfaceOrientationLandscapeRight: _previewLayer.connection.videoOrientation=AVCaptureVideoOrientationLandscapeRight; break; default: break; } CGRect rect=self.view.bounds; // rect.origin.y=rect.origin.y+40; // rect.size.height = rect.size.height-40; _previewLayer.bounds = rect; _previewLayer.position = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)); [self.view.layer addSublayer:_previewLayer]; [self.view addSubview:self.backgroundView]; // [self.view addSubview:self.ScannerControl.view]; // CGRect rt = self.ScannerControl.scannerZone.bounds; // CGRect rt1 =output.rectOfInterest; // output.rectOfInterest = CGRectMake(0, 0, 300, 300); //self.ScannerControl.scannerZone.frame; // ScannerControllerView* view =[[ ScannerControllerView alloc] initWithFrame:self.view.frame]; // view.backgroundColor = [UIColor clearColor]; // ScannerLayer * layer = [[ScannerLayer alloc] init]; // [self.view.layer addSublayer:layer]; // Add the view to draw the bounding box for the UIView _boundingBox = [[SCShapeView alloc] initWithFrame:self.view.bounds]; _boundingBox.backgroundColor = [UIColor clearColor]; _boundingBox.hidden = YES; [self.view addSubview:_boundingBox]; // Add a label to display the resultant message _decodedMessage = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - 75, CGRectGetWidth(self.view.bounds), 75)]; _decodedMessage.numberOfLines = 0; _decodedMessage.backgroundColor = [UIColor colorWithWhite:0.8 alpha:0.9]; _decodedMessage.textColor = [UIColor darkGrayColor]; _decodedMessage.textAlignment = NSTextAlignmentCenter; [self.view addSubview:_decodedMessage]; #ifdef SCANNER_ORDER _decodedMessage.hidden = TRUE; #endif self.scanButton.layer.shadowColor = [UIColor blackColor].CGColor; self.scanButton.layer.shadowOffset = CGSizeMake(0, 0); self.scanButton.layer.shadowOpacity = 0.5; self.scanButton.layer.shadowRadius = 2.0; self.scanButton.layer.borderColor = [[UIColor darkGrayColor] CGColor]; self.scanButton.layer.borderWidth = 15; // Start the AVSession running [session startRunning]; #ifdef BUILD_UWAVER [self.targetButton setTitle:@"Target: Model Detail" forState:UIControlStateNormal]; self.target = SCANNER_TARGET_DETAIL; #endif #ifdef BUILD_CONTRAST self.typeButton.hidden = false; [self.typeButton setTitle:@"Type: UPC Code" forState:UIControlStateNormal]; self.type = SCANNER_TYPE_UPCCODE; #else self.typeButton.hidden = true; self.type = SCANNER_TYPE_MODELNAME; #endif } //#pragma mark - ScannerControllerDelegate //-(void)BeginScan:(bool)begin //{ // self.handelOutput = begin; //} #pragma mark - AVCaptureMetadataOutputObjectsDelegate - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { if(!self.handelOutput) return; // if(!self.auto_style) { self.handelOutput = false; [self StopScan]; } AVMetadataObject * cadedate = nil; CGPoint centerzone =CGPointMake(CGRectGetMidX(self.focusZone.frame), CGRectGetMidY(self.focusZone.frame)); float distance = MAXFLOAT; for (AVMetadataObject *metadata in metadataObjects) { DebugLog(@"%@",metadata); // if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode]) { // Transform the meta-data coordinates to screen coords AVMetadataMachineReadableCodeObject *transformed = (AVMetadataMachineReadableCodeObject *)[_previewLayer transformedMetadataObjectForMetadataObject:metadata]; // Update the frame on the _boundingBox view, and show it CGRect rt = transformed.bounds; CGRectGetMidX(rt); CGPoint centermeta =CGPointMake(CGRectGetMidX(rt), CGRectGetMidY(rt)); if(CGRectContainsPoint(self.focusZone.frame, centermeta)) { if(cadedate == nil) cadedate = metadata; float distancemeta = (centermeta.x-centerzone.x)*(centermeta.x-centerzone.x)+(centermeta.y-centerzone.y)*(centermeta.y-centerzone.y); if(distancemeta //// }]; //// } //// else //// { //// //// //if(/*appDelegate.user_type==USER_ROLE_EMPLOYEE&&/*appDelegate.contact_id==nil&&*/appDelegate.order_code==nil) //// if(appDelegate.order_code==nil) //// { //// [main_vc checklogin:false]; //// //// if(appDelegate.can_create_order) //// { //// NSString* msg =@""; //// if(appDelegate.contact_id.length>0) //// { //// msg = [msg stringByAppendingString:@"\n\nCustomer:"]; //// msg = [msg stringByAppendingString:appDelegate.customerInfo[@"customer_name"]]; //// //// } //// UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Add to cart", nil) message:msg delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Add to pending order", nil),NSLocalizedString(@"Add to new order", nil), nil]; //// //// // alert. //// [alert show]; //// } //// else //// { //// UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Add to cart", nil) message:NSLocalizedString(@"", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Add to pending order", nil), nil]; //// //// // alert. //// [alert show]; //// } //// } //// else //// { //// //// //// if(appDelegate.order_code==nil) //// [ self neworder]; //// else //// [self addtocart]; //// //// //// } //// } //// //// //// //// //// //// //// //// //} -(void) neworder { __block UIAlertController * waitalert = [RAUtils waiting_alert:self title:@"Create Order" completion:^{ [RANetwork request_create_order:^(NSMutableDictionary *result) { NSMutableDictionary* return_json = result; [waitalert dismissViewControllerAnimated:YES completion:^{ // [waitalert dismissViewControllerAnimated:YES completion:nil]; if([[return_json valueForKey:@"result"] intValue]==2) { int result=[[return_json valueForKey:@"result"] intValue]; if(result==2) { //successed. NSString* order_code = [return_json valueForKey:@"orderCode"]; AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; appDelegate.order_code = order_code; appDelegate.order_status = [[return_json valueForKey:@"orderStatus"] intValue]; [self addtocart]; } } else { [RAUtils message_alert:[return_json valueForKey:@"err_msg"] title:@"Add To Cart" controller:self] ; } }]; }]; }]; // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // // NSDictionary* return_json = [RANetwork new_Order]; // // dispatch_async(dispatch_get_main_queue(), ^{ // [waitalert dismissViewControllerAnimated:YES completion:nil]; // // // if([[return_json valueForKey:@"result"] intValue]==2) // { // int result=[[return_json valueForKey:@"result"] intValue]; // if(result==2) // { // //successed. // // NSString* order_code = [return_json valueForKey:@"orderCode"]; // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; // appDelegate.order_code = order_code; // appDelegate.order_status = [[return_json valueForKey:@"orderStatus"] intValue]; // // // [self addtocart]; // // // // } // } // else // { // // [RAUtils message_alert:[return_json valueForKey:@"err_msg"] title:@"Add To Cart" controller:self] ; // } // // // // // }); // }); } -(void) addtocart { #ifdef SCANNER_ORDER // if(RASingleton.sharedInstance.enable_OfflineOrder) { NSString* key =@"usai2010"; // // NSString* str1 = @"[[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"],[\"5688\",\"5808-68\",\"DINING TBL, ACACIA VNER\",\"123.45\",\"1\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"123.45\",\"1\",\"10.96\",\"viet\",\"vcsf\",\"42 X 68 x 30.5H\",\"234.56\"]]"; // // NSString* str2 = [AESCrypt encrypt:self.scan_val password:key]; // NSString * cart_item = [AESCrypt decrypt:self.scan_val password:key]; //#if TARGET_IPHONE_SIMULATOR // cart_item = self.scan_val; //#endif NSString * cart_item = self.scan_val; if(cart_item == nil) { //二维码不是scan order的格式 // [RAUtils message_alert:@"QR CODE incorrect." title:@"Add To Cart" controller:self] ; [RAUtils message_alert:@"QR CODE incorrect." title:@"Add To Cart" controller:self action_handler:^(UIAlertAction * _Nonnull action) { self.handelOutput = true; } completion:nil]; return; } // NSMutableArray* item = [[RAConvertor string2dict:cart_item] mutableCopy]; NSMutableArray* item = [[RADataProvider request_scan_model_by_names:cart_item] mutableCopy]; // __block NSMutableDictionary* jitem = [NSMutableDictionary new]; // jitem[@"product_id"]= item[0]; // NSString* model =item[1]; // NSString* description =item[2]; // jitem[@"model"] =model; // jitem[@"description"] = [NSString stringWithFormat:@"%@ \r\n%@",model,description]; // jitem[@"unit_price"] =@( [item[3] doubleValue]); // jitem[@"stockUom"] = @([item[4] intValue]); // jitem[@"count"] = @([item[4] intValue]); // jitem[@"subtotal_price"] = @([item[4] intValue]* [item[3] doubleValue]); // // jitem[@"check"]=@(true); // self.resultvc.scan_val = item; self.resultvc.modalPresentationStyle = UIModalPresentationFullScreen;//有三种状态,自己看看是哪种 __weak typeof(self) weakself = self; __block NSMutableArray* modellist; self.resultvc.returnValue = ^(id _Nonnull val) { modellist = (NSMutableArray*)val; weakself.handelOutput=true; if(modellist==nil) return; // 加购物车 if(RASingleton.sharedInstance.scan_cart ==nil) { // NSData* json =[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:URL_SO_CART ofType:@"json" ]]; NSMutableDictionary* cartTemplate=[OLDataProvider loadScanTemplate:@"scan_cart.json"]; RASingleton.sharedInstance.scan_cart=cartTemplate;//[[RAConvertor data2dict:json] mutableCopy]; } // 初始化为 whse; if(RASingleton.sharedInstance.scan_cart[@"price_type"] ==nil) { RASingleton.sharedInstance.scan_cart[@"price_type"] = @1; RASingleton.sharedInstance.price_type = 1; } NSMutableDictionary* section =[RASingleton.sharedInstance.scan_cart[@"section_0"] mutableCopy]; int count =[section[@"count"] intValue]; for(int j=0;j