Purchin.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. <?php
  2. namespace app\admin\controller;
  3. use app\admin\model\ActionLog;
  4. use app\BaseController;
  5. use think\facade\Db;
  6. use think\App;
  7. class Purchin extends BaseController
  8. {
  9. public $post="";
  10. public function __construct(App $app)
  11. {
  12. parent::__construct($app);
  13. $this->post=$this->request->post();
  14. }
  15. public function list(){
  16. }
  17. public function add(){
  18. $cgdNo = isset($this->post['cgdNo']) && $this->post['cgdNo']!=""? trim($this->post['cgdNo']):"";
  19. if($cgdNo==""){
  20. return error_show(1005,"参数cgdNo 不能为空");
  21. }
  22. $cgdinfo = Db::name("purchease_order")->where(['cgdNo'=>$cgdNo,'is_del'=>0])->find();
  23. if(empty($cgdinfo)){
  24. return error_show(1005,"未找到采购单数据");
  25. }
  26. if($cgdinfo['status']==0){
  27. return error_show(1005,"采购单未发货");
  28. }
  29. $wsm_in_code = makeNo("IC");
  30. $wsm_code = isset($this->post['wsm_code'])&&$this->post['wsm_code']!="" ? trim($this->post['wsm_code']):"";
  31. if($wsm_code==""){
  32. return error_show(1004,"参数 wsm_code 不能为空");
  33. }
  34. $wsminfo = Db::name("warehouse_info")->where(["wsm_code"=>$wsm_code,"is_del"=>0])->find();
  35. if(empty($wsminfo)){
  36. return error_show(1004,"未找到仓库信息");
  37. }
  38. $recep = Db::name('warehouse_addr')->where(["wsm_code"=>$wsm_code,"is_del"=>0])->find();
  39. // $wsm_code = isset($this->post['wsm_code'])&&$this->post['wsm_code']!="" ? trim($this->post['wsm_code']):"";
  40. // if($wsm_code==""){
  41. // return error_show(1004,"参数 wsm_code 不能为空");
  42. // }
  43. $data = GetUserInfo($this->post['token']);
  44. if((!empty($data) && $data['code']!=0) ||empty($data) ){
  45. return error_show($data['code'],$data['message']);
  46. }
  47. $userinfo = $data['data'];
  48. $post_company = isset($this->post['post_company'])&&$this->post['post_company']!="" ? trim($this->post['post_company']):"";
  49. $post_code = isset($this->post['post_code'])&&$this->post['post_code']!="" ? trim($this->post['post_code']):"";
  50. $post_fee = isset($this->post['post_fee'])&&$this->post['post_fee']!="" ? $this->post['post_fee']:"0";
  51. $post_time = isset($this->post['post_time'])&&$this->post['post_time']!="" ? $this->post['post_time']:date("Y-m-d H:i:s");
  52. $send_num = isset($this->post['send_num'])&&$this->post['send_num']!="" ? intval($this->post['send_num']):"";
  53. $status = isset($this->post['status'])&&$this->post['status']!="" ? intval($this->post['status']):"0";
  54. if($send_num==''){
  55. return error_show(1004,"参数 send_num 不能为空或零");
  56. }
  57. if($send_num>$cgdinfo['wsend_num']){
  58. return error_show(1004,"采购单剩余未发货数量不足");
  59. }
  60. $orin = [
  61. "wsm_in_code"=>$wsm_in_code,
  62. "cgdNo"=>$cgdNo,
  63. "wsm_code"=>$wsm_code,
  64. "wsm_reaper"=>isset($recep)&& $recep['wsm_name']!=''? $recep['wsm_name']:"",
  65. "send_num"=>$send_num,
  66. "post_company"=>$post_company,
  67. "post_code"=>$post_code,
  68. "post_fee"=>$post_fee,
  69. "sendtime"=>$post_time,
  70. "apply_id"=>$userinfo['id'],
  71. "apply_name"=>$userinfo['nickname'],
  72. "wait_num"=>0,
  73. "status"=>$status,
  74. "addtime"=>date("Y-m-d H:i:s"),
  75. "updatetime"=>date("Y-m-d H:i:s")
  76. ];
  77. Db::startTrans();
  78. try{
  79. $win = Db::name("purchease_in")->insert($orin);
  80. if($win){
  81. $order = ["order_code"=>$wsm_in_code,"status"=>$status,"action_remark"=>'',"action_type"=>"create"];
  82. ActionLog::logAdd($this->post['token'],$order,"rkd",$status,$this->post);
  83. if($status==1){
  84. $order = ["order_code"=>$cgdNo,"status"=>$cgdinfo['status'],"action_remark"=>'',"action_type"=>"edit"];
  85. $cgdinfo['wsend_num']-=$send_num;
  86. $cgdinfo['send_num']+=$send_num;
  87. $cgdinfo['send_status']=$cgdinfo['wsend_num']==0 ? 3:($cgdinfo['send_num']==0 ?1:2);
  88. $cgdinfo['status']=$cgdinfo['wsend_num']==0 ? 3:($cgdinfo['send_num']==0 ?1:2);
  89. $cgdinfo['updatetime']=date("Y-m-d H:i:s");
  90. $up=Db::name("purchease_order")->save($cgdinfo);
  91. if($up){
  92. ActionLog::logAdd($this->post['token'],$order,"cgd", $cgdinfo['status'],$cgdinfo);
  93. Db::commit();
  94. return app_show(0,'新建成功',["wsm_in_code"=>$wsm_in_code]);
  95. }else{
  96. Db::rollback();
  97. return error_show(1004,"新建失败");
  98. }
  99. }
  100. Db::commit();
  101. return app_show(0,'新建成功',["wsm_in_code"=>$wsm_in_code]);
  102. }
  103. Db::rollback();
  104. return error_show(1004,"新建失败");
  105. }catch (\Exception $e){
  106. Db::rollback();
  107. return error_show(1004,$e->getMessage());
  108. }
  109. }
  110. public function info(){
  111. $incode = isset($this->post['wsm_in_code'])&&$this->post['wsm_in_code']!="" ? trim($this->post['wsm_in_code']) :"";
  112. if($incode==""){
  113. return error_show(1004,"参数wsm_in_code 不为空");
  114. }
  115. $info = Db::name("purchease_in")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  116. if(empty($info)){
  117. return error_show(1004,"未找到数据");
  118. }
  119. $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b","a.supplierNo=b.code")
  120. ->leftJoin("warehouse_addr c","a.wsm_code=c.wsm_code and c.is_del=0")
  121. ->where(["a.wsm_code"=>$info['wsm_code']])->field("a.name as wsm_name,b.name,b.code,c.wsm_name as wsm_contactor,c.wsm_mobile,c.wsm_addr,c.addr_code")->find();
  122. $info['wsm_name'] =isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name']:"";
  123. $info['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
  124. $info['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";
  125. $info['wsm_contactor'] =isset($wsmcode['wsm_contactor']) ? $wsmcode['wsm_contactor']:"";
  126. $info['wsm_mobile'] =isset($wsmcode['wsm_mobile']) ? $wsmcode['wsm_mobile']:"";
  127. $data['addr_code'] =isset($wsmcode['addr_code']) ? $wsmcode['addr_code']:"";
  128. $data['wsm_addr'] =isset($wsmcode['addr_code']) ? GetAddr($wsmcode['addr_code']):"";
  129. $data['wsm_addr'].=isset($wsmcode['wsm_addr']) ? $wsmcode['wsm_addr']:"";
  130. $check = Db::name("purchease_info")->where(['wsm_in_code'=>$incode,"is_del"=>0])->select();
  131. $info['checkinfo']= $check;
  132. $return = Db::name("purchease_return")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  133. $info['return']= $return;
  134. return app_show(0,'获取成功',$info);
  135. }
  136. public function check(){
  137. $incode = isset($this->post['wsm_in_code'])&&$this->post['wsm_in_code']!="" ? trim($this->post['wsm_in_code']) :"";
  138. if($incode==""){
  139. return error_show(1004,"参数wsm_in_code 不为空");
  140. }
  141. $info = Db::name("purchease_in")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  142. if(empty($info)){
  143. return error_show(1004,"未找到数据");
  144. }
  145. if($info['status']!=1){
  146. return error_show(1004,"发货单状态有误");
  147. }
  148. $order_num = isset($this->post['order_num']) && $this->post['order_num']!==''?intval($this->post['order_num'])
  149. :"";
  150. if($order_num===""){
  151. return error_show(1004,"参数 order_num 不为空");
  152. }
  153. $error_list = isset($this->post['error_list']) && $this->post['error_list']!==''?$this->post['error_list']:"";
  154. // $wait_num = isset($this->post['wait_num']) && $this->post['wait_num']!==''?intval($this->post['wait_num'])
  155. // :"";
  156. // if($wait_num===''){
  157. // return error_show(1004,"参数 wait_num 不为空");
  158. // }
  159. $result = GetUserInfo($this->post['token']);
  160. if((!empty($result) && $result['code']!=0) ||empty($result) ){
  161. return error_show($result['code'],$result['message']);
  162. }
  163. $userinfo = $result['data'];
  164. Db::startTrans();
  165. try{
  166. $order = ["order_code"=>$incode,"status"=>$info['status'],"action_remark"=>'',"action_type"=>"edit"];
  167. $info['wsm_num'] = $order_num;
  168. $info['wait_num'] = $info['send_num'];
  169. $info['checkid'] = $userinfo['id'];
  170. $info['check_name'] = $userinfo['nickname'];
  171. $info['status'] =2;
  172. $info['error_num'] = $info['send_num']-$order_num;
  173. $info['updatetime'] = date("Y-m-d H:i:s");
  174. $up =Db::name("purchease_in")->save($info);
  175. if($up){
  176. ActionLog::logAdd($this->post['token'],$order,"rkd",2,$this->post);
  177. if(!empty($error_list)){
  178. $data=[];
  179. foreach ($error_list as $value ){
  180. $temp=[];
  181. $temp['wsm_in_code']=$info['wsm_in_code'];
  182. $temp['num']=$value['num'];
  183. $temp['error_code']=$value['error_code'];
  184. $temp['error_img']=$value['error_img'];
  185. $temp['remark']=$value['remark'];
  186. $temp['is_del']=0;
  187. $temp['addtime']=date("Y-m-d H:i:s");
  188. $temp['updatetime']=date("Y-m-d H:i:s");
  189. $data[]=$temp;
  190. }
  191. $derr= Db::name("purchease_info")->insertAll($data);
  192. // echo Db::name("purchease_info")->getLastSql();
  193. if($derr){
  194. Db::commit();
  195. return app_show(0,"验货完成");
  196. }else{
  197. Db::rollback();
  198. return error_show(1002,"验货数据保存失败");
  199. }
  200. }
  201. Db::commit();
  202. return app_show(0,"验货完成");
  203. }
  204. Db::rollback();
  205. return error_show(1002,"验货数据保存失败");
  206. }catch (\Exception $e){
  207. Db::rollback();
  208. return error_show(1002,$e->getMessage());
  209. }
  210. }
  211. public function status(){
  212. $incode = isset($this->post['wsm_in_code'])&&$this->post['wsm_in_code']!="" ? trim($this->post['wsm_in_code']) :"";
  213. if($incode==""){
  214. return error_show(1004,"参数wsm_in_code 不为空");
  215. }
  216. $info = Db::name("purchease_in")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  217. if(empty($info)){
  218. return error_show(1004,"未找到数据");
  219. }
  220. $status = isset($this->post['status'])&&$this->post['status']!=="" ? intval($this->post['status']):"";
  221. if($status===""){
  222. return error_show(1004,"参数status 不为空");
  223. }
  224. if($info['status']==3){
  225. return error_show(1004,"入库单已完成");
  226. }
  227. $remark = isset($this->post['remark'])&&$this->post['remark']!="" ? trim($this->post['remark']) :"";
  228. Db::rollback();
  229. try{
  230. $order = ["order_code"=>$incode,"status"=>$info['status'],"action_remark"=>'',"action_type"=>"status"];
  231. $info['status'] = $status;
  232. $info['remark'] = $remark;
  233. $info['updatetime'] = date("Y-m-d H:i:s");
  234. $update = Db::name("purchease_in")->save($info);
  235. if($update){
  236. ActionLog::logAdd($this->post['token'],$order,"rkd",$status,$this->post);
  237. if($status==0){
  238. $cgdinfo=Db::name("purchease_order")->where(['cgdNo'=>$info['cgdNo'],"is_del"=>0])->find();
  239. if(empty($cgdinfo)){
  240. Db::rollback();
  241. return error_show(1002,"未找到采购单数据");
  242. }
  243. $order = ["order_code"=>$info['cgdNo'],"status"=>$cgdinfo['status'],"action_remark"=>'',"action_type"=>"edit"];
  244. $cgdinfo['wsend_num']+=$info['send_num'];
  245. $cgdinfo['send_num']-=$info['send_num'];
  246. $cgdinfo['send_status']=$cgdinfo['wsend_num']==0 ? 3:($cgdinfo['send_num']==0 ?1:2);
  247. $cgdinfo['status']=$cgdinfo['wsend_num']==0 ? 3:($cgdinfo['send_num']==0 ?1:2);
  248. $cgdinfo['updatetime']=date("Y-m-d H:i:s");
  249. $up=Db::name("purchease_order")->save($cgdinfo);
  250. if($up){
  251. ActionLog::logAdd($this->post['token'],$order,"cgd", $cgdinfo['status'],$cgdinfo);
  252. Db::commit();
  253. return app_show(0,'取消成功');
  254. }else{
  255. Db::rollback();
  256. return error_show(1002,"取消失败");
  257. }
  258. }
  259. if($status==1){
  260. $cgdinfo=Db::name("purchease_order")->where(['cgdNo'=>$info['cgdNo'],"is_del"=>0])->find();
  261. if(empty($cgdinfo)){
  262. Db::rollback();
  263. return error_show(1002,"未找到采购单数据");
  264. }
  265. $order = ["order_code"=>$info['cgdNo'],"status"=>$cgdinfo['status'],"action_remark"=>'',"action_type"=>"edit"];
  266. $cgdinfo['wsend_num']-=$info['send_num'];
  267. $cgdinfo['send_num']+=$info['send_num'];
  268. $cgdinfo['send_status']=$cgdinfo['wsend_num']==0 ? 3:($cgdinfo['send_num']==0 ?1:2);
  269. $cgdinfo['status']=$cgdinfo['wsend_num']==0 ? 3:($cgdinfo['send_num']==0 ?1:2);
  270. $cgdinfo['updatetime']=date("Y-m-d H:i:s");
  271. $up=Db::name("purchease_order")->save($cgdinfo);
  272. if($up){
  273. ActionLog::logAdd($this->post['token'],$order,"cgd", $cgdinfo['status'],$cgdinfo);
  274. Db::commit();
  275. return app_show(0,'发货成功');
  276. }else{
  277. Db::rollback();
  278. return error_show(1002,"发货失败");
  279. }
  280. }
  281. if($status==4){
  282. $cgdinfo=Db::name("purchease_order")->where(['cgdNo'=>$info['cgdNo'],"is_del"=>0])->find();
  283. if(empty($cgdinfo)){
  284. Db::rollback();
  285. return error_show(1002,"未找到采购单数据");
  286. }
  287. $good = Db::name("good_stock")->where(["wsm_code"=>$info['wsm_code'],"good_type_code"=>$cgdinfo['good_type_code'],"is_del"=>0])->find();
  288. if(empty($good)) {
  289. $good=[
  290. "good_type_code"=>$cgdinfo['good_type_code'],
  291. "wsm_code"=>$info['wsm_code'],
  292. "usable_stock"=>0,
  293. "wait_out_stock"=>0,
  294. "total_stock"=>0,
  295. "addtime"=>date("Y-m-d H:i:s"),
  296. "updatetime"=>date("Y-m-d H:i:s"),
  297. ];
  298. $order = ["order_code"=>$good['good_type_code'],"status"=>1,"action_remark"=>'',"action_type"=>"create"];
  299. }else{
  300. $order = ["order_code"=>$good['good_type_code'],"status"=>1,"action_remark"=>'', "action_type"=>"edit"];
  301. }
  302. $good['usable_stock']+=$info['wsm_num'];
  303. $good['total_stock']=$good['usable_stock']+$good['wait_out_stock'];
  304. $good['updatetime'] = date("Y-m-d H:i:s");
  305. $upd= Db::name("good_stock")->save($good);
  306. if($upd){
  307. ActionLog::logAdd($this->post['token'],$order,"gst", 1,$info );
  308. Db::commit();
  309. return app_show(0,'商品入库成功');
  310. }else{
  311. Db::rollback();
  312. return error_show(1002,"商品入库失败");
  313. }
  314. }
  315. Db::commit();
  316. return app_show(0,"状态修改完成");
  317. }
  318. Db::rollback();
  319. return error_show(1002,"状态修改失败");
  320. }catch (\Exception $e){
  321. Db::rollback();
  322. return error_show(1002,"状态修改失败");
  323. }
  324. }
  325. /**
  326. * @return \think\response\Json|void
  327. * @throws \think\db\exception\DataNotFoundException
  328. * @throws \think\db\exception\DbException
  329. * @throws \think\db\exception\ModelNotFoundException
  330. */
  331. public function ReturnAdd(){
  332. $incode = isset($this->post['wsm_in_code'])&&$this->post['wsm_in_code']!="" ? trim($this->post['wsm_in_code']) :"";
  333. if($incode==""){
  334. return error_show(1004,"参数wsm_in_code 不为空");
  335. }
  336. $info = Db::name("purchease_in")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  337. if(empty($info)){
  338. return error_show(1004,"未找到数据");
  339. }
  340. $wsm_num = isset($this->post['wsm_num']) &&$this->post['wsm_num']!=="" ? intval($this->post['wsm_num']):"" ;
  341. if($wsm_num===""){
  342. return error_show(1004,"参数wsm_num 不为空");
  343. }
  344. $reissue_num = isset($this->post['reissue_num']) &&$this->post['reissue_num']!=="" ? intval($this->post['reissue_num']):"0" ;
  345. $return_num = isset($this->post['return_num']) &&$this->post['return_num']!=="" ? intval($this->post['return_num']):"0" ;
  346. $contactor = isset($this->post['contactor']) &&$this->post['contactor']!=="" ? trim($this->post['contactor']):"" ;
  347. if($contactor==""){
  348. return error_show(1004,"参数contactor 不为空");
  349. }
  350. $addr = isset($this->post['addr']) &&$this->post['addr']!=="" ? trim($this->post['addr']):"" ;
  351. if($addr==""){
  352. return error_show(1004,"参数addr 不为空");
  353. }
  354. $mobile = isset($this->post['mobile']) &&$this->post['mobile']!=="" ? trim($this->post['mobile']):"" ;
  355. if($mobile==""){
  356. return error_show(1004,"参数mobile 不为空");
  357. }
  358. $error_remark = isset($this->post['error_remark']) &&$this->post['error_remark']!=="" ? trim($this->post['error_remark']):"" ;
  359. $remark = isset($this->post['remark']) &&$this->post['remark']!=="" ? trim($this->post['remark']):"" ;
  360. $result = GetUserInfo($this->post['token']);
  361. if((!empty($result) && $result['code']!=0) ||empty($result) ){
  362. return error_show($result['code'],$result['message']);
  363. }
  364. $userinfo = $result['data'];
  365. Db::startTrans();
  366. try{
  367. $info['status'] =3;
  368. $info['updatetime'] = date("Y-m-d H:i:s");
  369. $up= Db::name("purchease_in")->save($info);
  370. if($up){
  371. $data=[
  372. "wsm_in_code"=>$incode,
  373. "wsm_num"=>$wsm_num,
  374. "reissue_num"=>$reissue_num,
  375. "return_num"=>$return_num,
  376. "return_contactor"=>$contactor,
  377. "return_addr"=>$addr,
  378. "return_mobile"=>$mobile,
  379. "error_remark"=>$error_remark,
  380. "post_code"=>"",
  381. "post_company"=>"",
  382. "remark"=>$remark ,
  383. "apply_id"=>$userinfo['id'],
  384. "apply_name"=>$userinfo['nickname'],
  385. "status"=>$return_num>0?0:1,
  386. "addtime"=>date("Y-m-d H:i:s"),
  387. "updatetime"=>date("Y-m-d H:i:s")
  388. ];
  389. $res = Db::name("purchease_return")->insert($data);
  390. if($res){
  391. Db::commit();
  392. return app_show(0,"验货审核完成");
  393. }else{
  394. Db::rollback();
  395. return error_show(1002,"验货审核失败");
  396. }
  397. }
  398. }catch (\Exception $e){
  399. Db::rollback();
  400. return error_show(1002,$e->getMessage());
  401. }
  402. }
  403. public function ReturnSend(){
  404. $incode = isset($this->post['wsm_in_code'])&&$this->post['wsm_in_code']!="" ? trim($this->post['wsm_in_code']) :"";
  405. if($incode==""){
  406. return error_show(1004,"参数wsm_in_code 不为空");
  407. }
  408. $info = Db::name("purchease_in")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  409. if(empty($info)){
  410. return error_show(1004,"未找到发货单数据");
  411. }
  412. $return = Db::name("purchease_return")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
  413. if(empty($return)){
  414. return error_show(1004,"未找到退货单数据");
  415. }
  416. $post_code = isset($this->post['post_code']) &&$this->post['post_code']!=="" ? trim($this->post['post_code']):"" ;
  417. if($post_code==""){
  418. return error_show(1004,"参数 post_code 不能为空");
  419. }
  420. $post_company = isset($this->post['post_company']) &&$this->post['post_company']!=="" ? trim($this->post['post_company']):"" ;
  421. if($post_company==""){
  422. return error_show(1004,"参数 post_company 不能为空");
  423. }
  424. $remark = isset($this->post['remark']) &&$this->post['remark']!=="" ? trim($this->post['remark']):"" ;
  425. $data=[
  426. "post_code"=>$post_code,
  427. "post_company"=>$post_company,
  428. "remark"=>$remark,
  429. "status"=>1,
  430. "updatetime"=>date("Y-m-d H:i:s")
  431. ];
  432. $up =Db::name("purchease_return")->where($return)->save($data);
  433. if($up){
  434. return app_show(0,"退货发货完成");
  435. }else{
  436. return error_show(0,"退货发货失败");
  437. }
  438. }
  439. }