ShopPurchase.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <?php
  2. namespace app\admin\controller;
  3. use app\data\model\DataMerchants;
  4. use app\data\model\ShopGoodsItem;
  5. use app\data\model\ShopPurchase as Model;
  6. use app\data\model\ShopPurchaseOffer;
  7. use app\data\model\ShopPurchaseOffer as Offer;
  8. use app\data\model\DataUser;
  9. use Carbon\Carbon;
  10. use think\admin\Controller;
  11. use app\data\model\SystemUser;
  12. use think\admin\service\AdminService;
  13. use think\db\Query;
  14. use think\db\Where;
  15. use think\facade\Db;
  16. use think\facade\Validate;
  17. use think\Request;
  18. /**
  19. * 采购订单管理
  20. * Class Xw
  21. * @package app\admin\controller\ShipYard
  22. * http://www.zjnk.com/fileserver/News/04b7854f-bb0a-458b-b359-ce948acfea09.JPG
  23. */
  24. class ShopPurchase extends Controller
  25. {
  26. /**
  27. * 采购订单列表
  28. * @auth true
  29. * @menu true
  30. */
  31. public function index(Request $request){
  32. if(AdminService::getUserId()==10000){
  33. $admin_id = [];
  34. }else{
  35. $admin_id['admin_id']=AdminService::getUserId();
  36. }
  37. $this->title='采购订单管理';
  38. $this->assign('status',Model::getStatus());
  39. $this->assign('admin_id',$admin_id);
  40. $result = Model::mQuery()
  41. ->equal('status')
  42. ->with(['merchant'])
  43. ->when($request['name'],function (Query $query)use ($request){
  44. $query->hasWhere('merchant',function (Query $query)use ($request){
  45. $query->whereLike('name',"%{$request['name']}%");
  46. });
  47. })->where($admin_id)
  48. ->where('status','in','1,2,3')
  49. // ->field("sum(amount) as kkk")
  50. ->dateBetween('create_time')
  51. ->order('create_time','desc');
  52. $this->amount = $result->db()->sum('amount');
  53. $result->page();
  54. }
  55. protected function _index_page_filter(&$data)
  56. {
  57. // dump($data);die;
  58. }
  59. /**
  60. * 详情
  61. * @auth true
  62. * @menu true
  63. */
  64. public function detail(Request $request,Model $purchase){
  65. DataUser::$copyRealName=true;
  66. $row = $purchase
  67. ->with(['merchant','items','items.offers','items.offers.user'])
  68. ->where('id',$request['id'])->findOrFail();
  69. if (!$row['merchant']){
  70. $array = ['company'=>'平台发布'];
  71. $row['merchant'] = $array;
  72. }
  73. $this->assign('row',$row);
  74. $this->fetch('form');
  75. }
  76. /**
  77. * 编辑
  78. * @auth true
  79. * @menu true
  80. */
  81. public function edit(Request $request,Model $purchase,\think\Validate $validate){
  82. if ($this->request->isGet()) {
  83. DataUser::$copyRealName=true;
  84. $row = $purchase
  85. ->with(['merchant','items','items.offers','items.offers.user'])
  86. ->where('id',$request['id'])->findOrFail();
  87. if (!$row['merchant']){
  88. $array = ['company'=>'平台发布'];
  89. $row['merchant'] = $array;
  90. }
  91. $this->assign('row',$row);
  92. $this->fetch('edit');
  93. }elseif ($this->request->isPost()){
  94. $merchant=DataMerchants::getByAdmin(AdminService::getUserId());
  95. if(!$merchant){
  96. $this->error('您不是商家无法操作');
  97. }
  98. $data=$request->post();
  99. $item=$data['item']??[];
  100. foreach ($item as $i){
  101. $make=$validate->check($i,[
  102. 'name'=>['require',],
  103. 'spec'=>['require',],
  104. 'number'=>['require','integer'],
  105. 'standard'=>['require',],
  106. 'price'=>['require','float'],
  107. ]);
  108. if(!$make){
  109. $this->error('请填写正确的商品信息');
  110. }
  111. }
  112. // print_r($data);
  113. // exit();
  114. app()->db->startTrans();
  115. unset($data['item']);
  116. $data['admin_id']=AdminService::getUserId();
  117. $data['longitude']=$merchant['longitude']??null;
  118. $data['latitude']=$merchant['latitude']??null;
  119. $data['amount']=min(array_column($item,'price'));
  120. $data['type'] =1;
  121. $order=Model::update($data);
  122. // $order->items()->saveAll($item);
  123. app()->db->commit();
  124. $item_ids=[];
  125. foreach ($item as &$v){
  126. $item_data = [
  127. 'purchase_id'=>$data['id'],
  128. 'name'=>$v['name'],
  129. 'spec'=>$v['spec'],
  130. 'number'=>$v['number'],
  131. 'standard'=>$v['standard'],
  132. 'price'=>$v['price'],
  133. ];
  134. if(!empty($v['id'])){
  135. $itemModel=$order->items()->where('id',$v['id'])->find();
  136. if(!$itemModel){
  137. $this->error('商品不存在');
  138. }
  139. $itemModel->save($item_data);
  140. }else{
  141. $itemModel=$order->items()->save($item_data);
  142. }
  143. $item_ids[]=$itemModel['id'];
  144. }
  145. $order = $order->items()->whereNotIn('id',$item_ids)->select()->each(function ($d){$d->delete();});
  146. ShopPurchaseOffer::where('order_id',$data['id'])
  147. ->whereNotIn('item_id',$item_ids)
  148. ->select()->each(function ($m){$m->delete();});
  149. $this->success('保存成功');
  150. }
  151. }
  152. /**
  153. * 取消订单
  154. * @auth true
  155. * @menu true
  156. */
  157. public function cancellation(Request $request,Model $purchase){
  158. $purchase_=$purchase->where('id',$request['id'])->findOrFail();
  159. $purchase_['status']=0;
  160. $purchase_->save();
  161. $this->success('取消成功');
  162. }
  163. /**
  164. * 匹配订单
  165. * @auth true
  166. * @menu true
  167. */
  168. public function match(Request $request,Model $purchase){
  169. $admin=AdminService::getUserId();
  170. $tab = 1;
  171. $id = $request['id'];
  172. $item_id = $request['item_id'];
  173. Db::startTrans();
  174. // $admin['id'] = '10010';
  175. $model= \app\data\model\ShopPurchase::getItem($tab,$admin)->lock(true)
  176. ->where(function ($query) use ($tab,$item_id){
  177. // if ($tab==1){
  178. // $query->where('purchase_id',$id);
  179. // }else{
  180. $query->where('id',$item_id);
  181. // }
  182. })
  183. ->findOrEmpty();
  184. $model_id = $model['id'];
  185. //dump($model->toArray());die;
  186. if($model['is_matched']){
  187. Db::rollback();
  188. $this->error('该订单已匹配');
  189. }
  190. // $hasMatch=ShopPurchase::getItem($data['tab'])->where('offer_id',$data['offer_id'])->value('id');
  191. $hasMatch=\app\data\model\ShopPurchase::getItem($tab)->where('id',$id)->value('offer_id');
  192. if($hasMatch){
  193. Db::rollback();
  194. $this->error('该接单已被其他订单匹配');
  195. }
  196. $offer=\app\data\model\ShopPurchase::getOffer($tab)->lock(true)
  197. // ->where('user_id',$data['offer_id'])
  198. ->when($tab,function ($querys) use ($tab,$model_id){
  199. switch ($tab){
  200. case 1:
  201. $querys->where('item_id',$model_id);
  202. break;
  203. case 2:
  204. $querys->where('production_id',$model_id);
  205. break;
  206. case 3:
  207. $querys->where('corrdination_id',$model_id);
  208. break;
  209. case 4:
  210. $querys->where('ocea_id',$model_id);
  211. break;
  212. }
  213. })
  214. ->findOrEmpty();
  215. if($tab==1){
  216. if ($offer->item_id != $model['id']) {
  217. Db::rollback();
  218. $this->error('该接单不属于此订单');
  219. }
  220. }else {
  221. if ($offer->order_id != $model['id']) {
  222. Db::rollback();
  223. $this->error('该接单不属于此订单');
  224. }
  225. }
  226. $model['offer_id']=$request['offer_id'];
  227. if($tab==1){
  228. $main=$model->main;
  229. $main['status']=3;
  230. $main->save();
  231. }else{
  232. $model['status']=3;
  233. }
  234. // print_r($model);
  235. $model->save();
  236. Db::commit();
  237. $url = setword($tab+1,$request['item_id']);
  238. // print_r($url);
  239. // exit();
  240. \app\data\model\ShopPurchase::getItem($tab)->where('id',$model['id'])->update(['down_word'=>$url]);
  241. $this->success('匹配成功');
  242. }
  243. /**
  244. * 查看报价历史
  245. * @auth true
  246. * @menu true
  247. */
  248. public function offer_history(Request $request,Offer $offer){
  249. $offer=$offer->where('id',$request['id'])->findOrFail();
  250. return $offer->amounts()->select();
  251. }
  252. /**
  253. * 发布
  254. * @auth true
  255. * @menu true
  256. */
  257. public function add(Request $request,\think\Validate $validate){
  258. $this->title='发布订单';
  259. $this->assign('vo',null);
  260. if($request->isGet()) {
  261. $this->fetch();
  262. }else{
  263. $merchant=DataMerchants::getByAdmin(AdminService::getUserId());
  264. if(!$merchant){
  265. $this->error('您不是商家无法发布');
  266. }
  267. $data=$request->post();
  268. $item=$data['item']??[];
  269. foreach ($item as $i){
  270. $make=$validate->check($i,[
  271. 'name'=>['require',],
  272. 'spec'=>['require',],
  273. 'number'=>['require','integer'],
  274. 'standard'=>['require',],
  275. 'price'=>['require','float'],
  276. ]);
  277. if(!$make){
  278. $this->error('请填写正确的商品信息');
  279. }
  280. }
  281. app()->db->startTrans();
  282. unset($data['item']);
  283. $data['admin_id']=AdminService::getUserId();
  284. $data['longitude']=$merchant['longitude']??null;
  285. $data['latitude']=$merchant['latitude']??null;
  286. $data['amount']=min(array_column($item,'price'));
  287. $data['type'] =1;
  288. $order=Model::create($data);
  289. $order->items()->saveAll($item);
  290. app()->db->commit();
  291. $this->success('保存成功');
  292. }
  293. }
  294. }