VersionController.php 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. <?php
  2. namespace Modules\Manager\Http\Controllers;
  3. use App\Imports\ExpressImport;
  4. use App\Models\Express;
  5. use App\Models\Goodtest;
  6. use App\Models\Ordertest;
  7. use App\Models\Version;
  8. use App\Models\Message;
  9. use Carbon\Carbon;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Cache;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Log;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Storage;
  16. use Maatwebsite\Excel\Facades\Excel;
  17. class VersionController extends Controller
  18. {
  19. /*
  20. * 下载数据
  21. * **/
  22. public function GetSendLog(){
  23. ini_set('memory_limit', '4096M');
  24. $rows=[
  25. "op_name"=>'操作人',
  26. "op_phone"=>'操作人手机号',
  27. "accept_name"=>'所属者昵称',
  28. "accept_phone"=>'所属者手机号',
  29. "level"=>'等级',
  30. "note"=>'备注',
  31. "created_at"=>'发货时间',
  32. ];
  33. // $a=Trace::where("i")
  34. $re=\DB::table('sendgood_log')
  35. ->join('se_code','se_code.id','=','sendgood_log.select_id')
  36. ->whereBetween('sendgood_log.created_at',['2021-03-16 00:00:00','2021-03-17 00:00:00'])
  37. // ->where('')
  38. ->where('sendgood_log.type',0)
  39. ->select('sendgood_log.*','se_code.level','se_code.is_lowest')
  40. ->get();
  41. $arr=[];
  42. foreach ($re as $k=>$v){
  43. $arr[$k]['op_name']=$v->op_name;
  44. $arr[$k]['op_phone']=$v->op_phone;
  45. $arr[$k]['accept_name']=$v->accept_name;
  46. $arr[$k]['accept_phone']=$v->accept_phone;
  47. if ($v->is_lowest==1){
  48. $arr[$k]['level']='小码';
  49. }else{
  50. if ($v->level==1){
  51. $arr[$k]['level']='大码';
  52. }else{
  53. $arr[$k]['level']='中码';
  54. }
  55. }
  56. $arr[$k]['note']=$v->note;
  57. $arr[$k]['created_at']=$v->created_at;
  58. // $arr[$k]['level']=
  59. }
  60. $filename=date("YmdHi").Str_random(6).'-'.'.csv';
  61. header('Content-Description: File Transfer');
  62. header('Content-Type: application/vnd.ms-excel');
  63. header('Content-Disposition: attachment; filename="'. $filename .'"');
  64. header('Expires: 0');
  65. header('Cache-Control: must-revalidate');
  66. header('Pragma: public');
  67. $fp = fopen('php://output', 'a');//打开output流
  68. mb_convert_variables('GBK', 'UTF-8', $rows);
  69. fputcsv($fp, $rows);
  70. foreach ($arr as $db){
  71. $data=[$db['op_name'],$db['op_phone'],$db['accept_name'],$db['accept_phone'],$db['level'],$db['note'],$db['created_at']];
  72. // $data=[env('APP_TRACE').$db['code'],$db['security_code'],$db['pid'],$db['sort'],$db['model'],$db['level']];
  73. mb_convert_variables('GBK', 'UTF-8', $data);
  74. fputcsv($fp, $data);
  75. }
  76. unset($dbs);
  77. ob_flush();
  78. flush();
  79. fclose($fp);
  80. exit();
  81. }
  82. public function GetCache(){
  83. $data=Goodtest::where('is_show',2)->get();
  84. foreach ($data as $k=>$v){
  85. dump(Cache::get('dwbs_good_num'.$v->id));
  86. }
  87. }
  88. //获取app版本信息列表
  89. public function getVersionList(Request $request){
  90. $input=$request->all();
  91. $page_size=$input['page_size'];
  92. $page_index=$input['page_index'];
  93. $num = ($page_index - 1) * $page_size;
  94. $type=$input['type'];
  95. $search_name=$input['search_name'];
  96. $data=Version::query();
  97. if($search_name){
  98. $data->where('version', 'like', '%' . $search_name . '%');
  99. }
  100. if($type!='all'){
  101. $data->where('type',$type);
  102. }
  103. $count=$data->count();
  104. if($count==0){
  105. $this->error('400001','没有数据');
  106. }
  107. $list=$data->orderBy('id', 'desc')
  108. ->skip($num)->take($page_size)->get();
  109. if(empty($list)){
  110. return $this->error('400002','没有获取到数据');
  111. }
  112. return $this->success_list($list,'success',$count);
  113. }
  114. //上传安装包
  115. // public function uploadAppVersion(Request $request){
  116. // $path = $request->file('file')->store('/app/versions');
  117. // $url = Storage::url($path);
  118. // if($url){
  119. // return $this->success($url);
  120. // }
  121. // return $this->error();
  122. // }
  123. public function uploadAppVersion(Request $request)
  124. {
  125. //上传文件
  126. if (!$request->hasFile('file')) {
  127. return $this->error('450001','请上传文件');
  128. }
  129. //设置文件后缀白名单
  130. $allowExt = ["apk"];
  131. //设置存储目录
  132. $tmpPath = '/storage/version/';
  133. Log::info($tmpPath);
  134. // 绝对路径
  135. $dirPath = public_path($tmpPath);
  136. Log::info($dirPath);
  137. //如果目标目录不能创建
  138. if (!is_dir($dirPath) && !mkdir($dirPath, 0777, true)) {
  139. return $this->error('450001','上传目录没有创建文件夹权限');
  140. }
  141. //如果目标目录没有写入权限
  142. if (is_dir($dirPath) && !is_writable($dirPath)) {
  143. return $this->error('450001','上传目录没有写入权限');
  144. }
  145. //获取文件
  146. $file = $request->file('file');
  147. //校验文件
  148. if (!isset($file) || !$file->isValid()) {
  149. return $this->error('450001','上传失败');
  150. }
  151. $ext = $file->getClientOriginalExtension(); //上传文件的后缀
  152. //判断是否是Excel
  153. if (empty($ext) || !in_array(strtolower($ext), $allowExt)) {
  154. return $this->error('450001','不允许的文件类型');
  155. }
  156. //生成文件名
  157. $fileName = uniqid(mt_rand('100','999')) . '.' . $ext;
  158. Log::info($fileName);
  159. try {
  160. //存储文件
  161. $file->move($dirPath, $fileName);
  162. // 获取文件路径
  163. $filename = $dirPath . '/' . $fileName;
  164. if (!is_file($filename)) {
  165. return $this->error('450001','未找到该文件');
  166. }
  167. $url = Storage::url('/version/' . $fileName);
  168. return $this->success($url);
  169. } catch (\Exception $ex) {
  170. return $this->error('450001',$ex->getMessage());
  171. }
  172. }
  173. //添加app版本信息
  174. public function uploadVersion(Request $request){
  175. $input=$request->all();
  176. if($input['type']==1){
  177. $ver='安卓系统';
  178. }else{
  179. $ver='IOS系统';
  180. }
  181. if(Version::where('version',$input['version'])->where('type',$input['type'])->exists()){
  182. return $this->error('450001',$ver.'已存在该版本号');
  183. }
  184. if(Version::where('code',$input['code'])->where('type',$input['type'])->exists()){
  185. return $this->error('450001',$ver.'已存在该版本code');
  186. }
  187. $data['version']=$input['version'];
  188. $data['status']=1;
  189. $data['code']=$input['code'];
  190. $data['type']=$input['type'];
  191. $data['is_force']=$input['is_force'];
  192. $data['url']=$input['url'];
  193. $data['message']=$input['message'];
  194. $data['md5']=md5_file($input['url']);
  195. $row=Version::create($data);
  196. if($row){
  197. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加app版本成功,app版本id:'.$row->id);
  198. return $this->success([]);
  199. }
  200. return $this->error();
  201. }
  202. //修改app版本信息
  203. public function updateVersion(Request $request){
  204. $input=$request->all();
  205. if($input['type']==1){
  206. $ver='安卓系统';
  207. }else{
  208. $ver='IOS系统';
  209. }
  210. if(Version::where('id','!=',$input['id'])->where('version',$input['version'])->where('type',$input['type'])->exists()){
  211. return $this->error('450001',$ver.'已存在该版本号');
  212. }
  213. if(Version::where('id','!=',$input['id'])->where('code',$input['code'])->where('type',$input['type'])->exists()){
  214. return $this->error('450001',$ver.'已存在该版本code');
  215. }
  216. $data['version']=$input['version'];
  217. $data['url']=$input['url'];
  218. $data['code']=$input['code'];
  219. $data['type']=$input['type'];
  220. $data['is_force']=$input['is_force'];
  221. $data['message']=$input['message'];
  222. $data['md5']=md5_file($input['url']);
  223. $row=Version::where('id',$input['id'])->update($data);
  224. if($row){
  225. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改app版本成功,app版本id:'.$input['id']);
  226. return $this->success([]);
  227. }
  228. return $this->error();
  229. }
  230. /* app版本上线 */
  231. public function setVersionTop(Request $request){
  232. $input=$request->all();
  233. $version=Version::find($input['id']);
  234. Version::where('status',0)->where('type',$version->type)->update(['status'=>'1']);
  235. $row=Version::where('id',$input['id'])->update(['status'=>'0']);
  236. if($version->type==1){
  237. $ver='安卓系统';
  238. }else{
  239. $ver='IOS系统';
  240. }
  241. if($row){
  242. $message['title']=$ver.'APP新版更新';
  243. $message['type']='1';
  244. $message['data']=$ver.'APP新版更新,最新版本号:'.$version->version;
  245. $message['status']='0';
  246. Message::create($message);
  247. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')操作'.$ver.'app版本('.$version->version.')上线成功,app版本id:'.$input['id']);
  248. return $this->success([]);
  249. } else {
  250. return $this->error();
  251. }
  252. }
  253. //删除app版本信息
  254. public function destoryVersion(Request $request){
  255. $input=$request->all();
  256. $info=Version::find($input['id']);
  257. $row=$info->delete();
  258. if($row){
  259. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')删除app版本成功,app版本id:'.$input['id']);
  260. return $this->success([]);
  261. }
  262. return $this->error();
  263. }
  264. public function send_orders(Request $request){
  265. $file = $request->file('file');
  266. if ( !$file->isValid()) { //判断文件是否有效
  267. return redirect()
  268. ->back()
  269. ->withErrors('文件上传失败,请重新上传');
  270. }
  271. $array = Excel::toArray(new ExpressImport, request()->file('file'));
  272. if(count($array)>10001){
  273. return $this->error('450001',"单次最多导入10000条数据");
  274. }
  275. $one = array_shift($array[0]);
  276. $express_num_keys=array_search('快递单号',$one);
  277. if(!$express_num_keys && !is_numeric($express_num_keys)){
  278. return $this->error('450001',"表头无'快递单号'字段");
  279. }
  280. $arr=array_column($array[0],$express_num_keys);
  281. $time=Carbon::now()->toDateTimeString();
  282. $time1=Carbon::now()->timestamp;
  283. $file = $request->file('file');
  284. if ( !$file->isValid()) { //判断文件是否有效
  285. return redirect()
  286. ->back()
  287. ->withErrors('文件上传失败,请重新上传');
  288. }
  289. // if( $file->getClientOriginalExtension() != 'xlsx' && $file->getClientOriginalExtension() != 'xls' ) {
  290. // return $this->error( 450001 , '上传文件类型错误,文件后缀为 xlsx 或 xls' );
  291. // }
  292. // $aa=Excel::import(new ExpressImport, request()->file('file'));
  293. $array = Excel::toArray(new ExpressImport, request()->file('file'));
  294. if(count($array)>5001){
  295. return $this->error('450001',"单次最多导入5000条数据");
  296. }
  297. $newArr=[];
  298. $one = array_shift($array[0]);
  299. $express_num_keys=array_search('快递单号',$one);
  300. if(!$express_num_keys){
  301. return $this->error('450001',"表头无'快递单号'字段");
  302. }
  303. $order_num_keys=array_search('订单编号',$one);
  304. if(!$express_num_keys){
  305. return $this->error('450001',"表头无'订单编号'字段");
  306. }
  307. $express_total=array_search('数据求和',$one);
  308. if(!$express_total){
  309. return $this->error('450001',"表头无'数据求和'字段");
  310. }
  311. $express_com_keys=array_search('快递公司',$one);
  312. if(!$express_num_keys){
  313. return $this->error('450001',"表头无'快递公司'字段");
  314. }
  315. $express_status_keys=array_search('发货状态',$one);
  316. if(!$express_status_keys){
  317. return $this->error('450001',"表头无'发货状态'字段");
  318. }
  319. $remark_keys=array_search('备注',$one);
  320. if(!$remark_keys){
  321. return $this->error('450001',"表头无'备注'字段");
  322. }
  323. $F_XL_SIZE=array_search('女4XL',$one);
  324. if(!$F_XL_SIZE){
  325. $l_keys=array_search('L',$one);
  326. $xl_keys=array_search('XL',$one);
  327. $xxl_keys=array_search('XXL',$one);
  328. $xxxl_keys=array_search('XXXL',$one);
  329. $vm_keys=array_search('女M',$one);
  330. $vl_keys=array_search('女L',$one);
  331. $vxl_keys=array_search('女XL',$one);
  332. $vxxl_keys=array_search('女XXL',$one);
  333. $vxxxl_keys=array_search('女XXXL',$one);
  334. $wxl_keys=array_search('5XL',$one);
  335. $keys=[$l_keys,$xl_keys,$xxl_keys,$xxxl_keys,$vm_keys,$vl_keys,$vxl_keys,$vxxl_keys,$vxxxl_keys,$wxl_keys];
  336. }else{
  337. $vxxxl_keys=array_search('4XL',$one);
  338. $wxl_keys=array_search('5XL',$one);
  339. $vxl_keys=array_search('女3XL',$one);
  340. $vxxl_keys=array_search('女4XL',$one);
  341. $keys=[$vxxxl_keys,$wxl_keys,$vxl_keys,$vxxl_keys];
  342. }
  343. $express_code=['中通快递'=>'ZTO','中通快运'=>'ZTOKY','德邦快递'=>'DBL','德邦物流'=>'DBL','邮政'=>'EMS','韵达快递'=>'YD'];
  344. $arres=[];
  345. $o=0;
  346. $new_arr=[];
  347. $z=0;
  348. foreach ($array[0] as $k=>$v){
  349. $st='';
  350. if ($v[$express_com_keys]!='中通快运'){
  351. $arres[$o]=$v;
  352. if ($v[$express_com_keys]=='中通快递'){
  353. $patterns = "/\d+/";
  354. preg_match_all($patterns,$v[$express_num_keys],$aa);
  355. foreach ($aa[0] as $kee=>$vaa){
  356. $st.=$vaa;
  357. }
  358. $new_arr[$z]=$st;
  359. }else{
  360. $new_arr[$z]=$v[$express_num_keys];
  361. }
  362. $z++;
  363. }
  364. }
  365. $res=Express::whereIn('express_number',$new_arr)->pluck('express_number')->toArray();
  366. if (count($res)>0){
  367. $ar_r=array_intersect($new_arr,$res);
  368. $que_express_str=implode(',',$ar_r);
  369. // return $this->error('450001','快递单号:'.$que_express_str.'已经上传',$ar_r);
  370. }
  371. // foreach ($array[0] as $k=>$v){
  372. // if ($v[$express_com_keys]!='中通快运'){
  373. // $new_arr[$z]=$v[$express_num_keys];
  374. // $z++;
  375. // }
  376. // }
  377. $express_nums=array_column($arres,$express_num_keys);
  378. $unique_express_nums=array_unique($express_nums);
  379. $que_express_nums=array_diff_assoc($express_nums,$unique_express_nums);
  380. if(count($que_express_nums)>0){
  381. $que_express_str=implode(',',$que_express_nums);
  382. return $this->error('450001','快递单号'.$que_express_str.'重复出现');
  383. }
  384. $statusArr=[];$arr=[];
  385. $area_list=[];
  386. $order_num=[];
  387. foreach ($array[0] as $key => $value) {
  388. $order_num[]=$value[0];
  389. $area_list[$value[0]][] = $value;
  390. }
  391. $order_num=array_values(array_unique($order_num));
  392. $order=Ordertest::whereIn('order_num',$order_num)->whereNotIn('status',[0,1])->pluck('order_num')->toArray();
  393. if (count($order_num)!=count($order)){
  394. $arrss=array_values(array_diff($order_num,$order));
  395. if ($arrss){
  396. return $this->error(200154,'订单编号为:'.implode(',',$arrss).'的订单状态不正确');
  397. }
  398. }
  399. $is=0;
  400. //将表格中的数据以订单号为键值生成对应的数组
  401. foreach ($area_list as $k=>$v){
  402. $arr_order[$is]['order_num']=$k;
  403. $arr_order[$is]['express_code']=$v[0][$express_num_keys];
  404. $arr_order[$is]['express_com']=$v[0][$express_com_keys];
  405. $is++;
  406. }
  407. DB::beginTransaction();
  408. try {
  409. foreach ($array[0] as $key => $val) {
  410. $statusArr[$val[$order_num_keys]][] = $val[$express_status_keys];
  411. $arr[$val[$order_num_keys]] = array_unique($statusArr[$val[$order_num_keys]]);
  412. if (count($arr[$val[$order_num_keys]]) > 1) {
  413. return $this->error('450001', '第' . ($key + 2) . '行附近,订单编号:' . $val[$order_num_keys] . '发货状态不一致');
  414. }
  415. if (empty($val[$order_num_keys])) {
  416. return $this->error('450001', '第' . ($key + 2) . '行附近,订单编号为空');
  417. }
  418. // $order = Ordertest::where('order_num', $val[$order_num_keys])->first();
  419. // if (empty($order)) {
  420. // return $this->error('450001', '第' . ($key + 2) . '行附近,订单编号:' . $val[$order_num_keys] . '订单信息不存在');
  421. // }
  422. // if ($order->status == 0 || $order->status == 1) {
  423. // return $this->error(450001, '第' . ($key + 2) . '行附近,订单编号:' . $val[$order_num_keys] . '的订单处于待订单审核或者待财务审核状态中');
  424. // }
  425. if (empty($val[$express_total])) {
  426. return $this->error('450001', '第' . ($key + 2) . '行附近,数据求和为空');
  427. }
  428. if (empty($val[$express_num_keys])) {
  429. return $this->error('450001', '第' . ($key + 2) . '行附近,快递单号为空');
  430. }
  431. if (empty($val[$express_com_keys])) {
  432. return $this->error('450001', '第' . ($key + 2) . '行附近,快递公司为空');
  433. }
  434. if (empty($express_code[$val[$express_com_keys]])) {
  435. return $this->error('450001', '第' . ($key + 2) . '行附近,快递公司名称有误');
  436. }
  437. if ($express_com_keys=='中通快运'){
  438. $express = Express::where('express_number', $val[$express_num_keys])->where('created_at','<',$time)->first();
  439. if ($express) {
  440. return $this->error('450001', '第' . ($key + 2) . '行附近,快递单号:' . $val[$express_num_keys] . '物流信息已存在');
  441. }
  442. }else{
  443. $express = Express::where('express_number', $val[$express_num_keys])->first();
  444. if ($express) {
  445. return $this->error('450001', '第' . ($key + 2) . '行附近,快递单号:' . $val[$express_num_keys] . '物流信息已存在');
  446. }
  447. }
  448. }
  449. // return $this->success((Carbon::now()->timestamp)-$time1);
  450. $i=0;
  451. $ks=0;
  452. $d=[];
  453. foreach ($area_list as $ke=>$va){
  454. $time2=Carbon::now()->timestamp;
  455. $order=Ordertest::where('order_num',$ke)->first();
  456. // $number=Express::where('order_id',$order->id)->where('is_gift',0)->groupBy('number')->get()->count();
  457. // $count=Express::where('order_id',$order->id)->where('is_gift',0)->count();
  458. $total=Express::where('order_id',$order->id)->where('is_gift',0)->sum('total');
  459. // foreach ($va as $key=>$val){
  460. // $total_new=0;
  461. // $exp=new Express();
  462. // if (!empty($newArr[$i]['note'])) {
  463. // $exp->note = $newArr[$i]['note'] . ',';
  464. // } else {
  465. // $exp->note = '';
  466. // }
  467. // $exp->order_id = $order->id;
  468. // $exp->user_id = $order->user_id;
  469. // if ($val[$express_com_keys]=='中通快递'){
  470. // $patterns = "/\d+/";
  471. // $st='';
  472. // preg_match_all($patterns,$val[$express_num_keys],$aa);
  473. // foreach ($aa[0] as $kee=>$vaa){
  474. // $st.=$vaa;
  475. // }
  476. // $exp->express_number=$st;
  477. // }else{
  478. // $exp->express_number = $val[$express_num_keys];
  479. // }
  480. //
  481. // if ($val[$express_com_keys]=='邮政'){
  482. // $exp->express_com = $val[$express_com_keys].'EMS';
  483. // }else{
  484. // $exp->express_com = $val[$express_com_keys];
  485. // }
  486. //
  487. // $exp->express_code = $express_code[$val[$express_com_keys]];
  488. // $exp->remark = $val[$remark_keys];
  489. // $data = '';
  490. // $datas=[];
  491. // $l=0;
  492. //// foreach ($keys as $k => $v) {
  493. //// if (!empty($val[$v])) {
  494. //// if (empty($data)) {
  495. //// $data .= $one[$v] . ':' . $val[$v];
  496. //// } else {
  497. //// $data .= '+' . $one[$v] . ':' . $val[$v];
  498. //// }
  499. //// $nums=mb_strlen($val[$v]);
  500. //// if ($nums==2){
  501. //// $re=mb_strstr($val[$v],'精');
  502. //// if ($re){
  503. //// $n=mb_strlen($val[$v]);
  504. //// $num=mb_substr($val[$v],0,$n-1);
  505. //// $kuan='精装版';
  506. //// $ku=0;
  507. //// }else{
  508. //// $re=mb_strstr($val[$v],'简');
  509. //// if ($re){
  510. //// $n=mb_strlen($val[$v]);
  511. //// $num=mb_substr($val[$v],0,$n-1);
  512. //// $kuan='简约版';
  513. //// $ku=1;
  514. //// }else{
  515. //// $re=mb_strstr($val[$v],'棉');
  516. //// if ($re){
  517. //// $n=mb_strlen($val[$v]);
  518. //// $num=mb_substr($val[$v],0,$n-1);
  519. //// $kuan='棉老版';
  520. //// $ku=3;
  521. //// }else{
  522. //// $re=mb_strstr($val[$v],'老');
  523. //// if ($re){
  524. //// $n=mb_strlen($val[$v]);
  525. //// $num=mb_substr($val[$v],0,$n-1);
  526. //// $kuan='老人版';
  527. //// $ku=2;
  528. //// }else{
  529. //// return $this->error(50021,'尺码不对','');
  530. //// }
  531. //// }
  532. //// }
  533. //// }
  534. //// if (!$F_XL_SIZE){
  535. //// if ($k<=3){
  536. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$num,'kuan'=>$kuan,'ku'=>$ku];
  537. //// $total+=$num;
  538. //// $total_new+=$num;
  539. //// }else{
  540. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$num,'kuna'=>$kuan,'ku'=>$ku];
  541. //// $total+=$num;
  542. //// $total_new+=$num;
  543. //// }
  544. //// }else{
  545. //// if ($k<=1){
  546. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$num,'kuan'=>$kuan,'ku'=>$ku];
  547. //// $total+=$num;
  548. //// $total_new+=$num;
  549. //// }else{
  550. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$num,'kuna'=>$kuan,'ku'=>$ku];
  551. //// $total+=$num;
  552. //// $total_new+=$num;
  553. //// }
  554. //// }
  555. ////
  556. //// $l++;
  557. //// $count++;
  558. //// }else{
  559. //// if ($nums%2!=0){
  560. //// $re_1=mb_strstr($val[$v],'精');
  561. //// if ($re_1){
  562. //// $numss=mb_strlen($re_1);
  563. //// $aa=mb_substr($val[$v],$nums-$numss-2,2);
  564. //// if (!is_numeric($aa)){
  565. //// return $this->error(500024,'尺码对应的数量不对,请核对数量0',[$val[$v]]);
  566. //// }
  567. //// if (!$F_XL_SIZE){
  568. //// if ($k<=3){
  569. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'精装版','ku'=>0];
  570. //// $total+=$aa;
  571. //// $total_new+=$aa;
  572. //// }else{
  573. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'精装版','ku'=>0];
  574. //// $total+=$aa;
  575. //// $total_new+=$aa;
  576. //// }
  577. //// }else{
  578. //// if ($k<=1){
  579. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'精装版','ku'=>0];
  580. //// $total+=$aa;
  581. //// $total_new+=$aa;
  582. //// }else{
  583. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'精装版','ku'=>0];
  584. //// $total+=$aa;
  585. //// $total_new+=$aa;
  586. //// }
  587. //// }
  588. ////
  589. //// $l++;
  590. //// $count++;
  591. //// }
  592. //// }else{
  593. //// $re_1=mb_strstr($val[$v],'精');
  594. //// if ($re_1){
  595. //// $numss=mb_strlen($re_1);
  596. //// $aa=mb_substr($val[$v],$nums-$numss-1,1);
  597. //// if (!is_numeric($aa)){
  598. //// return $this->error(500024,'尺码对应的数量不对,请核对数量1');
  599. //// }
  600. //// if (!$F_XL_SIZE){
  601. //// if ($k<=3){
  602. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'精装版','ku'=>0];
  603. //// $total+=$aa;
  604. //// $total_new+=$aa;
  605. //// }else{
  606. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'精装版','ku'=>0];
  607. //// $total+=$aa;
  608. //// $total_new+=$aa;
  609. //// }
  610. //// }else{
  611. //// if ($k<=1){
  612. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'精装版','ku'=>0];
  613. //// $total+=$aa;
  614. //// $total_new+=$aa;
  615. //// }else{
  616. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'精装版','ku'=>0];
  617. //// $total+=$aa;
  618. //// $total_new+=$aa;
  619. //// }
  620. //// }
  621. ////
  622. //// $l++;
  623. //// $count++;
  624. //// }
  625. //// }
  626. ////
  627. //// $re_2=mb_strstr($val[$v],'简');
  628. //// if ($re_2){
  629. //// $numss=mb_strlen($re_2);
  630. //// $aa=mb_substr($val[$v],$nums-$numss-1,1);
  631. //// if (!is_numeric($aa)){
  632. //// return $this->error(500024,'尺码对应的数量不对,请核对数量2'.$aa);
  633. //// }
  634. //// if (!$F_XL_SIZE){
  635. //// if ($k<=3){
  636. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'简约版','ku'=>1];
  637. //// $total+=$aa;
  638. //// $total_new+=$aa;
  639. //// }else{
  640. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'简约版','ku'=>1];
  641. //// $total+=$aa;
  642. //// $total_new+=$aa;
  643. //// }
  644. //// }else{
  645. //// if ($k<=1){
  646. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'简约版','ku'=>1];
  647. //// $total+=$aa;
  648. //// $total_new+=$aa;
  649. //// }else{
  650. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'简约版','ku'=>1];
  651. //// $total+=$aa;
  652. //// $total_new+=$aa;
  653. //// }
  654. //// }
  655. ////
  656. //// $l++;
  657. //// $count++;
  658. //// }
  659. //// $re_3=mb_strstr($val[$v],'老');
  660. //// if ($re_3){
  661. //// $numss=mb_strlen($re_3);
  662. //// $aa=mb_substr($val[$v],$nums-$numss-1,1);
  663. //// if (!is_numeric($aa)){
  664. //// return $this->error(500024,'尺码对应的数量不对,请核对数量3'.$val[$v]);
  665. //// }
  666. //// if (!$F_XL_SIZE){
  667. //// if ($k<=3){
  668. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'老人版','ku'=>2];
  669. //// $total+=$aa;
  670. //// $total_new+=$aa;
  671. //// }else{
  672. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'老人版','ku'=>2];
  673. //// $total+=$aa;
  674. //// $total_new+=$aa;
  675. //// }
  676. //// }else{
  677. //// if ($k<=1){
  678. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'老人版','ku'=>2];
  679. //// $total+=$aa;
  680. //// $total_new+=$aa;
  681. //// }else{
  682. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'老人版','ku'=>2];
  683. //// $total+=$aa;
  684. //// $total_new+=$aa;
  685. //// }
  686. //// }
  687. ////
  688. //// $l++;
  689. //// $count++;
  690. //// }
  691. //// $re_4=mb_strstr($val[$v],'棉');
  692. //// if ($re_4){
  693. //// $numss=mb_strlen($re_4);
  694. //// $aa=mb_substr($val[$v],$nums-$numss-1,1);
  695. //// if (!is_numeric($aa)){
  696. //// return $this->error(500024,'尺码对应的数量不对,请核对数量4');
  697. //// }
  698. //// if (!$F_XL_SIZE){
  699. //// if ($k<=3){
  700. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'棉老版','ku'=>3];
  701. //// $total+=$aa;
  702. //// $total_new+=$aa;
  703. //// }else{
  704. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'棉老版','ku'=>3];
  705. //// $total+=$aa;
  706. //// $total_new+=$aa;
  707. //// }
  708. //// }else{
  709. //// if ($k<=1){
  710. //// $datas[$l]=['sex'=>'男款','sexs'=>1,'size'=>$one[$v],'num'=>$aa,'kuan'=>'棉老版','ku'=>3];
  711. //// $total+=$aa;
  712. //// $total_new+=$aa;
  713. //// }else{
  714. //// $datas[$l]=['sex'=>'女款','sexs'=>0,'size'=>mb_substr($one[$v],1),'num'=>$aa,'kuna'=>'棉老版','ku'=>3];
  715. //// $total+=$aa;
  716. //// $total_new+=$aa;
  717. //// }
  718. //// }
  719. ////
  720. //// $l++;
  721. //// $count++;
  722. //// }
  723. ////
  724. //// if (!$re_1&&!$re_2&&!$re_3&&!$re_4){
  725. //// return $this->error(522201,'尺码对应的数量信息不正确'.$val[$v],[$v]);
  726. //// }
  727. //// }
  728. ////
  729. //// }
  730. //// }
  731. //
  732. // $exp->note .= $data;
  733. // $exp->notes = json_encode($datas);
  734. // $exp->status = 0;
  735. // $exp->number = $number+1;
  736. // $exp->count = $key+1;
  737. // $exp->total = $total_new;
  738. // if (!$exp->save()){
  739. // throw new \Exception(1);
  740. // }
  741. // foreach ($datas as $kes=>$vals){
  742. // $es=new ExpressStorage();
  743. // $str_count=substr_count($vals['size'],'X');
  744. // if ($str_count>=2){
  745. // $vals['size']=$str_count.'XL';
  746. // }
  747. // $es->user_id=$order->good_user_id;
  748. // $es->express_id=$exp->id;
  749. // $es->sex=$vals['sexs'];
  750. // $es->size=$vals['size'];
  751. // $es->num=$vals['num'];
  752. // $es->type=$vals['ku'];
  753. // if (!$es->save()){
  754. // throw new \Exception(1);
  755. // }
  756. // }
  757. // }
  758. $totals=0;
  759. $str='';
  760. foreach ($va as $k=>$v){
  761. foreach ($keys as $key=>$val){
  762. $str.=$v[$val];
  763. }
  764. }
  765. $patterns = "/\d+/";
  766. preg_match_all($patterns,$str,$aa);
  767. foreach ($aa[0] as $k=>$v){
  768. $totals+=$v;
  769. }
  770. $total+=$totals;
  771. if ($total==$order->total){
  772. $order->track_status=2;
  773. }elseif ($total<$order->total){
  774. $order->track_status=1;
  775. }else{
  776. return $this->error(52201,$ke.'数量出错了');
  777. }
  778. // $order->number+=$count;
  779. // $order->save();
  780. }
  781. // Log::error($newArr);
  782. // Express::insert($newArr);
  783. DB::commit();
  784. return $this->success([]);
  785. }catch(\Exception $e){
  786. DB::rollBack();
  787. Log::error($e);
  788. return $this->error(5001,$e->getMessage());
  789. }
  790. }
  791. }