Sale.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679
  1. <?php
  2. namespace app\admin\controller;
  3. use app\BaseController;
  4. use think\App;
  5. use think\facade\Db;
  6. class Sale extends BaseController
  7. {
  8. public $post="";
  9. public function __construct(App $app)
  10. {
  11. parent::__construct($app);
  12. $this->post=$this->request->post();
  13. }
  14. public function create(){
  15. $token = isset($this->post['token']) && $this->post['token'] !=="" ?trim($this->post['token']):"";
  16. $orderCode=makeNo("CX");
  17. $good_code = $this->post['good_code'] && $this->post['good_code'] !=="" ? trim($this->post['good_code']) :"";
  18. if($good_code==""){
  19. return error_show(1002,"商品code不能为空");
  20. }
  21. $ct = Db::name('good')->alias('a')->join('good_type b','b.good_code=a.good_code','left')
  22. ->where(['b.type_code'=>$good_code])->find();
  23. if($ct==""){
  24. return error_show(1002,"未找到商品数据");
  25. }
  26. $customer_code= $this->post['customer_code'] && $this->post['customer_code'] !=="" ? trim($this->post['customer_code']) :"";
  27. if($customer_code==""){
  28. return error_show(1002,"客户code不能为空");
  29. }
  30. $apply_id =GetUserInfo($token);
  31. if(empty($apply_id)||$apply_id['code']!=0){
  32. return error_show(1002,"申请人数据不存在");
  33. }
  34. $rm= isset($apply_id["data"]['id']) ? $apply_id["data"]['id'] : "";
  35. $ri= isset($apply_id["data"]['nickname']) ? $apply_id["data"]['nickname'] : "";
  36. // $good_name=isset($this->post['good_name']) && $this->post['good_name'] !=="" ? trim($this->post['good_name']) :"";
  37. //$good_num=isset($this->post['good_num']) && $this->post['good_num'] !=="" ? intval($this->post['good_num']) :"";
  38. // if($good_num==""){
  39. // return error_show(1002,"参数good_num不能为空");
  40. //}
  41. // $origin_price = isset($this->post['origin_price']) && $this->post['origin_price'] !=="" ? intval($this->post['origin_price']) :"";
  42. //$sale_price=isset($this->post['sale_price']) && $this->post['sale_price'] !=="" ? trim($this->post['sale_price']) :"";
  43. // $total_price=isset($this->post['total_price']) && $this->post['total_price'] !=="" ? trim($this->post['total_price']) :"";
  44. $post_fee=isset($this->post['post_fee']) && $this->post['post_fee'] !=="" ? trim($this->post['post_fee']) :"";
  45. $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"";
  46. // $send_num = isset($this->post['send_num']) && $this->post['send_num'] !=="" ? intval($this->post['send_num']) :"";
  47. // $wsend_num = isset($this->post['wsend_num']) && $this->post['wsend_num'] !=="" ? intval($this->post['wsend_num']) :"";
  48. // $send_status = isset($this->post['send_status']) && $this->post['send_status'] !=="" ? intval($this->post['send_status']) :"";
  49. $va= isset($this->post['order_addr']) && $this->post['order_addr'] !=="" ? $this->post['order_addr']:"";
  50. if($va==""){
  51. return error_show(1002,"参数order_addr不能为空");
  52. }
  53. $vi= isset($this->post['good_stock']) && $this->post['good_stock'] !=="" ? $this->post['good_stock']:"";
  54. if($vi==""){
  55. return error_show(1002,"参数good_stock不能为空");
  56. }
  57. $good_num = intval(array_sum(array_column($vi,"num")));
  58. Db::startTrans();
  59. try {
  60. $data=[
  61. "orderCode"=>$orderCode,
  62. "good_code"=>$good_code,
  63. "customer_code"=>$customer_code,
  64. "good_name"=>$ct['good_name'],
  65. "good_num"=>$good_num,
  66. "apply_id"=>$rm,
  67. "apply_name"=>$ri,
  68. "origin_price"=>$ct['original_price'],
  69. "sale_price"=>$ct['original_price'],
  70. "post_fee"=>$post_fee,
  71. "status"=>$status,
  72. "send_num"=>0,
  73. "wsend_num"=>$good_num,
  74. "send_status"=>1,
  75. "is_del"=>0,
  76. "addtime"=>date("Y-m-d H:i:s"),
  77. "updatetime"=>date("Y-m-d H:i:s"),
  78. 'total_price'=>$ct['original_price']*$good_num,
  79. ];
  80. $datainfo = Db::name('sale')->insert($data,true);
  81. $vat=[];
  82. $inn=[];
  83. if($datainfo>0){
  84. foreach ($vi as $ion){
  85. $iten=[];
  86. $iten['orderCode']=$orderCode;
  87. $iten['wsm_code']=$ion['wsm_code'];
  88. $iten['stock_id']="";
  89. $iten['num']=$ion['num'];
  90. $iten['status']=0;
  91. $iten['sale_price']=$ct['original_price'];
  92. $iten['addtime'] =date("Y-m-d H:i:s");
  93. $iten['updatetime'] =date("Y-m-d H:i:s");
  94. $inn[]=$iten;
  95. }
  96. // if($vi['usable_stock']<$iten['num']){
  97. // Db::rollback();
  98. // return error_show(1002,"超出库存数量");
  99. // }
  100. $vp= Db::name('sale_info')->insertAll($inn);
  101. if($vp==""){
  102. Db::rollback();
  103. return error_show(1002,"添加失败");
  104. }
  105. foreach ($va as $value){
  106. $temp=[];
  107. $addrs=[];
  108. if($value['addr_code']!==''&&is_array($value['addr_code'])){
  109. $addrs['provice_code'] = $value['addr_code'][0];
  110. $addrs['city_code'] = $value['addr_code'][1];
  111. $addrs['area_code'] = $value['addr_code'][2];
  112. $addr = json_encode($addrs);
  113. }else{
  114. $addr = isset($value['addr_code'])?$value['addr_code']:'';
  115. }
  116. $temp['orderCode']=$orderCode;
  117. $temp['contactor']=$value['contactor'];
  118. $temp['mobile'] = $value['mobile'];
  119. $temp['addr'] = $value['addr'];
  120. $temp['addr_code']=$addr;
  121. $temp['customer_code'] =$customer_code;
  122. $temp['receipt_quantity']=$value['receipt_quantity'];
  123. $temp['post_fee'] =0;
  124. $temp['is_del'] =0;
  125. $temp['addtime'] =date("Y-m-d H:i:s");
  126. $temp['updatetime'] =date("Y-m-d H:i:s");
  127. $temp['arrive_time']=date("Y-m-d H:i:s");
  128. $vat[]=$temp;
  129. }
  130. $vmp = Db::name('order_addr')->insertAll($vat);
  131. if($vmp){
  132. Db::commit();
  133. return error_show(0,"销售订单创建成功");
  134. }
  135. }
  136. Db::rollback();
  137. return error_show(1002,"销售订单创建失败");
  138. }catch(\Exception $e){
  139. Db::rollback();
  140. return error_show(1005,$e->getMessage());
  141. }
  142. }
  143. public function list(){
  144. $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']):"1";
  145. $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']) :"10";
  146. $where[] = ['is_del',"=",0];
  147. $orderCode=isset($this->post['orderCode']) && $this->post['orderCode'] !=="" ? trim($this->post['orderCode']):"";
  148. if($orderCode !==""){
  149. $where[]=['orderCode',"=",$orderCode];
  150. }
  151. $status=isset($this->post['status']) && $this->post['status'] !=="" ? trim($this->post['status']):"";
  152. if($status !==""){
  153. $where[]=['status',"=",$status];
  154. }
  155. $addtime = isset($this->post['addtime']) && $this->post['addtime'] !=="" ? $this->post['addtime'] :"";
  156. if($addtime !=""){
  157. $where[]= ["addtime",'<=',$addtime];
  158. }
  159. $count = Db::name('sale')->where($where)->count();
  160. $total = ceil($count/$size);
  161. $page = $page >= $total ? $total : $page;
  162. $list= Db::name('sale')->where($where)->order("addtime desc")->page($page,$size)->select();
  163. $data=[];
  164. foreach ($list as $value){
  165. $var = Db::name('good_type')->alias('b')->join("good a","a.good_code=b.good_code","left")
  166. ->where(['b.type_code'=>$value['good_code'],'a.is_del'=>0])->field('a.good_code,a.good_name,a.cat_id')->find();
  167. // $value['good_code']= $var['good_code'];
  168. // $value['good_name']=$var['good_name'];
  169. $value['can']= isset($var['cat_id']) && $var['cat_id'] !=0 ? made($var['cat_id']):[];
  170. $data[]=$value;
  171. }
  172. return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);
  173. }
  174. public function edit(){
  175. $token = isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
  176. $id = isset($this->post['id']) && $this->post['id'] !=="" ? trim($this->post['id']) :"";
  177. if($id==""){
  178. return error_show(1002,"参数id不能为空");
  179. }
  180. $etid = Db::name("sale")->where(["id"=>$id,"is_del"=>0])->find();
  181. if(empty($etid)){
  182. return error_show(1002,"未找到数据");
  183. }
  184. // $orderCode=isset($this->post['orderCode']) && $this->post['orderCode'] !=="" ? trim($this->post['orderCode']) :"";
  185. // if($orderCode==""){
  186. // return error_show(1002,"销售单code不能为空");
  187. // }
  188. $good_code = isset($this->post['good_code']) && $this->post['good_code'] !=="" ? trim($this->post['good_code']) :"";
  189. if($good_code==""){
  190. return error_show(1002,"商品code不能为空");
  191. }
  192. $customer_code=isset($this->post['customer_code']) && $this->post['customer_code'] !=="" ? intval($this->post['customer_code']):"";
  193. if($customer_code==""){
  194. return error_show(1002,"客户code不能为空");
  195. }
  196. $apply_id =GetUserInfo($token);
  197. if(empty($apply_id)||$apply_id['code']!=0){
  198. return error_show(1002,"申请人数据不存在");
  199. }
  200. $rm= isset($apply_id["data"]['id']) ? $apply_id["data"]['id'] : "";
  201. $ri= isset($apply_id["data"]['nickname']) ? $apply_id["data"]['nickname'] : "";
  202. $good_name=isset($this->post['good_name']) && $this->post['good_name'] !=="" ? trim($this->post['good_name']) :"";
  203. $good_num=isset($this->post['good_num']) && $this->post['good_num'] !=="" ? intval($this->post['good_num']) :"";
  204. $origin_price = isset($this->post['origin_price']) && $this->post['origin_price'] !=="" ? intval($this->post['origin_price']) :"";
  205. $sale_price=isset($this->post['sale_price']) && $this->post['sale_price'] !=="" ? trim($this->post['sale_price']) :"";
  206. $total_price=isset($this->post['total_price']) && $this->post['total_price'] !=="" ? trim($this->post['total_price']) :"";
  207. $post_fee=isset($this->post['post_fee']) && $this->post['post_fee'] !=="" ? trim($this->post['post_fee']) :"";
  208. $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"";
  209. $vr= isset($this->post['order_addr']) && $this->post['order_addr'] !=="" ? $this->post['order_addr']:"";
  210. if($vr==""){
  211. return error_show(1002,"参数order_addr不能为空");
  212. }
  213. $vi= isset($this->post['good_stock']) && $this->post['good_stock'] !=="" ? $this->post['good_stock']:"";
  214. if($vi==""){
  215. return error_show(1002,"参数good_stock不能为空");
  216. }
  217. Db::startTrans();
  218. try {
  219. $datn=[
  220. "id"=>$id,
  221. "good_code"=>$good_code,
  222. "customer_code"=>$customer_code,
  223. "good_name"=>$good_name,
  224. "good_num"=>$good_num,
  225. "apply_id"=>$rm,
  226. "apply_name"=>$ri,
  227. "origin_price"=>$origin_price,
  228. "sale_price"=>$sale_price,
  229. "total_price"=>$total_price,
  230. "post_fee"=>$post_fee,
  231. "status"=>$status,
  232. "is_del"=>0,
  233. "updatetime"=>date("Y-m-d H:i:s")
  234. ];
  235. $datninfo = Db::name('sale')->where(['id'=>$id,'is_del'=>0])->save($datn);
  236. //$vat=[];
  237. if($datninfo>0){
  238. foreach ($vi as $ion){
  239. $iten=[];
  240. isset($ion['id'])&&$ion['id']!=="" ? $iten['id'] = $ion['id']:'';
  241. $iten['orderCode']=$etid['orderCode'];
  242. $iten['wsm_code']=$ion['wsm_code'];
  243. $iten['stock_id']=$ion['stock_id'];
  244. $iten['num']=$ion['num'];
  245. $iten['status']=$ion['status'];
  246. $iten['sale_price']=$ion['sale_price'];
  247. isset($ion['id'])&&$ion['id']!=="" ? '' : $iten['addtime'] =date("Y-m-d H:i:s");
  248. $iten['updatetime'] =date("Y-m-d H:i:s");
  249. //$inn[]=$iten;
  250. $vp= Db::name('sale_info')->save($iten);
  251. }
  252. foreach ($vr as $value){
  253. $temp=[];
  254. isset($value['id'])&&$value['id']!=="" ? $temp['id'] = $value['id']:'';
  255. $temp['orderCode']=$etid['orderCode'];
  256. $temp['contactor']=$value['contactor'];
  257. $temp['mobile'] = $value['mobile'];
  258. $temp['addr'] = $value['addr'];
  259. $temp['addr_code'] =$value['addr_code'];
  260. $temp['customer_code'] =$customer_code;
  261. $temp['receipt_quantity']=$value['receipt_quantity'];
  262. $temp['post_fee'] =0;
  263. $temp['is_del'] =$value['is_del'];
  264. isset($value['id'])&&$value['id']!=="" ? '' : $temp['addtime'] =date("Y-m-d H:i:s");
  265. $temp['updatetime'] =date("Y-m-d H:i:s");
  266. $temp['arrive_time']=date("Y-m-d H:i:s");
  267. $dat = Db::name('order_addr')->save($temp);
  268. if($dat==false){
  269. Db::rollback();
  270. return error_show(1002,"更新失败");
  271. }
  272. }
  273. Db::commit();
  274. return error_show(0,"更新成功");
  275. }
  276. Db::rollback();
  277. return error_show(1002,"更新失败");
  278. }catch(\Exception $e){
  279. Db::rollback();
  280. return error_show(1005,$e->getMessage());
  281. }
  282. }
  283. public function info(){
  284. $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']):"";
  285. if($id==""){
  286. return error_show(1002,"参数id不能为空");
  287. }
  288. //->field('good_code,good_name,good_num,customer_code,orderCode')
  289. $einfo = Db::name('sale')->where(['id'=>$id,'is_del'=>0])->find();
  290. if(empty($einfo)){
  291. return error_show(1002,"未找到销售订单数据");
  292. }
  293. $goon = Db::name('good')->alias('b')->join("good_type a","a.good_code=b.good_code","left")
  294. ->where(['a.type_code'=> $einfo['good_code']])->find();
  295. if(empty($goon)){
  296. return error_show(1003,"未找到商品数据");
  297. }
  298. $int= isset($goon['cat_id']) && $goon['cat_id'] !=0 ? made($goon['cat_id']):[];
  299. $in= Db::name('customer_info')->where(['companyNo'=>$einfo['customer_code']])->field('companyName')->find();
  300. // ->field('addr,contactor,mobile,receipt_quantity,arrive_time')
  301. $fo = Db::name('order_addr')->where(['orderCode'=>$einfo['orderCode'],'is_del'=>0])->select();
  302. $bum = Db::name('order_out')->where(['orderCode'=>$einfo['orderCode']])->select();
  303. $ins=[];
  304. foreach ($bum as $stn){
  305. $so = Db::name('order_addr')->where(['id'=>$stn['addrid']])->find();
  306. $addr = GetAddr($so['addr_code']);
  307. $stn['addr_info']=$addr;
  308. $stn['add_code']=json_decode($so['addr_code'],true);
  309. $stn['addr']=$so['addr'];
  310. $stn['contact']=$so['contactor'];
  311. $stn['mobile']=$so['mobile'];
  312. $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b", "a.supplierNo=b.code")
  313. ->where(["a.wsm_code" => $stn['wsm_code']])->field("a.name as wsm_name,b.name,b.code")->find();
  314. $stn['wsm_name'] = isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name'] : "";
  315. $stn['wsm_supplier'] = isset($wsmcode['name']) ? $wsmcode['name'] : "";
  316. $stn['wsm_supplierNo'] = isset($wsmcode['code']) ? $wsmcode['code'] : "";
  317. $ins[]=$stn;
  318. }
  319. $addrs=[];
  320. foreach ($fo as $value){
  321. $value['addr_info']="";
  322. $value['send_num']=0;
  323. if($value['addr_code']!=""){
  324. $addr=GetAddr($value['addr_code']);
  325. $value['addr_info'] = $addr;
  326. $value['addr_code'] = json_decode($value['addr_code'],true);
  327. $send = Db::name("order_out")->where(['addrid'=>$value['id'],'orderCode' => $einfo['orderCode']])->sum("send_num");
  328. $value['send_num'] = $send ?? 0;
  329. }
  330. $value['wsend_num']=$value['receipt_quantity']-$value['send_num'];
  331. $addrs[]=$value;
  332. }
  333. //->field('num,sale_price,wsm_code,stock_id')
  334. $st = Db::name('sale_info')->where(['orderCode'=>$einfo['orderCode']])->select();
  335. $data=[];
  336. foreach ($st as $value){
  337. $value['wsm_name']="";
  338. $value['wsm_supplier']="";
  339. $value['wsm_supplierNo']="";
  340. $value['usable_stock']=0;
  341. $value['send_num']=0;
  342. if($value['wsm_code']!="") {
  343. $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b", "a.supplierNo=b.code")
  344. ->where(["a.wsm_code" => $value['wsm_code']])->field("a.name as wsm_name,b.name,b.code")->find();
  345. $value['wsm_name'] = isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name'] : "";
  346. $value['wsm_supplier'] = isset($wsmcode['name']) ? $wsmcode['name'] : "";
  347. $value['wsm_supplierNo'] = isset($wsmcode['code']) ? $wsmcode['code'] : "";
  348. $dn = Db::name('good_stock')->where(['wsm_code' => $value['wsm_code'], 'good_type_code' => $einfo['good_code']])->find();
  349. $value['usable_stock'] = isset($dn['usable_stock']) ? $dn['usable_stock'] : "0";
  350. $send = Db::name("order_out")->where(["wsm_code" => $value['wsm_code'], 'orderCode' => $einfo['orderCode']])->sum("send_num");
  351. $value['send_num'] = $send ?? 0;
  352. }
  353. $value['wsend_num']=$value['num']-$value['send_num'];
  354. $data[]=$value;
  355. }
  356. $einfo['info']=$data;
  357. $einfo['companyName']=isset($in['companyName']) ? $in['companyName']:"";
  358. $einfo['addrs']=$addrs;
  359. $einfo['bum']=$ins;
  360. $einfo['can']=$int;
  361. if(empty($einfo)){
  362. return error_show(1002,"未找到销售订单数据");
  363. }else{
  364. return app_show(0,"获取成功",$einfo);
  365. }
  366. }
  367. public function del(){
  368. $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
  369. if($id===""){
  370. return error_show(1002,"参数id不能为空");
  371. }
  372. $ed = Db::name('sale')->where(['id'=>$id,'is_del'=>0])->find();
  373. if(empty($ed)){
  374. return error_show(1002,"未找到销售订单数据");
  375. }
  376. $str =Db::name('sale')->update(['id'=>$id,'is_del'=>1,'updatetime'=>date("Y-m-d H:i:s")]);
  377. if($str){
  378. return error_show(0,"删除成功");
  379. }else{
  380. return error_show(1002,"删除失败");
  381. }
  382. }
  383. public function status(){
  384. $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
  385. if($id==""){
  386. return error_show(1002,"参数id不能为空");
  387. }
  388. $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"";
  389. if($status==""){
  390. return error_show(1002,"订单状态不能为空");
  391. }
  392. $dio = Db::name('sale')->where(['id'=>$id,'is_del'=>0])->find();
  393. if(empty($dio)){
  394. return error_show(1002,"销售单信息未找到");
  395. }
  396. Db::startTrans();
  397. try {
  398. $dio['status']=$status;
  399. $dio['updatetime']=date("Y-m-d H:i:s");
  400. $st = Db::name('sale')->save($dio);
  401. if($st) {
  402. if($status==3){
  403. $dn = Db::name('sale_info')->where(['orderCode' => $st['orderCode']])->select();
  404. foreach ($dn as $value) {
  405. $dm = Db::name('good_stock')->where(['wsm_code' => $value['wsm_code'], 'good_type_code' => $st['good_code']])->find();
  406. if($dm==""){
  407. Db::rollback();
  408. return error_show(1003,"未找到商品数据");
  409. }
  410. if($value['num']>$dm['usable_stock']){
  411. Db::rollback();
  412. return error_show(1002,"超出库存数量");
  413. }
  414. $dm['usable_stock']-=$value['num'];
  415. $dm['wait_out_stock']+=$value['num'];
  416. $send =Db::name("order_out")->where(["wsm_code"=>$value['wsm_code']])->sum("send_num");
  417. $value['send_num'] = $send??0;
  418. $value['wsend_num']=$value['num']-$value['send_num'];
  419. $Db = Db::name('good_stock')->update($dm);
  420. $Db['updatetime']= date('Y-m-d H:i:s');
  421. if($Db==false){
  422. Db::rollback();
  423. return error_show(1002,"状态更新失败");
  424. }
  425. }
  426. }
  427. }
  428. Db::commit();
  429. return error_show(0,"订单状态更新成功");
  430. }catch (\Exception $e) {
  431. Db::rollback();
  432. return error_show(1005, $e->getMessage());
  433. }
  434. }
  435. public function fee(){
  436. $id = isset($this->post['id']) && $this->post['id'] !=="" ? trim($this->post['id']) :"";
  437. if($id==""){
  438. return error_show(1002,"参数id不能为空");
  439. }
  440. $etid = Db::name("sale")->where(["id"=>$id,"is_del"=>0])->find();
  441. if(empty($etid)){
  442. return error_show(1002,"未找到数据");
  443. }
  444. $vr= isset($this->post['order_addr']) && $this->post['order_addr'] !=="" ? $this->post['order_addr']:"";
  445. if($vr==""){
  446. return error_show(1002,"参数order_addr不能为空");
  447. }
  448. Db::startTrans();
  449. try {
  450. $data=[
  451. "id"=>$id,
  452. "status"=>2,
  453. "is_del"=>0,
  454. "updatetime"=>date("Y-m-d H:i:s")
  455. ];
  456. $datainfo = Db::name('sale')->where(['id'=>$id,'is_del'=>0])->save($data);
  457. if($datainfo){
  458. foreach ($vr as $value){
  459. $tm=[];
  460. $tm['id'] = $value['id'];
  461. $tm['orderCode']=$etid['orderCode'];
  462. $tm['post_fee']=$value['post_fee'];
  463. $tm['updatetime']=date("Y-m-d H:i:s");
  464. $dn = Db::name('order_addr')->save($tm);
  465. if($dn==false){
  466. Db::rollback();
  467. return error_show(1002,"更新失败");
  468. }
  469. }
  470. Db::commit();
  471. return error_show(0,"更新成功");
  472. }
  473. Db::rollback();
  474. return error_show(1003,"更新失败");
  475. }catch(\Exception $e){
  476. Db::rollback();
  477. return error_show(1005,$e->getMessage());
  478. }
  479. }
  480. public function out(){
  481. $token= isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
  482. $outCode=makeNo("CK");
  483. $orderCode = isset($this->post['orderCode']) && $this->post['orderCode'] !=="" ? trim($this->post['orderCode']) :"";
  484. if($orderCode==""){
  485. return error_show(1002,"参数orderCoder不能为空");
  486. }
  487. $der = Db::name('sale')->where(['orderCode'=>$orderCode])->find();
  488. if($der==""){
  489. return error_show(1002,"未找到出库订单单号");
  490. }
  491. $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !=="" ? trim($this->post['wsm_code']) :"";
  492. if($wsm_code==""){
  493. return error_show(1002,"参数wsm_code不能为空");
  494. }
  495. $wsm= Db::name('sale_info')->where(['wsm_code'=>$wsm_code,'orderCode'=>$der['orderCode']])->find();
  496. if($wsm==""){
  497. return error_show(1002,"未找到仓库编码");
  498. }
  499. $post_name= isset($this->post['post_name']) && $this->post['post_name'] !=="" ? trim($this->post['post_name']) :"";
  500. if($post_name==""){
  501. return error_show(1002,"物流公司不能为空");
  502. }
  503. $post_code = isset($this->post['post_code']) && $this->post['post_code'] !=="" ? trim($this->post['post_code']) :"";
  504. if($post_code==""){
  505. return error_show(1002,"物流单号不能为空");
  506. }
  507. $post_fee = isset($this->post['post_fee']) && $this->post['post_fee'] !=="" ? intval($this->post['post_fee']) :"";
  508. if($post_fee==""){
  509. return error_show(1002,"物流费不能为空");
  510. }
  511. $send_num = isset($this->post['send_num']) && $this->post['send_num'] !=="" ? $this->post['send_num'] :"";
  512. if($send_num==""){
  513. return error_show(1002,"发货数量不能为空");
  514. }
  515. if($send_num>$wsm['num']){
  516. return error_show(1002,"超出可发货数量");
  517. }
  518. $apply_id =GetUserInfo($token);
  519. if(empty($apply_id)||$apply_id['code']!=0){
  520. return error_show(1002,"申请人数据不存在");
  521. }
  522. $rm= isset($apply_id["data"]['id']) ? $apply_id["data"]['id'] : "";
  523. $ri= isset($apply_id["data"]['nickname']) ? $apply_id["data"]['nickname'] : "";
  524. $addrid = isset($this->post['addrid']) && $this->post['addrid'] !=="" ? intval($this->post['addrid']) :"";
  525. $dr = Db::name('order_addr')->where(['id'=>$addrid,'is_del'=>0])->find();
  526. if(empty($dr)){
  527. return error_show(1003,"收货人信息未找到");
  528. }
  529. if($dr['orderCode']!== $orderCode){
  530. return error_show(1002,"订单code不存在");
  531. }
  532. $sendtime = isset($this->post['sendtime']) && $this->post['sendtime'] !=="" ? $this->post['sendtime']:date("Y-m-d H:i:s");
  533. // $check_num = isset($this->post['check_num']) && $this->post['check_num'] !=="" ? $this->post['check_num'] :"";
  534. // $error_num = isset($this->post['error_num']) && $this->post['error_num'] !=="" ? $this->post['error_num'] :"";
  535. $status = isset($this->post['status']) && $this->post['status'] !=="" ? $this->post['status'] :"1";
  536. //$dn=Db::name('sale_info')->where(['wsm_code'=>$outCode])->find();
  537. Db::startTrans();
  538. try {
  539. $data=[
  540. "wsm_code"=>$wsm_code,
  541. "orderCode"=>$orderCode,
  542. "outCode"=>$outCode,
  543. "order_type"=>$der['order_type'],
  544. "apply_id"=>$rm,
  545. "apply_name"=>$ri,
  546. "addrid"=>$dr['id'],
  547. "post_name"=>$post_name,
  548. "post_code"=>$post_code,
  549. "post_fee"=>$post_fee,
  550. "sendtime"=>$sendtime,
  551. "send_num"=>$send_num,
  552. "check_num"=>0,
  553. "error_num"=>0,
  554. "status"=>$status,
  555. "addtime"=>date("Y-m-d H:i:s"),
  556. "updatetime"=>date("Y-m-d H:i:s")
  557. ];
  558. $datainfo = Db::name('order_out')->insert($data);
  559. if($datainfo) {
  560. if ($status==1) {
  561. $var = Db::name('sale_info')->where(['orderCode' =>$orderCode,'wsm_code'=>$wsm_code])->find();
  562. //var_dump(Db::name('sale_info')->getLastSql());
  563. if($var==""){
  564. return error_show(1002,"未找到数据");
  565. }
  566. $send =Db::name("order_out")->where(["wsm_code"=>$wsm_code,'orderCode'=>$orderCode])->sum("send_num");
  567. $der['send_num']+= $send;
  568. $der['wsend_num']-=$send ;//($der['send_num'])?$der['wsend_num'] =="" ? $der['send']
  569. $der['send_status']=$der['send_num']==0 ? 1 :$der['wsend_num']==0?3:2;
  570. $der['status']=$der['send_num']==0 ? 3 :$der['wsend_num']==0?5:4;
  571. $der['updatetime'] = date("Y-m-d H:i:s");
  572. $si = Db::name('sale')->save($der);
  573. if($si==false){
  574. Db::rollback();
  575. return error_show(1003,"更新失败");
  576. }
  577. $str = Db::name('good_stock')->where(['wsm_code' => $var['wsm_code'],'good_type_code'=>$der['good_code']])->find();
  578. if ($str == false) {
  579. Db::rollback();
  580. return error_show(1002, "商品数据未找到");
  581. }
  582. if ($var['num'] > $str['usable_stock']) {
  583. Db::rollback();
  584. return error_show(1002, "超出库存数量");
  585. }
  586. $str['wait_out_stock'] -= $var['num'];
  587. $str['intra_stock'] += $var['num'];
  588. $str['updatetime'] = date("Y-m-d H:i:s");
  589. $stre = Db::name('good_stock')->save($str);
  590. if ($stre == false) {
  591. Db::rollback();
  592. return error_show(1002, "状态更新失败");
  593. }
  594. }
  595. Db::commit();
  596. return error_show(0,"创建成功");
  597. }else{
  598. Db::rollback();
  599. return error_show(1003,"创建失败");
  600. }
  601. }catch (\Exception $e) {
  602. Db::rollback();
  603. return error_show(1005, $e->getMessage());
  604. }
  605. }
  606. public function customer(){
  607. $outCode= isset($this->post['outCode']) && $this->post['outCode'] !=="" ? trim($this->post['outCode']) :"";
  608. if(empty($outCode)){
  609. return error_show(1002,"销售订单编号不能为空");
  610. }
  611. $codeinfo = Db::name('order_out')->where(['outCode'=>$outCode])->find();
  612. if($codeinfo==""){
  613. return error_show(1003,"未找到订单数据");
  614. }
  615. // $orderCode = isset($this->post['orderCode']) && $this->post['orderCode'] !=="" ? trim($this->post['orderCode']) :"";
  616. // if($orderCode==""){
  617. // return error_show(1002,"参数orderCoder不能为空");
  618. // }
  619. $dr = Db::name('sale')->where(['orderCode'=>$codeinfo['orderCode']])->find();
  620. if($dr==""){
  621. return error_show(1002,"未找到销售订单");
  622. }
  623. $status = isset($this->post['status']) && $this->post['status'] !== "" ? $this->post['status'] :"";
  624. if($status==""){
  625. return error_show(10002,"状态不能为空");
  626. }
  627. Db::startTrans();
  628. try {
  629. $codeinfo['status']=$status;
  630. $codeinfo['updatetime']=date("Y-m-d H:i:s");
  631. $cust = Db::name('order_out')->save($codeinfo);
  632. if($cust){
  633. if($status==2){
  634. $ct =Db::name('sale_info')->where(['orderCode' => $dr['orderCode'],'wsm_code'=>$codeinfo['wsm_code']])->find();
  635. if($ct==false){
  636. return error_show(1002,"未找到数据");
  637. }
  638. $var = Db::name('good_stock')->where(['wsm_code'=>$codeinfo['wsm_code'],'good_type_code'=>$dr['good_code']])->find();
  639. if($var==false){
  640. Db::rollback();
  641. return error_show(1002,"未找到商品数据");
  642. }
  643. if($ct['num']>$var['intra_stock']){
  644. Db::rollback();
  645. return error_show(1003,"超出库存数量");
  646. }
  647. $var['intra_stock']-=$codeinfo['send_num'];
  648. $var['updatetime']=date("Y-m-d H:i:s");
  649. $stre = Db::name('good_stock')->save($var);
  650. if ($stre == false) {
  651. Db::rollback();
  652. return error_show(1002, "状态更新失败");
  653. }
  654. }
  655. Db::commit();
  656. return error_show(0,"出库订单更新成功");
  657. }else{
  658. Db::rollback();
  659. return error_show(1003,"出库订单更新失败");
  660. }
  661. }catch (\Exception $e) {
  662. Db::rollback();
  663. return error_show(1005, $e->getMessage());
  664. }
  665. }
  666. }