Purchase.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. <?php
  2. namespace app\data\controller\api\business;
  3. use app\data\model\DataUser;
  4. use app\data\model\DataUserLeaveMessage;
  5. use app\data\model\ShopCoordination;
  6. use app\data\model\ShopCoordinationItem;
  7. use app\data\model\ShopOcean;
  8. use app\data\model\ShopOceanItem;
  9. use app\data\model\ShopProduction;
  10. use app\data\model\ShopProductionItem;
  11. use app\data\model\ShopPurchase;
  12. use app\data\model\ShopPurchaseItem;
  13. use app\data\model\ShopPurchaseOffer;
  14. use app\data\model\ShopPurchaseOfferAmount;
  15. use app\data\model\SystemUser;
  16. use think\admin\Controller;
  17. use think\Exception;
  18. use think\exception\ErrorException;
  19. use think\facade\Db;
  20. use hg\apidoc\annotation\Title;
  21. use hg\apidoc\annotation\Method;
  22. use hg\apidoc\annotation\Param;
  23. use hg\apidoc\annotation\Returned;
  24. use think\facade\Validate;
  25. use think\Request;
  26. /**
  27. * 商家端发布订单
  28. * Class Goods
  29. * @package app\data\controller\api
  30. */
  31. class Purchase extends Controller
  32. {
  33. /**
  34. * @Title ("采购订单发布和编辑")
  35. * @Method ("post")
  36. * @Param ("id",desc="如果是编辑则传ID")
  37. * @Param ("real_name",desc="联系人")
  38. * @Param ("mobile",desc="联系方式")
  39. * @Param ("post_time",desc="交货时间")
  40. * @Param ("post_address",desc="交货地址")
  41. * @Param ("images",desc="图片数组,[{type:'image或video',src:'http://xxxxx'}]")
  42. * @Param ("item",desc="['id:修改则传ID','name 商品名称','spec 规格','number 数量','standard 验收标准','price 价格']")
  43. * @return void
  44. */
  45. public function purchase_order(\think\Validate $validate,Request $request){
  46. print_r('post.');
  47. exit;
  48. $request->offsetSet('images',json_decode($request['images'],true)?:[]);
  49. $request->offsetSet('item',json_decode($request['item'],true)?:[]);
  50. $admin_id = $this->uuid();
  51. $data=$this->_vali([
  52. 'real_name.require'=>'联系人不能为空',
  53. 'mobile.require'=>'联系方式不能为空',
  54. 'post_time.require'=>'交货时间不能为空',
  55. 'post_address.require'=>'交货单地址不能为空',
  56. // 'images.require'=>'图片不能为空',
  57. // 'images.array'=>'图片格式有误',
  58. // 'images.min:1'=>'图片必须',
  59. 'item.require'=>'商品参数不能为空',
  60. ]);
  61. input('images')?$data['images']=input('images'):'';
  62. if($data['images']){
  63. $data['images'] = json_decode($request['images'],true);
  64. foreach ($data['images'] as $image){
  65. $validate->failException()->check($image,[
  66. 'type|图片类型'=>['require','in:image,video'],
  67. 'src|图片链接'=>['require','url'],
  68. ]);
  69. }
  70. }
  71. $data['item'] = json_decode($request['item'],true);
  72. foreach ($data['item'] as $item){
  73. $validate->failException()->check($item,[
  74. 'name|名称'=>['require'],
  75. 'spec|规格'=>['require'],
  76. 'number|数量'=>['require','integer'],
  77. // 'standard|验收标准'=>['require'],
  78. // 'price|价格'=>['require','float'],
  79. ]);
  80. }
  81. // print_r($data);
  82. // exit;
  83. $purchase_data = [
  84. 'admin_id'=>$admin_id->id,
  85. 'real_name'=>$data['real_name'],
  86. 'mobile'=>$data['mobile'],
  87. 'images'=>$data['images'],
  88. 'post_time'=>$data['post_time'],
  89. 'post_address'=>$data['post_address'],
  90. 'create_time'=>date('Y-m-d H:i:s'),
  91. 'longitude'=>$admin_id->merchant->longitude,
  92. 'latitude'=>$admin_id->merchant->latitude,
  93. 'amount'=>min(array_column($data['item'],'price')),
  94. ];
  95. Db::startTrans();
  96. try {
  97. if($request['id']){
  98. $order_id=ShopPurchase::where('admin_id',$admin_id['id'])->where('id',$request['id'])->findOrFail();
  99. $order_id->save($purchase_data);
  100. }else {
  101. $order_id = ShopPurchase::create($purchase_data);
  102. }
  103. $item_ids=[];
  104. foreach ($data['item'] as &$v){
  105. $item_data = [
  106. 'purchase_id'=>$order_id['id'],
  107. 'name'=>$v['name'],
  108. 'spec'=>$v['spec'],
  109. 'number'=>$v['number'],
  110. 'standard'=>$v['standard'],
  111. 'price'=>$v['price'],
  112. ];
  113. if(!empty($v['id'])){
  114. $itemModel=$order_id->items()->where('id',$v['id'])->find();
  115. if(!$itemModel){
  116. $this->error('商品不存在');
  117. }
  118. $itemModel->save($item_data);
  119. }else{
  120. $itemModel=$order_id->items()->save($item_data);
  121. }
  122. $item_ids[]=$itemModel['id'];
  123. }
  124. $order_id->items()->whereNotIn('id',$item_ids)->select()->each(function ($d){$d->delete();});
  125. ShopPurchaseOffer::where('order_id',$order_id['id'])
  126. ->whereNotIn('item_id',$item_ids)
  127. ->select()->each(function ($m){$m->delete();});
  128. // 提交事务
  129. Db::commit();
  130. $this->success('采购订单发布成功');
  131. } catch (ErrorException $e) {
  132. // 回滚事务
  133. Db::rollback();
  134. $this->error('发布失败');
  135. }
  136. }
  137. /**
  138. * @Title ("生产订单发布或编辑")
  139. * @Method ("post")
  140. * @Param ("id",desc="如果是编辑则传ID")
  141. * @Param ("real_name",desc="联系人")
  142. * @Param ("mobile",desc="联系方式")
  143. * @Param ("standard_tech",desc="生产技术标准")
  144. * @Param ("standard_check",desc="生产验收标准")
  145. * @Param ("post_time",desc="交货时间")
  146. * @Param ("post_address",desc="交货地址")
  147. * @Param ("file",desc="图片/视频,[{type:'image或video',src:'http://xxxxx'}]")
  148. * @Param ("item",desc="二维数组,[{'id:修改则传ID',name:'产品名称',spec:'规格',number:'数量',enclosure:[{filename:'文件名',fileurl:'文件链接'}]}]")
  149. * @return void
  150. */
  151. public function production_order(\think\Validate $validate,Request $request){
  152. $admin_id = $this->uuid();
  153. $request->offsetSet('file',json_decode($request['file'],true)?:[]);
  154. $request->offsetSet('item',json_decode($request['item'],true)?:[]);
  155. $data=$this->_vali([
  156. 'real_name.require'=>'联系人不能为空',
  157. 'mobile.require'=>'联系方式不能为空',
  158. 'standard_tech.require'=>'生产技术标准必须',
  159. 'standard_check.require'=>'生产验收标准必须',
  160. 'post_time.require'=>'交货时间不能为空',
  161. 'post_address.require'=>'交货单地址不能为空',
  162. 'item.require'=>'商品参数不能为空',
  163. //'file.array'=>'图片视频有误',
  164. ]);
  165. $data['file'] = json_decode($request['file'],true);
  166. $data['item'] = json_decode($request['item'],true);
  167. foreach ($data['file']??[] as $image){
  168. $validate->failException()->check($image,[
  169. 'type|图片类型'=>['require','in:image,video'],
  170. 'src|图片链接'=>['require','url'],
  171. ]);
  172. }
  173. foreach ($data['item'] as $item){
  174. $validate->failException()->check($item,[
  175. 'name|名称'=>['require'],
  176. 'spec|规格'=>['require'],
  177. 'number|数量'=>['require','integer'],
  178. // 'enclosure|附件'=>['array',],
  179. ]);
  180. // if(!empty($item['enclosure'])){
  181. // foreach ($item['enclosure'] as $enclosure){
  182. // $validate->failException()->check($enclosure,[
  183. // 'filename|文件名'=>['require'],
  184. // 'fileurl|文件地址'=>['require','url',],
  185. // ]);
  186. // }
  187. // }
  188. }
  189. $purchase_data = [
  190. 'admin_id'=>$admin_id->id,
  191. 'real_name'=>$data['real_name'],
  192. 'mobile'=>$data['mobile'],
  193. 'standard_tech'=>$data['standard_tech'],
  194. 'standard_check'=>$data['standard_check'],
  195. 'post_time'=>$data['post_time'],
  196. 'post_address'=>$data['post_address'],
  197. 'longitude'=>$admin_id->merchant->longitude,
  198. 'latitude'=>$admin_id->merchant->latitude,
  199. 'create_time'=>date('Y-m-d H:i:s'),
  200. 'file'=>$data['file']??[],
  201. ];
  202. Db::startTrans();
  203. try {
  204. if($request['id']) {
  205. $order=ShopProduction::where('admin_id',$admin_id['id'])->where('id',$request['id'])->findOrFail();
  206. $order->save($purchase_data);
  207. $item_ids=[];
  208. foreach ($data['item'] as $item){
  209. if(!empty($item['id'])){
  210. $itemModel=$order->items()->where('id',$item['id'])->findOrFail();
  211. $itemModel->save($item);
  212. }else{
  213. $itemModel=$order->items()->save($item);
  214. }
  215. $item_ids[]=$itemModel['id'];
  216. }
  217. $order->items()->whereNotIn('id',$item_ids)->select()->each(function ($d){$d->delete();});
  218. }else{
  219. $order = ShopProduction::create($purchase_data);
  220. $order->items()->saveAll($data['item']);
  221. }
  222. // 提交事务
  223. Db::commit();
  224. $this->success('订单已发布');
  225. } catch (ErrorException $e) {
  226. // 回滚事务
  227. Db::rollback();
  228. $this->success('发布失败');
  229. }
  230. }
  231. /**
  232. * @Title ("海运订单发布或编辑")
  233. * @Method ("post")
  234. * @Param ("id",desc="如果是编辑则传ID")
  235. * @Param ("real_name",desc="联系人")
  236. * @Param ("mobile",desc="联系方式")
  237. * @Param ("form",desc="包装形式")
  238. * @Param ("wharf_to",desc="装货码头")
  239. * @Param ("wharf_for",desc="交货码头")
  240. * @Param ("file",desc="图片/视频,[{type:'image或video',src:'http://xxxxx'}]")
  241. * @Param ("item",desc="['id:修改则传ID','name 商品名称','weight 重量']")
  242. * @return void
  243. */
  244. public function ocean_order(\think\Validate $validate,Request $request){
  245. $request->offsetSet('file',json_decode($request['file'],true)?:[]);
  246. $request->offsetSet('item',json_decode($request['item'],true)?:[]);
  247. $admin_id = $this->uuid();
  248. $data=$this->_vali([
  249. 'real_name.require'=>'联系人不能为空',
  250. 'mobile.require'=>'联系方式不能为空',
  251. 'form.require'=>'包装形式必须',
  252. 'wharf_to.require'=>'装货码头必须',
  253. 'wharf_for.require'=>'交货码头必须',
  254. // 'file.array'=>'图片必须是数组',
  255. 'item.require'=>'商品必须',
  256. 'item.array'=>'商品必须是数组',
  257. ]);
  258. $data['file'] = json_decode($request['file'],true);
  259. $data['item'] = json_decode($request['item'],true);
  260. foreach ($data['file']??[] as $image){
  261. $validate->failException()->check($image,[
  262. 'type|图片类型'=>['require','in:image,video'],
  263. 'src|图片链接'=>['require','url'],
  264. ]);
  265. }
  266. foreach ($data['item'] as $item){
  267. $validate->failException()->check($item,[
  268. 'name|名称'=>['require'],
  269. 'weight|数量吨位'=>['require','float'],
  270. ]);
  271. }
  272. $purchase_data = [
  273. 'admin_id'=>$admin_id->id,
  274. 'real_name'=>$data['real_name'],
  275. 'mobile'=>$data['mobile'],
  276. 'form'=>$data['form'],
  277. 'wharf_to'=>$data['wharf_to'],
  278. 'wharf_for'=>$data['wharf_for'],
  279. 'file'=>$data['file']??[],
  280. 'longitude'=>$admin_id->merchant->longitude,
  281. 'latitude'=>$admin_id->merchant->latitude,
  282. ];
  283. Db::startTrans();
  284. try {
  285. if($request['id']){
  286. $order_id=ShopOcean::where('admin_id',$admin_id['id'])->where('id',$request['id'])->findOrFail();
  287. $order_id->save($purchase_data);
  288. $item_ids=[];
  289. foreach ($data['item'] as $item){
  290. if(!empty($item['id'])){
  291. $itemModel=$order_id->items()->where('id',$item['id'])->findOrFail();
  292. $itemModel->save($item);
  293. }else{
  294. $itemModel=$order_id->items()->save($item);
  295. }
  296. $item_ids[]=$itemModel['id'];
  297. }
  298. $order_id->items()->whereNotIn('id',$item_ids)->select()->each(function ($d){$d->delete();});
  299. }else {
  300. $order_id = ShopOcean::mk()->create($purchase_data);
  301. $order_id->items()->saveAll($data['item']);
  302. }
  303. // 提交事务
  304. Db::commit();
  305. $this->success('已发布');
  306. } catch (ErrorException $e) {
  307. // 回滚事务
  308. Db::rollback();
  309. $this->success('发布失败');
  310. }
  311. }
  312. /**
  313. * @Title ("外协订单发布或编辑")
  314. * @Method ("post")
  315. * @Param ("id",desc="如果是编辑则传ID")
  316. * @Param ("real_name",desc="联系人")
  317. * @Param ("mobile",desc="联系方式")
  318. * @Param ("standard_tech",desc="生产技术标准")
  319. * @Param ("standard_check",desc="生产验收标准")
  320. * @Param ("post_time",desc="交货时间")
  321. * @Param ("post_address",desc="交货地址")
  322. * @Param ("file",desc="图片/视频,[{type:'image或video',src:'http://xxxxx'}]")
  323. * @Param ("item",desc="二维数组,[{'id:修改则传ID',name:'产品名称',spec:'规格',number:'数量',enclosure:[{filename:'文件名',fileurl:'文件链接'}]}]")
  324. * @return void
  325. */
  326. public function coordination_order(\think\Validate $validate,Request $request){
  327. $request->offsetSet('file',json_decode($request['file'],true)?:[]);
  328. $request->offsetSet('item',json_decode($request['item'],true)?:[]);
  329. $admin_id = $this->uuid();
  330. $data=$this->_vali([
  331. 'real_name.require'=>'联系人不能为空',
  332. 'mobile.require'=>'联系方式不能为空',
  333. 'standard_tech.require'=>'生产技术标准',
  334. 'standard_check.require'=>'生产验收标准',
  335. 'post_time.require'=>'交货时间不能为空',
  336. 'post_address.require'=>'交货单地址不能为空',
  337. 'item.require'=>'商品参数不能为空',
  338. // 'file.array'=>'图片必须是数组',
  339. ]);
  340. $data['file'] = json_decode($request['file'],true);
  341. $data['item'] = json_decode($request['item'],true);
  342. foreach ($data['file']??[] as $image){
  343. $validate->failException()->check($image,[
  344. 'type|图片类型'=>['require','in:image,video'],
  345. 'src|图片链接'=>['require','url'],
  346. ]);
  347. }
  348. foreach ($data['item'] as $item){
  349. $validate->failException()->check($item,[
  350. 'name|名称'=>['require'],
  351. 'spec|规格'=>['require'],
  352. 'number|数量'=>['require','integer'],
  353. // 'enclosure|附件'=>['array',],
  354. ]);
  355. // if(!empty($item['enclosure'])){
  356. // foreach ($item['enclosure'] as $enclosure){
  357. // $validate->failException()->check($enclosure,[
  358. // 'filename|文件名'=>['require'],
  359. // 'fileurl|文件地址'=>['require','url',],
  360. // ]);
  361. // }
  362. // }
  363. }
  364. $purchase_data = [
  365. 'admin_id'=>$admin_id->id,
  366. 'real_name'=>$data['real_name'],
  367. 'mobile'=>$data['mobile'],
  368. 'standard_tech'=>$data['standard_tech'],
  369. 'standard_check'=>$data['standard_check'],
  370. 'post_time'=>$data['post_time'],
  371. 'post_address'=>$data['post_address'],
  372. 'longitude'=>$admin_id->merchant->longitude,
  373. 'latitude'=>$admin_id->merchant->latitude,
  374. 'file'=>$data['file']??[],
  375. 'create_time'=>date('Y-m-d H:i:s')
  376. ];
  377. Db::startTrans();
  378. try {
  379. if($request['id']){
  380. $order=ShopCoordination::where('id',$request['id'])->where('admin_id',$admin_id['id'])->findOrFail();
  381. $order->save($purchase_data);
  382. $item_ids=[];
  383. foreach ($data['item'] as $item){
  384. if(!empty($item['id'])){
  385. $itemModel=$order->items()->where('id',$item['id'])->findOrFail();
  386. $itemModel->save($item);
  387. }else{
  388. $itemModel=$order->items()->save($item);
  389. }
  390. $item_ids[]=$itemModel['id'];
  391. }
  392. $order->items()->whereNotIn('id',$item_ids)->select()->each(function ($d){$d->delete();});
  393. }else {
  394. $order = ShopCoordination::mk()->create($purchase_data);
  395. $order->items()->saveAll($data['item']);
  396. }
  397. // 提交事务
  398. Db::commit();
  399. $this->success('已发布');
  400. } catch (ErrorException $e) {
  401. // 回滚事务
  402. Db::rollback();
  403. $this->success('发布失败');
  404. }
  405. }
  406. public function order_no($key,$uuid){
  407. $time_str = date('YmdHi');
  408. $order_no = $key.$time_str . sprintf("%04d", $uuid);
  409. return $order_no;
  410. }
  411. public function uuid(){
  412. $purchase_model = new Common($this->app);
  413. $uuid = $purchase_model->uuid();
  414. return $uuid;
  415. }
  416. /**
  417. * @Title("采购订单列表")
  418. * @Param ("page",desc="第几页")
  419. * @Param ("limit",desc="每页几条")
  420. * @Param ("status",desc="1未报价2已报价3已匹配")
  421. * @Param ("tab",desc="1采购2生产3外协4海运")
  422. * @Returned("参考用户端采购订单列表")
  423. */
  424. public function list(Request $request){
  425. $status=$request['status'];
  426. $tab=$request['tab']?:1;
  427. $query=ShopPurchase::getQuery($tab);
  428. $list=$query
  429. ->where('admin_id',$this->uuid()->id)
  430. ->when($tab,function ($query) use ($tab){
  431. if ($tab==1){
  432. $query ->with(['items','items.offers']);
  433. }else{
  434. $query ->with(['items','offers']);
  435. }
  436. })
  437. ->when($status,['status'=>$status])
  438. ->order('id','desc')
  439. ->paginate($request['limit']?:15);
  440. $this->success('',$list);
  441. }
  442. /**
  443. *@Title("详情")
  444. * @Param ("tab",desc="1采购2生产3外协4海运")
  445. * @Param ("id",desc="订单ID")
  446. * @Returned("is_matched",desc="是否已匹配")
  447. * @Returned("参考用户端采购订单列表")
  448. */
  449. public function show(Request $request){
  450. DataUser::$copyRealName=true;
  451. $data=$this->_vali([
  452. 'id.require'=>'ID必须',
  453. 'tab.require'=>'tab必须',
  454. ],'get');
  455. if($data['tab']==1) {
  456. $model = ShopPurchase::getQuery($data['tab'])
  457. ->with(['items','items.offers','items.offers.user'])
  458. ->findOrFail($data['id']);
  459. foreach ($model['items'] as &$v){
  460. foreach ($v['offers'] as $aa=>&$a){
  461. if($a['id']!=$v['offer_id'] && $v['offer_id']!=''){
  462. unset($v['offers'][$aa]);
  463. }
  464. $a['amounts'] = ShopPurchaseOfferAmount::mk()
  465. ->where('user_id',$a['user_id'])
  466. ->where('offer_id',$a['id'])
  467. ->order('id asc')
  468. ->select();
  469. }
  470. }
  471. }else{
  472. $model = ShopPurchase::getQuery($data['tab'])
  473. ->with(['items','offers','offers.user'])
  474. ->findOrFail($data['id']);
  475. }
  476. $this->success('',$model);
  477. }
  478. /**
  479. *@Title("取消订单")
  480. * @Param ("tab",desc="1采购2生产3外协4海运")
  481. * @Param ("id",desc="订单ID")
  482. */
  483. public function cancel(Request $request){
  484. $data=$this->_vali([
  485. 'id.require'=>'ID必须',
  486. 'tab.require'=>'tab必须',
  487. ],'get');
  488. $admin=$this->uuid();
  489. $model=ShopPurchase::getQuery($data['tab'])->where('admin_id',$admin['id'])->findOrFail($data['id']);
  490. $model['status']=0;
  491. $model->save();
  492. $this->success('操作成功');
  493. }
  494. /**
  495. *@Title("提醒完成")
  496. * @Param ("user_id",desc="用户ID")
  497. */
  498. public function reminder(Request $request){
  499. $data=$this->_vali([
  500. 'user_id.require'=>'user_id必须'
  501. ],'get');
  502. $alias = DataUser::mk()->where('id',$data['user_id'])->value('jgalias');
  503. $content = '您报价的订单已匹配完成,请及时查看';
  504. $alias ? jgpush($content,$alias) : '';
  505. setusermessage($data['user_id'],'匹配通知',$content);
  506. $this->success('操作成功');
  507. }
  508. /**
  509. * @Title("匹配订单")
  510. * @Method("POST")
  511. * @Param ("tab",desc="1采购2生产3外协4海运")
  512. * @Param ("id",desc="订单ID")
  513. * @Param ("offer_id",desc="接单ID")
  514. */
  515. public function match(Request $request){
  516. $data=$this->_vali([
  517. 'id.require'=>'ID必须',
  518. 'tab.require'=>'tab必须',
  519. 'offer_id.require'=>'offer必须',
  520. ]);
  521. $admin=$this->uuid();
  522. $tab = $data['tab'];
  523. $id = $data['id'];
  524. Db::startTrans();
  525. // $admin['id'] = '10010';
  526. $model=ShopPurchase::getItem($data['tab'],$admin['id'])->lock(true)
  527. ->where(function ($query) use ($tab,$id){
  528. // if ($tab==1){
  529. // $query->where('purchase_id',$id);
  530. // }else{
  531. $query->where('id',$id);
  532. // }
  533. })
  534. ->findOrEmpty();
  535. $model_id = $model['id'];
  536. //dump($model->toArray());die;
  537. if($model['is_matched']){
  538. Db::rollback();
  539. $this->error('该订单已匹配');
  540. }
  541. // $hasMatch=ShopPurchase::getItem($data['tab'])->where('offer_id',$data['offer_id'])->value('id');
  542. $hasMatch=ShopPurchase::getItem($data['tab'])->where('id',$data['id'])->value('offer_id');
  543. if($hasMatch){
  544. Db::rollback();
  545. $this->error('该接单已被其他订单匹配');
  546. }
  547. $offer=ShopPurchase::getOffer($data['tab'])->lock(true)
  548. // ->where('user_id',$data['offer_id'])
  549. ->when($tab,function ($querys) use ($tab,$model_id){
  550. switch ($tab){
  551. case 1:
  552. $querys->where('item_id',$model_id);
  553. break;
  554. case 2:
  555. $querys->where('production_id',$model_id);
  556. break;
  557. case 3:
  558. $querys->where('corrdination_id',$model_id);
  559. break;
  560. case 4:
  561. $querys->where('ocea_id',$model_id);
  562. break;
  563. }
  564. })
  565. ->findOrEmpty();
  566. if($request['tab']==1){
  567. if ($offer->item_id != $model['id']) {
  568. Db::rollback();
  569. $this->error('该接单不属于此订单');
  570. }
  571. }else {
  572. if ($offer->order_id != $model['id']) {
  573. Db::rollback();
  574. $this->error('该接单不属于此订单');
  575. }
  576. }
  577. $model['offer_id']=$data['offer_id'];
  578. if($data['tab']==1){
  579. $main=$model->main;
  580. $main['status']=3;
  581. $main->save();
  582. }else{
  583. $model['status']=3;
  584. }
  585. $model->save();
  586. Db::commit();
  587. $url = setword($data['tab']+1,$data['id']);
  588. ShopPurchase::getItem($data['tab'])->where('id',$model['id'])->update(['down_word'=>$url]);
  589. $this->success('匹配成功');
  590. }
  591. /**
  592. * @Title ("发送留言")
  593. * @Method("post")
  594. * @Param ("id",desc="订单ID")
  595. * @Param ("tab",desc="1采购2生产3外协4海运")
  596. * @Param ("user_id",desc="发送给的用户id")
  597. * @Param ("content",desc="内容")
  598. */
  599. public function msg_send(Request $request){
  600. $this->_vali([
  601. 'id.require'=>'id必须',
  602. 'user_id.require'=>'用户必须',
  603. 'tab.require'=>'tab必须',
  604. 'content.require'=>'tab必须',
  605. 'content.max:500'=>'内容过长',
  606. ]);
  607. $model=ShopPurchase::getQuery($request['tab'])->findOrFail($request['id']);
  608. $user=DataUser::where('id',$request['user_id'])->findOrFail();
  609. $msg=DataUserLeaveMessage::create([
  610. 'uuid'=>$this->uuid()->id,
  611. 'uuid2'=>$user['id'],
  612. 'content'=>$request['content'],
  613. 'type'=>DataUserLeaveMessage::getMsgType($model->getTable()),
  614. 'link_id'=>$model['id'],
  615. ]);
  616. $this->success('发送成功',$msg);
  617. }
  618. /**
  619. * @Title ("留言列表")
  620. * @Param ("id",desc="订单ID")
  621. * @Param ("tab",desc="1采购2生产3外协4海运")
  622. * @Param ("user_id",desc="要查看的用户id")
  623. * @Returned ("user.headimg",desc="用户头像")
  624. * @Returned ("merchant.headimg",desc="商家头像")
  625. * @Returned ("is_mine",desc="是否是自己的留言")
  626. */
  627. public function msg_get(Request $request){
  628. $this->_vali([
  629. 'id.require'=>'id必须',
  630. 'tab.require'=>'tab必须',
  631. ],'get');
  632. $model=ShopPurchase::getQuery($request['tab'])->findOrFail($request['id']);
  633. $admin_id = $model['admin_id'];
  634. $user_id = $request['user_id'];
  635. $messagelist = DataUserLeaveMessage::mk()
  636. ->where('type',DataUserLeaveMessage::getMsgType($model->getTable()))
  637. ->whereRaw("(uuid=$user_id and uuid2=$admin_id) or (uuid2=$user_id and uuid=$admin_id)")
  638. ->where('link_id',$model['id'])
  639. ->field('id,uuid,uuid2,content,create_at')
  640. ->select()->toArray();
  641. $this->success('成功',$messagelist);
  642. }
  643. /**
  644. * @Title("获取订单配置")
  645. * @Returned("packing",desc="包装形式数组")
  646. */
  647. public function config(){
  648. $config=[];
  649. $config['packing']=systemConfig('merchant_config.packing')?:[];
  650. $this->success('',$config);
  651. }
  652. }