WashManage.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. <?php
  2. namespace app\api\controller;
  3. use AlibabaCloud\SDK\Vod\V20170321\Models\GetAIMediaAuditJobResponseBody\mediaAuditJob\data;
  4. use app\common\model\AfreshOrder;
  5. use app\common\model\AfreshOrderItem;
  6. use app\common\model\DeliveryAddress;
  7. use app\common\model\GoodsOrder;
  8. use app\common\model\StoreOrderRefund;
  9. use app\common\model\User;
  10. use app\common\model\WashOrder;
  11. use app\common\model\WashCate;
  12. use app\common\model\WashClothes;
  13. use app\common\model\WashOrderItem;
  14. use app\common\model\WashType;
  15. use app\common\service\OrderCallback;
  16. use think\Db;
  17. use think\Exception;
  18. /**
  19. * @title 洗涤管理
  20. * @controller WashManage
  21. * @group base
  22. */
  23. class WashManage extends Base
  24. {
  25. protected $module = 1;
  26. protected $need_login = [
  27. 'orderConfirm',
  28. 'createOrder',
  29. 'getOrderDetail',
  30. 'getOrderList',
  31. 'payOrder',
  32. 'cancelOrder',
  33. 'applyAfreshOrder',
  34. 'applyAfreshOrderDetail',
  35. 'cancelAfreshOrder',
  36. 'getAfreshOrderList',
  37. ];
  38. public function initialize()
  39. {
  40. parent::initialize();
  41. $this->module = input('module',1);
  42. }
  43. /**
  44. * @title 获取洗涤分类
  45. * @desc 获取洗涤分类
  46. * @author qc
  47. * @url /api/Wash_manage/getWashCate
  48. * @method GET
  49. * @header name:Authorization require:1 desc:Token
  50. * @param name:module type:int default:1 desc:1洗鞋分类2洗衣分类
  51. * @return name:id type:int default:-- desc:分类id
  52. * @return name:title type:string default:-- desc:标题
  53. */
  54. public function getWashCate()
  55. {
  56. $all_cate = WashCate::getAllCateByModule($this->module);
  57. $this->success('ok',['list'=>$all_cate]);
  58. }
  59. /**
  60. * @title 获取洗涤商品【列表】
  61. * @desc 获取洗涤商品【列表】
  62. * @author qc
  63. * @url /api/Wash_manage/getGoodsList
  64. * @method GET
  65. * @header name:Authorization require:1 desc:Token
  66. * @param name:module type:int default:1 desc:1洗鞋2洗衣
  67. * @param name:cate_id type:int default:1 desc:分类id(不传查洗鞋或洗衣全部的)
  68. * @return name:id type:int default:-- desc:id
  69. * @return name:name type:string default:-- desc:商品名
  70. * @return name:cover type:string default:-- desc:商品封面
  71. * @return name:price type:float default:-- desc:价格
  72. * @return name:wash_type_name type:string default:-- desc:洗涤类型名称
  73. */
  74. public function getGoodsList()
  75. {
  76. $cate_id = input('get.cate_id');
  77. $list = WashClothes::where(['c.module'=>$this->module,'c.status'=>1,'c.is_deleted'=>0])
  78. ->alias('c')
  79. ->field('c.*,t.title wash_type_name')
  80. ->leftJoin('WashType t','c.wash_type = t.id')
  81. ->when($cate_id,function ($query)use ($cate_id){
  82. if($cate_id) $query->where('c.cate_id',$cate_id);
  83. })->limit($this->off_set,$this->page_num)
  84. ->order('sort desc ,id desc')
  85. ->select()->toArray();
  86. $this->success('ok',['list'=>$list]);
  87. }
  88. /**
  89. * @title 获取商品详情
  90. * @desc 获取商品详情
  91. * @author qc
  92. * @url /api/Wash_manage/getGoodsDetail
  93. * @method GET
  94. * @header name:Authorization require:1 desc:Token
  95. * @param name:module type:int default:1 desc:1洗鞋2洗衣
  96. * @return name:id type:int default:-- desc:id
  97. * @return name:name type:string default:-- desc:商品名
  98. * @return name:cover type:string default:-- desc:商品封面
  99. * @return name:price type:float default:-- desc:价格
  100. * @return name:wash_type_name type:string default:-- desc:洗涤类型名称
  101. */
  102. public function getGoodsDetail()
  103. {
  104. $goods_id = input('get.goods_id');
  105. $detail = WashClothes::where('id',$goods_id)->find()->toArray();
  106. if($detail['status'] == 0 || $detail['is_deleted'] == 1) $this->error('商品已下架');
  107. $detail['wash_type_name'] = WashType::where('id',$detail['wash_type'])->value('title');
  108. $this->success('获取成功',['detail'=>$detail]);
  109. }
  110. /**
  111. * @title 订单确认页数据
  112. * @desc 订单确认页数据
  113. * @author qc
  114. * @url /api/Wash_manage/orderConfirm
  115. * @method GET
  116. * @header name:Authorization require:1 desc:Token
  117. * @param name:module type:int default:1 desc:1洗鞋2洗衣
  118. * @param name:goods_json type:string require:1 default:0 desc:商品json信息[{'goods_id':'商品id','num':'数量'}]
  119. * @return name:list type:array default:-- desc:商品列表
  120. * @return name:list.id type:int default:-- desc:商品id
  121. * @return name:list.name type:float default:-- desc:商品名
  122. * @return name:list.price type:float default:-- desc:商品价格
  123. * @return name:list.cover type:float default:-- desc:商品封面
  124. * @return name:list.cate_name type:float default:-- desc:所属分类名
  125. * @return name:list.wash_type_name type:float default:-- desc:洗涤类型名
  126. * @return name:list.buy_num type:float default:-- desc:选择数量
  127. * @return name:list.order_price type:float default:-- desc:该商品金额
  128. * @return name:price_total type:float default:-- desc:订单金额(包含取件费)
  129. * @return name:total_num type:int default:-- desc:总件数
  130. * @return name:postage type:int default:-- desc:取件费用
  131. * @return name:goods_price type:int default:-- desc:商品总费用
  132. * @return name:address type:array default:-- desc:默认售货地址
  133. * @param name:address.pro_name type:string require:1 default:-- desc:省名
  134. * @param name:address.city_name type:string require:1 default:-- desc:市名
  135. * @param name:address.county_name type:string require:1 default:-- desc:县区名
  136. * @param name:address.detail type:string require:1 default:-- desc:详细地址
  137. * @param name:address.phone type:string require:1 default:-- desc:联系电话
  138. * @param name:address.name type:string require:1 default:-- desc:联系人
  139. */
  140. public function orderConfirm()
  141. {
  142. $goods_json = input('get.goods_json','');
  143. $goods_data = json_decode($goods_json,true);
  144. $goods_column = array_column($goods_data,null,'goods_id');
  145. $goods_ids = array_keys($goods_column);
  146. $list = WashClothes::field('a.id,a.price,a.name,a.cover,c.title cate_name,t.title wash_type_name,wash_type')
  147. ->alias('a')
  148. ->leftJoin('WashCate c','c.id = a.cate_id')
  149. ->leftJoin('WashType t','t.id = a.wash_type')
  150. ->where('a.id','in',$goods_ids)
  151. ->where('a.module','=',$this->module)
  152. ->select()->toArray();
  153. if(count($list) != count($goods_ids)) $this->error('商品信息有误');
  154. $price_total = 0;
  155. array_walk($list,function (&$v)use (&$price_total,$goods_column){
  156. $v['order_price'] = bcmul($v['price'],$goods_column[$v['id']]['num'],2);
  157. $v['buy_num'] = $goods_column[$v['id']]['num'];
  158. $price_total = bcadd($v['order_price'],$price_total,2);
  159. });
  160. $postage = sysconf('postage');
  161. $address = DeliveryAddress::field('id,pro_name,city_name,county_name,mer_name,detail,phone,name')->where('user_id',$this->user_id)->where('is_mr',1)->find();
  162. $this->success('ok',[
  163. 'list'=>$list,
  164. 'goods_price'=>$price_total,
  165. 'price_total'=> bcadd($price_total,$postage,2),
  166. 'postage'=>$postage,
  167. 'total_num'=>array_sum(array_column($goods_data,'num')),
  168. 'address' => $address ? $address->toArray() : null,
  169. ]);
  170. }
  171. /**
  172. * @title 创建订单
  173. * @desc 创建订单
  174. * @author qc
  175. * @url /api/Wash_manage/createOrder
  176. * @method POST
  177. * @header name:Authorization require:1 desc:Token
  178. * @param name:module type:int default:1 desc:1洗鞋2洗衣
  179. * @param name:goods_json type:string require:1 default:0 desc:商品json信息[{'goods_id':'商品id','num':'数量'}]
  180. * @param name:remark type:string default:-- desc:订单备注
  181. * @param name:images type:string default:-- desc:图片(多张|隔开)
  182. * @param name:address_id type:int default:-- desc:地址id
  183. */
  184. public function createOrder()
  185. {
  186. $goods_json = input('post.goods_json','');
  187. $address_id = input('post.address_id','');
  188. $remark = input('post.remark','');
  189. $images = input('post.images','');
  190. $goods_data = json_decode($goods_json,true);
  191. $goods_column = array_column($goods_data,null,'goods_id');
  192. $goods_ids = array_keys($goods_column);
  193. if(!$address_id) $this->error('请选择售货地址');
  194. $list = WashClothes::field('a.id,a.price,a.cover,a.name,c.title cate_name,t.title wash_type_name,wash_type')
  195. ->alias('a')
  196. ->leftJoin('WashCate c','c.id = a.cate_id')
  197. ->leftJoin('WashType t','t.id = a.wash_type')
  198. ->where('a.id','in',$goods_ids)
  199. ->where('a.module','=',$this->module)
  200. ->select()->toArray();
  201. // $this->success('ok',['user_id'=>$this->user_id,'address_id'=>$address_id]);
  202. if(count($list) != count($goods_ids)) $this->error('商品信息有误');
  203. $postage = sysconf('postage');
  204. $ret_data = ['pay_status'=>0,'config'=>[],'order_id'=>0];
  205. Db::startTrans();
  206. try {
  207. $address = DeliveryAddress::field('id,pro_name,city_name,county_name,mer_name,detail,phone,name')
  208. ->where('user_id',$this->user_id)->where('id',$address_id)->find()->toArray();
  209. $price_total = 0;
  210. $order_info = [
  211. 'user_id' => $this->user_id,
  212. 'order_no' => get_order_sn(),
  213. 'pay_no' => get_order_sn(),
  214. 'goods_num' => array_sum(array_column($goods_data,'num')),
  215. 'pro_name' => $address['pro_name'],
  216. 'city_name' =>$address['city_name'],
  217. 'county_name' => $address['county_name'],
  218. 'add_detail' => $address['detail'],
  219. 'phone' => $address['phone'],
  220. 'user_name' => $address['name'],
  221. 'remark' => $remark,
  222. 'images' => $images,
  223. 'module' => $this->module,
  224. ];
  225. $order_item = [];
  226. array_walk($list,function (&$v)use (&$price_total,$goods_column,&$order_item){
  227. $item_price = bcmul($v['price'],$goods_column[$v['id']]['num'],2);
  228. $price_total = bcadd($item_price,$price_total,2);
  229. $order_item[] = [
  230. 'user_id' => $this->user_id,
  231. 'goods_id' => $v['id'],
  232. 'goods_name' => $v['name'],
  233. 'cover' => $v['cover'],
  234. 'sell_price' => $v['price'],
  235. 'pay_price' => $item_price,
  236. 'wash_type' => $v['wash_type'],
  237. 'num' => $goods_column[$v['id']]['num'],
  238. ];
  239. });
  240. $order_info['price_total'] = bcadd($postage,$price_total);
  241. $order_info['postage'] = $postage;
  242. $order_info = WashOrder::create($order_info)->toArray();
  243. array_walk($order_item,function (&$v,$k)use ($order_info){
  244. $v['order_id'] = $order_info['id'];
  245. });
  246. (new WashOrderItem())->insertAll($order_item);// 生成订单商品详情
  247. $ret_data['order_id'] = $order_info['id'];
  248. Db::commit();
  249. }catch (\Exception $e) {
  250. Db::rollback();
  251. $this->error($e->getMessage());
  252. }
  253. $this->success('ok',$ret_data);
  254. }
  255. /**
  256. * @title 获取订单详情
  257. * @desc 获取订单详情
  258. * @author qc
  259. * @url /api/Wash_manage/getOrderDetail
  260. * @method GET
  261. * @header name:Authorization require:1 desc:Token
  262. * @param name:id type:int default:1 desc:订单id
  263. * @return name:id type:int default:-- desc:订单id
  264. * @return name:module type:int default:-- desc:1洗鞋2洗衣
  265. * @return name:order_no type:string default:-- desc:订单号
  266. * @return name:price_total type:float default:-- desc:待支付金额
  267. * @return name:price_express type:0 default:-- desc:运费金额
  268. * @return name:pay_state type:int default:-- desc:支付状态(0未支付1已支付)
  269. * @return name:pay_type type:int default:-- desc:支付方式(1微信)
  270. * @return name:pay_no type:string default:-- desc:支付号
  271. * @return name:pay_at type:string default:-- desc:支付时间
  272. * @return name:cancel_state type:int default:-- desc:取消状态(0未取消1已取消)
  273. * @return name:cancel_at type:string default:-- desc:取消时间
  274. * @return name:cancel_desc type:string default:-- desc:取消原因
  275. * @return name:status type:int default:-- desc:订单状态(0待支付,1已支付,2待取送,3订单完成,8退款,9取消)
  276. * @return name:create_at type:string default:-- desc:下单时间
  277. * @return name:pay_at type:string default:-- desc:支付时间
  278. * @return name:remark type:string default:-- desc:订单备注
  279. * @return name:images type:string default:-- desc:图片(多张|隔开)
  280. * @return name:images_arr type:array default:-- desc:图片
  281. * @return name:goods_num type:int default:-- desc:订单商品总数量
  282. * @return name:pro_name type:string default:-- desc:省名称(收货地址)
  283. * @return name:city_name type:string default:-- desc:市名称(收货地址)
  284. * @return name:county_name type:string default:-- desc:县区名称(收货地址)
  285. * @return name:add_detail type:string default:-- desc:详细地址(收货地址)
  286. * @return name:user_name type:string default:-- desc:收货人
  287. * @return name:phone type:string default:-- desc:收货人联系电话
  288. * @return name:order_item type:array default:-- desc:订单商品列表
  289. * @return name:order_item.name type:string default:-- desc:商品名
  290. * @return name:order_item.cover type:string default:-- desc:商品图
  291. * @return name:order_item.sell_price type:float default:-- desc:洗涤价格
  292. * @return name:order_item.num type:int default:-- desc:数量
  293. * @return name:order_item.wash_type_name type:int default:-- desc:洗涤类型
  294. */
  295. public function getOrderDetail()
  296. {
  297. $order_id = input('get.id');
  298. $field = 'id,module,order_no,status,price_total,pay_state,images,pay_no,is_deleted,pay_at,cancel_state,goods_num,remark,pro_name,city_name,county_name,add_detail,user_name,phone,postage,create_at';
  299. $detail = WashOrder::field($field)
  300. ->with('orderItem')->where('id',$order_id)->find()->toArray();
  301. if($detail['is_deleted'] == 1) $this->error('订单已删除');
  302. $detail['images_arr'] = $detail['images'] ? explode('|',$detail['images']) : null;
  303. $this->success('ok',['detail'=>$detail]);
  304. }
  305. /**
  306. * @title 获取订单列表
  307. * @desc 获取订单列表
  308. * @author qc
  309. * @method GET
  310. * @url /api/Wash_manage/getOrderList
  311. * @header name:Authorization require:1 desc:Token
  312. * @param name:page type:int default:1 desc:页数
  313. * @param name:page_num type:int default:20 desc:每页数
  314. * @param name:sel_status type:int default:1 desc:订单类型(0全部1待支付2已支付3待取送4已完成)
  315. * @return name:order_no type:string default:-- desc:订单号
  316. * @return name:price_total type:float default:-- desc:待支付金额
  317. * @return name:price_express type:0 default:-- desc:运费金额
  318. * @return name:pay_state type:int default:-- desc:支付状态(0未支付1已支付)
  319. * @return name:pay_type type:int default:-- desc:支付方式(1微信)
  320. * @return name:pay_no type:string default:-- desc:支付号
  321. * @return name:pay_at type:string default:-- desc:支付时间
  322. * @return name:cancel_state type:int default:-- desc:取消状态(0未取消1已取消)
  323. * @return name:cancel_at type:string default:-- desc:取消时间
  324. * @return name:cancel_desc type:string default:-- desc:取消原因
  325. * @return name:status type:int default:-- desc:订单状态(0待支付,1已支付,2待取送,3订单完成,8退款,9取消)
  326. * @return name:create_at type:string default:-- desc:下单时间
  327. * @return name:pay_at type:string default:-- desc:支付时间
  328. * @return name:remark type:string default:-- desc:订单备注
  329. * @return name:goods_num type:int default:-- desc:订单商品总数量
  330. * @return name:pro_name type:string default:-- desc:省名称(收货地址)
  331. * @return name:city_name type:string default:-- desc:市名称(收货地址)
  332. * @return name:county_name type:string default:-- desc:县区名称(收货地址)
  333. * @return name:add_detail type:string default:-- desc:详细地址(收货地址)
  334. * @return name:user_name type:string default:-- desc:收货人
  335. * @return name:phone type:string default:-- desc:收货人联系电话
  336. * @return name:order_item type:array default:-- desc:订单商品列表
  337. * @return name:order_item.name type:float default:-- desc:商品名
  338. * @return name:order_item.cover type:float default:-- desc:商品图
  339. * @return name:order_item.sell_price type:float default:-- desc:洗涤价格(单件)
  340. * @return name:order_item.num type:int default:-- desc:数量
  341. * @return name:order_item.wash_type_name type:int default:-- desc:洗涤类型
  342. */
  343. public function getOrderList()
  344. {
  345. $sel_status = input('get.sel_status',0);
  346. $where = [];
  347. $where[] = ['user_id','=',$this->user_id];
  348. $where[] = ['is_deleted','=',0];
  349. switch ($sel_status)
  350. {
  351. case 1:
  352. $where[] = ['pay_state','=',0];
  353. break;
  354. case 2:
  355. $where[] = ['pay_state','=',1];
  356. break;
  357. case 3:
  358. $where[] = ['status','=','2'];
  359. break;
  360. case 4:
  361. $where[] = ['status','=','3'];
  362. break;
  363. }
  364. $field = 'id,module,order_no,status,price_total,pay_state,pay_no,pay_at,cancel_state,goods_num,remark,pro_name,city_name,county_name,add_detail,user_name,phone,postage,create_at';
  365. $list = WashOrder::field($field)->with(['orderItem'])->where($where)->order('id desc ')
  366. ->limit($this->off_set,$this->page_num)
  367. ->select()->toArray();
  368. $this->success('ok',['list'=>$list]);
  369. }
  370. /**
  371. * @title 订单支付
  372. * @desc 订单支付
  373. * @author qc
  374. * @url /api/Wash_manage/payOrder
  375. * @method POST
  376. * @header name:Authorization require:1 desc:Token
  377. * @param name:id type:int require:1 default:0 desc:订单id
  378. * @return name:config type:array default:0 desc:小程序支付配置
  379. * @return name:config.appId type:string default:-- desc:appid
  380. * @return name:config.nonceStr type:string default:-- desc:随机字符串
  381. * @return name:config.signType type:string default:-- desc:签名类型
  382. * @return name:config.paySign type:string default:-- desc:签名
  383. * @return name:config.timestamp type:string default:-- desc:时间戳
  384. */
  385. public function payOrder()
  386. {
  387. $order_id = input('post.id');
  388. $field = 'id,module,status,order_no,price_total,pay_state,pay_no,is_deleted,pay_at,cancel_state,goods_num,remark,pro_name,city_name,county_name,add_detail,user_name,phone,postage';
  389. $order_info = WashOrder::field($field)
  390. ->with('orderItem')->where('id',$order_id)->find()->toArray();
  391. if($order_info['is_deleted'] == 1) $this->error('订单已删除');
  392. if($order_info['cancel_state'] == 1) $this->error('订单已取消');
  393. if($order_info['status'] != 0) $this->error('订单已支付');
  394. $user_info = $this->userInfo();
  395. $ret_data = ['pay_status'=>0,'config'=>[]];
  396. $notify_url = $this->request->root(true) . '/api/we_chat_pay/washOrderNotify';
  397. $config = WeChatPay::wxPay('订单支付',$order_info['pay_no'],$order_info['price_total'],$notify_url,'JSAPI',$user_info['openid']);
  398. if(!$config) $this->error('支付配置错误');
  399. $ret_data['config']=$config['config'];
  400. $this->success('ok',$ret_data);
  401. }
  402. /**
  403. * @title 取消订单
  404. * @desc 取消订单
  405. * @author qc
  406. * @url /api/Wash_manage/cancelOrder
  407. * @method POST
  408. * @header name:Authorization require:1 desc:Token
  409. * @param name:id type:int require:1 default:0 desc:订单id
  410. */
  411. public function cancelOrder()
  412. {
  413. $order_id = input('post.id');
  414. $field = 'id,module,status,order_no,price_total,pay_state,pay_no,is_deleted,pay_at,cancel_state,goods_num,remark,pro_name,city_name,county_name,add_detail,user_name,phone,postage';
  415. $order_info = WashOrder::field($field)
  416. ->with('orderItem')->where('id',$order_id)->find()->toArray();
  417. if($order_info['is_deleted'] == 1) $this->error('订单已删除');
  418. if($order_info['cancel_state'] == 1) $this->error('订单已取消');
  419. if($order_info['status'] == 8) $this->error('订单已取消');
  420. if($order_info['status'] == 0){
  421. WashOrder::where('id',$order_id)->update(['status'=>9,'cancel_state'=>1,'cancel_at'=>date('Y-m-d H:i:s')]);
  422. }else{
  423. $refund_info = [
  424. 'user_id' => $this->user_id ,
  425. 'order_id' => $order_id ,
  426. 'num' => $order_info['goods_num'],
  427. 'apply_case' => '订单取消',
  428. 'is_deleted'=> 0,
  429. 'refund_type'=> 1,
  430. 'create_at'=> date('Y-m-d H:i:s'),
  431. 'refund_no'=> 'W'.$order_info['order_no'],
  432. 'source'=> 2,
  433. 'refund_money'=>$order_info['price_total'],
  434. ];
  435. $res = \library\tools\Data::save('StoreOrderRefund',$refund_info,'order_id',['order_id'=>$order_id,'source'=>2]);
  436. $refund_info =StoreOrderRefund::where(['order_id'=>$order_id,'source'=>2,'user_id'=>$this->user_id])->find()->toArray();
  437. WashOrder::where(['id'=>$order_id])->update(['refund_state'=>1]);
  438. OrderCallback::refundMoney($refund_info ,$order_info,$order_id);
  439. }
  440. $this->success('订单取消成功');
  441. }
  442. /**
  443. * @title 以下接口为重洗订单接口
  444. * @desc 以下接口为重洗订单接口
  445. * @author qc
  446. * @url /api/Wash_manage/classIntro
  447. * @method GET
  448. * @return name:1 type:string default:-- desc:重洗申请页面的商品可以调用订单详情接口获取商品列表
  449. */
  450. public function classIntro(){}
  451. /**
  452. * @title 申请重洗
  453. * @desc 申请重洗
  454. * @author qc
  455. * @url /api/Wash_manage/applyAfreshOrder
  456. * @method POST
  457. * @param name:order_id type:int require:1 default:0 desc:洗涤订单id
  458. * @param name:goods_json type:string require:1 default:0 desc:商品json信息[{'item_id':'订单的商品列表id','num':'数量'}]
  459. * @param name:images type:string require:0 default:0 desc:图片(多张|隔开)
  460. */
  461. public function applyAfreshOrder()
  462. {
  463. $order_id = input('post.order_id','');
  464. $goods_json = input('post.goods_json','');
  465. $remark = input('post.remark','');
  466. $images = input('post.images','');
  467. $goods_data = json_decode($goods_json,true);
  468. $wash_order = WashOrder::where('id',$order_id)->find()->toArray();
  469. $check = AfreshOrder::where('wash_id',$order_id)->where('is_deleted',0)->where('cancel_state',0)->value('id');
  470. if($check) $this->error('已申请重洗');
  471. Db::startTrans();
  472. try {
  473. $order_info = [
  474. 'user_id' => $this->user_id,
  475. 'wash_id' => $order_id,
  476. 'order_no' => get_order_sn(),
  477. 'goods_num' => array_sum(array_column($goods_data,'num')),
  478. 'remark' => $remark,
  479. 'images' => $images,
  480. 'module' => $wash_order['module'],
  481. ];
  482. $order_info = AfreshOrder::create($order_info);
  483. $item= [] ;
  484. foreach ($goods_data as $iv) {
  485. $check_item = WashOrderItem::where('id',$iv['item_id'])->value('num');
  486. if($iv['num'] > $check_item) $this->exception('重洗数量错误');
  487. $item[]= [
  488. 'user_id' => $this->user_id,
  489. 'afresh_id' => $order_info['id'],
  490. 'item_id' => $iv['item_id'],
  491. 'num' => $iv['num'],
  492. ];
  493. }
  494. (new AfreshOrderItem())->insertAll($item);
  495. Db::commit();
  496. }catch (\Exception $e) {
  497. Db::rollback();
  498. $this->error($e->getMessage());
  499. }
  500. $this->success('申请成功等待审核');
  501. }
  502. /**
  503. * @title 申请重洗订单列表
  504. * @desc 申请重洗订单列表
  505. * @author qc
  506. * @url /api/Wash_manage/getAfreshOrderList
  507. * @method GET
  508. * @param name:page type:int default:1 desc:页数
  509. * @param name:page_num type:int default:20 desc:每页数
  510. * @return name:id type:int require:1 default:0 desc:重洗订单id
  511. * @return name:status type:int require:1 default:0 desc:订单状态(0默认状态【未处理】1待取送2订单完成)
  512. * @return name:sh_status type:int require:1 default:0 desc:审核状态(0待审核1审核通过2审核拒绝)
  513. * @return name:sh_remark type:string require:1 default:0 desc:审核备注
  514. * @return name:wash_id type:int require:1 default:0 desc:洗涤订单id
  515. * @return name:pro_name type:string default:-- desc:省名称(收货地址)
  516. * @return name:city_name type:string default:-- desc:市名称(收货地址)
  517. * @return name:county_name type:string default:-- desc:县区名称(收货地址)
  518. * @return name:add_detail type:string default:-- desc:详细地址(收货地址)
  519. * @return name:add_detail type:int default:-- desc:清洗数量
  520. * @return name:user_name type:string default:-- desc:收货人
  521. * @return name:phone type:string default:-- desc:收货人联系电话
  522. * @return name:order_item type:array default:-- desc:订单商品列表
  523. * @return name:order_item.name type:string default:-- desc:商品名
  524. * @return name:order_item.cover type:string default:-- desc:商品图
  525. * @return name:order_item.sell_price type:float default:-- desc:洗涤价格
  526. * @return name:order_item.num type:int default:-- desc:清洗数量
  527. */
  528. public function getAfreshOrderList()
  529. {
  530. $list = AfreshOrder::field('a.id,a.wash_id,a.status,a.images,pro_name,city_name,county_name,add_detail,user_name,phone,a.module,sh_status')
  531. ->alias('a')
  532. ->with('orderItem')
  533. ->leftJoin('WashOrder w','w.id = a.wash_id')
  534. ->where('a.user_id',$this->user_id)
  535. ->where('w.cancel_state',0)
  536. ->order('a.id desc')
  537. ->select()->toArray();
  538. array_walk($list,function (&$v){
  539. $v['images_arr'] = $v['images'] ? explode("|",$v['images']) : null;
  540. });
  541. $this->success('ok',['detail'=>$list]);
  542. }
  543. /**
  544. * @title 获取申请重洗订单详情
  545. * @desc 获取申请重洗订单详情
  546. * @author qc
  547. * @url /api/Wash_manage/applyAfreshOrderDetail
  548. * @method GET
  549. * @param name:order_id type:int require:1 default:0 desc:洗涤订单id
  550. * @return name:id type:int require:1 default:0 desc:重洗订单id
  551. * @return name:status type:int require:1 default:0 desc:订单状态(0默认状态【未处理】1待取送2订单完成)
  552. * @return name:sh_status type:int require:1 default:0 desc:审核状态(0待审核1审核通过2审核拒绝)
  553. * @return name:sh_remark type:string require:1 default:0 desc:审核备注
  554. * @return name:wash_id type:int require:1 default:0 desc:洗涤订单id
  555. * @return name:pro_name type:string default:-- desc:省名称(收货地址)
  556. * @return name:city_name type:string default:-- desc:市名称(收货地址)
  557. * @return name:county_name type:string default:-- desc:县区名称(收货地址)
  558. * @return name:add_detail type:string default:-- desc:详细地址(收货地址)
  559. * @return name:add_detail type:int default:-- desc:清洗数量
  560. * @return name:user_name type:string default:-- desc:收货人
  561. * @return name:phone type:string default:-- desc:收货人联系电话
  562. * @return name:order_item type:array default:-- desc:订单商品列表
  563. * @return name:order_item.name type:string default:-- desc:商品名
  564. * @return name:order_item.cover type:string default:-- desc:商品图
  565. * @return name:order_item.sell_price type:float default:-- desc:洗涤价格
  566. * @return name:order_item.num type:int default:-- desc:清洗数量
  567. */
  568. public function applyAfreshOrderDetail()
  569. {
  570. $order_id = input('get.order_id');
  571. $detail = AfreshOrder::field('a.id,a.wash_id,a.status,a.images,pro_name,city_name,county_name,add_detail,user_name,phone,a.module,sh_status')
  572. ->alias('a')
  573. ->with('orderItem')
  574. ->leftJoin('WashOrder w','w.id = a.wash_id')
  575. ->where('w.id',$order_id)
  576. ->where('w.cancel_state',0)
  577. ->find();
  578. if(!$detail) $this->error('订单暂未申请重洗');
  579. $detail= $detail->toArray();
  580. $detail['images_arr'] = $detail['images'] ? explode("|",$detail['images']) : null;
  581. $this->success('ok',['detail'=>$detail]);
  582. }
  583. /**
  584. * @title 取消重洗
  585. * @desc 取消重洗
  586. * @author qc
  587. * @url /api/Wash_manage/cancelAfreshOrder
  588. * @method POST
  589. * @param name:id type:int require:1 default:0 desc:重洗订单id
  590. */
  591. public function cancelAfreshOrder()
  592. {
  593. AfreshOrder::where('id',input('post.id'))->where('user_id',$this->user_id)->update(['cancel_state'=>1]);
  594. $this->success('取消成功');
  595. }
  596. }