Resign.php 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034
  1. <?php
  2. /**
  3. * 备库申请
  4. */
  5. namespace app\admin\controller;
  6. use app\admin\model\ActionLog;
  7. use app\admin\model\DataGroup as DataGroupModel;
  8. use app\admin\model\GoodLog;
  9. use app\admin\model\ProcessOrder;
  10. use think\facade\Cache;
  11. use think\facade\Config;
  12. use think\facade\Db;
  13. use think\App;
  14. //备货
  15. class Resign extends Base
  16. {
  17. public function __construct(App $app)
  18. {
  19. parent::__construct($app);
  20. }
  21. public function list(){
  22. $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']):"1";
  23. $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']):"10";
  24. $where =[['p.is_del',"=",0]];
  25. $bkcode = isset($this->post['bk_code']) && $this->post['bk_code']!="" ? trim($this->post['bk_code']):"";
  26. if($bkcode!=""){
  27. //$where['p.bk_code'] = $bk_code;
  28. $where[]=['p.bk_code',"like","%{$bkcode}%"];
  29. }
  30. $good_code = isset($this->post['good_code']) && $this->post['good_code']!="" ? trim($this->post['good_code']):"";
  31. if($good_code!=""){
  32. // $where['p.good_code'] = $good_code;
  33. $where[]=['p.spuCode',"like","%{$good_code}%"];
  34. }
  35. $good_type_code = isset($this->post['good_type_code']) && $this->post['good_type_code']!="" ? trim($this->post['good_type_code']):"";
  36. if($good_type_code!=""){
  37. // $where['p.good_type_code'] = $good_type_code;
  38. $where[]=['p.good_type_code',"like","%{$good_type_code}%"];
  39. }
  40. $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code']!="" ? trim($this->post['wsm_code']):"";
  41. if($wsm_code!=""){
  42. //$where['p.wsm_code'] = $wsm_code;
  43. $where[]=['p.wsm_code',"=",$wsm_code];
  44. }
  45. $good_name = isset($this->post['good_name']) && $this->post['good_name']!="" ? trim($this->post['good_name']):"";
  46. if($good_name!=""){
  47. // $where['p.good_name'] = Db::raw(" like '%{$good_name}%'");
  48. $where[]=['p.good_name',"like","%{$good_name}%"];
  49. }
  50. $apply_name = isset($this->post['apply_name']) && $this->post['apply_name']!="" ? trim($this->post['apply_name']):"";
  51. if($apply_name!=""){
  52. // $where['p.apply_name'] =Db::Raw("like '%{$apply_name}%'");
  53. $where[]=['p.apply_name',"like","%{$apply_name}%"];
  54. }
  55. $status = isset($this->post['status']) && $this->post['status']!=="" ? intval($this->post['status']):"";
  56. if($status!==""){
  57. // $where['p.status'] = $status;
  58. $where[]=['p.status',"=",$status];
  59. }
  60. $start = isset($this->post['start']) && $this->post['start']!=="" ? $this->post['start']:"";
  61. if($start!==""){
  62. //$where['p.addtime'] = Db::Raw(">= '{$start}'");
  63. $where[]=['p.addtime',">=",$start];
  64. }
  65. $end = isset($this->post['end']) && $this->post['end']!=="" ? $this->post['end']:"";
  66. if($end!==""){
  67. // $where['p.addtime'] = Db::Raw("<= '{$end}'");
  68. $where[]=['p.addtime',"<=",$end];
  69. }
  70. // $role=$this->checkRole();
  71. $condition='';
  72. // if(!empty($role['write']) && $this->uid!=""){
  73. // // $where[]=["a.apply_id","in",$role['write']];
  74. // $condition .="p.cgderid = {$this->uid} or p.apply_id in (".implode(',',$role['write']).")";
  75. // }
  76. //超管、库管、库管-张凯旋、boss能看到所有,其他人只能看到自己创建的和身为采购员的单子
  77. $super_roleid = array_merge([1, 33], config('app.wsm_cgder_role'));
  78. if (!in_array($this->roleid, $super_roleid)) {
  79. $role = $this->checkDataShare();
  80. if (!empty($role[DataGroupModel::$type_全部])) $condition .="p.cgderid = {$this->uid} or p.apply_id in (".implode(',',$role[DataGroupModel::$type_全部]).")";
  81. }
  82. $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
  83. if ($company_name !== "") $where[] = ["p.apply_id", 'in', get_company_item_user_by_name($company_name)];
  84. // if(!empty($role['platform']) ){
  85. // $where[]=["p.platform_id","in",$role['platform']];
  86. // }
  87. $count=Db::name("purchease")
  88. ->alias('p')
  89. ->leftJoin("depart_user u", "u.uid=p.apply_id AND u.is_del=0")
  90. ->where($where)
  91. ->where($condition)
  92. ->count();
  93. $total = ceil($count/$size);
  94. $page = $page >= $total ? $total : $page;
  95. $list = Db::name("purchease")
  96. ->alias('p')
  97. ->field('p.*,u.itemid')
  98. ->leftJoin("depart_user u", "u.uid=p.apply_id AND u.is_del=0")
  99. ->where($where)
  100. ->where($condition)
  101. ->page($page,$size)
  102. ->order("p.addtime desc")
  103. ->cursor();
  104. $data=[];
  105. foreach ($list as $value){
  106. $value['wsm_name']="";
  107. $value['wsm_supplier']="";
  108. $value['wsm_supplierNo']="";
  109. if($value['wsm_code']!=""){
  110. $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b","a.supplierNo=b.code")
  111. ->where(["a.wsm_code"=>$value['wsm_code']])->field("a.name as wsm_name,b.name,b.code")->find();
  112. $value['wsm_name'] =isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name']:"";
  113. $value['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
  114. $value['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";
  115. }
  116. $value['file_name'] ='';
  117. if($value['file_url']){
  118. $file= basename($value['file_url']);
  119. $value['file_name'] =substr($file,0,strripos($file,"_"));
  120. }
  121. $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
  122. //是否具有编辑权限
  123. // $value['is_allow_update'] = 0;
  124. // if (in_array($this->roleid, $super_roleid) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
  125. $data[]=$value;
  126. }
  127. return app_show(0,"获取成功",["count"=>$count,"list"=>$data]);
  128. }
  129. public function add(){
  130. $token = isset($this->post['token']) ? trim($this->post['token']) : "";
  131. if($token==""){
  132. return error_show(101,'token不能为空');
  133. }
  134. $good_code = isset($this->post['good_code']) && $this->post['good_code']!=""?trim($this->post['good_code']):"";
  135. if($good_code==""){
  136. return error_show(1004,"参数good_code不能为空");
  137. }
  138. $good_num = isset($this->post['good_num'])&& $this->post['good_num']!==""? intval($this->post['good_num']):"";
  139. if($good_num===""){
  140. return error_show(1004,"参数good_code不能为空");
  141. }
  142. $file_url = isset($this->post['file_url'])&& $this->post['file_url']!==""? trim($this->post['file_url']):"";
  143. if($file_url===""){
  144. return error_show(1004,"参数file_url不能为空");
  145. }
  146. $mark =isset($this->post['remark'])&&$this->post['remark']!=""?trim($this->post['remark']):"";
  147. if($mark==""){
  148. return error_show(1004,"参数remark不能为空");
  149. }
  150. $good =Db::name("good_basic")->where([["spuCode","=",$good_code],["is_del","=",0]])->find();
  151. if($good==false){
  152. return error_show(1004,"未找到商品数据");
  153. }
  154. $supplier=Db::name("supplier")->where("code","=",$good['supplierNo'])->find();
  155. if($supplier==false) return error_show(1004,"未找到供应商数据");
  156. // $bk= Db::name("purchease")->where([["spuCode","=",$good_code],["status","<>",2],["is_del","=",0]])->find();
  157. // if($bk!=false) return error_show(1004,"存在未完成备库单数据");
  158. // $cgd =Db::name("purchease_order")->where([["spuCode","=",$good_code],["status","in",[0,1]],["is_del","=",0]])->find();
  159. // if($cgd!=false) return error_show(1004,"存在未完成采购单数据");
  160. //查验仓库库存数量
  161. // $stock =Db::name("good_stock")->alias("a")->leftJoin("warehouse_info b","a.wsm_code=b.wsm_code")->where
  162. // (["spuCode"=>$good_code, "a.is_del"=>0,"a.status"=>1,"b.companyNo"=>$good['companyNo']])->field("a.id,a.usable_stock,a.wait_out_stock")->find();
  163. // if(isset($stock['usable_stock'])&& $stock['usable_stock']!=0){
  164. // return error_show(1003,"库存数量为 {$stock['usable_stock']} 无法备库");
  165. // }
  166. //校验数量
  167. $goodnake = Db::name("good_nake")
  168. ->field('id,min_num')
  169. ->where([["spuCode", "=", $good_code], ["is_del", "=", 0]])
  170. ->order("min_num asc")
  171. ->find();
  172. if (empty($goodnake)) return error_show(1004, '未找到商品成本数据');
  173. $minnum = $goodnake['min_num'];
  174. if($good['is_stock']==1 && $good['stock_moq']>0){
  175. $minnum =$good['stock_moq'];
  176. }
  177. if ($minnum > $good_num) return error_show(1004, '该商品最低采购数量为' . $minnum);
  178. $lastime = isset($this->post['lastime'])&&$this->post['lastime']!="" ? $this->post['lastime']:"";
  179. if($lastime===""){
  180. return error_show(1004,"参数lastime不能为空");
  181. }
  182. // $data = GetUserInfo($token);
  183. // if((!empty($data) && $data['code']!=0) ||empty($data) ){
  184. // return error_show($data['code'],$data['message']);
  185. // }
  186. // $userinfo = $data['data'];
  187. $bk_code=makeNo("BK");
  188. $info = [
  189. "spuCode"=>$good['spuCode'],
  190. "good_name"=>$good['good_name'],
  191. "good_num"=>$good_num,
  192. "wsm_code"=>'',
  193. "companyNo"=>$good['companyNo'],
  194. "supplierNo"=>$good['supplierNo'],
  195. "file_url"=>$file_url,
  196. "lasttime"=>$lastime,
  197. "status"=>1,
  198. "remark"=>$mark,
  199. "cgder" => $good['charger'],//$good['creater'],
  200. "cgderid" => $good['chargerid'],//$good['createrid'],
  201. "addtime"=>date("Y-m-d H:i:s"),
  202. "updatetime"=>date("Y-m-d H:i:s"),
  203. "apply_id"=>$this->uid,
  204. "apply_name"=>$this->uname,
  205. "bk_code"=>$bk_code
  206. ];
  207. $in = Db::name("purchease")->insert($info,true);
  208. if($in>0){
  209. //备库单,推给供应商负责人
  210. $order = ["order_type" => 'BHD', "order_code" => $bk_code, "order_id" => $in, "order_status" => 1, "before_status" => 1, 'wait_id' => $supplier['personid'], 'wait_name' => $supplier['person']];
  211. ProcessOrder::AddProcess(['id' => $this->uid, 'nickname' => $this->uname], $order);
  212. $ste = ["order_code" => $bk_code, "status" => 0, "action_remark" => '', "action_type" => "create"];
  213. ActionLog::logAdd(['id' => $this->uid, 'nickname' => $this->uname], $ste, "BHD", 1, $info);
  214. //台账记录
  215. Db::name('standing_book')
  216. ->insert([
  217. 'standBookNo' => makeNo("IO"),
  218. 'bk_code' => $bk_code,
  219. 'purchease_id' => $in,
  220. 'addtime' => date('Y-m-d H:i:s'),
  221. 'updatetime' => date('Y-m-d H:i:s')
  222. ]);
  223. return app_show(0,"新建成功",['bk_code'=>$bk_code]);
  224. }else{
  225. return error_show(1005,"新建失败");
  226. }
  227. }
  228. /**
  229. * @return \think\response\Json|void
  230. * @throws \think\db\exception\DataNotFoundException
  231. * @throws \think\db\exception\DbException
  232. * @throws \think\db\exception\ModelNotFoundException
  233. */
  234. public function copy(){
  235. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  236. if($id==""){
  237. return error_show(1001,'id不能为空');
  238. }
  239. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  240. if(empty($info)){
  241. return error_show(1002,'未找到数据');
  242. }
  243. // $data = GetUserInfo($this->post['token']);
  244. // if((!empty($data) && $data['code']!=0) ||empty($data) ){
  245. // return error_show($data['code'],$data['message']);
  246. // }
  247. //查验仓库库存数量
  248. // $stock =Db::name("good_stock")->alias("a")->leftJoin("warehouse_info b","a.wsm_code=b.wsm_code")->where
  249. // (["spuCode"=>$info['spuCode'], "a.is_del"=>0,"a.status"=>1,"b.companyNo"=>$info['companyNo']])->field("a.id,a.usable_stock,a.wait_out_stock")->find();
  250. // if(isset($stock['usable_stock'])&& $stock['usable_stock']!=0){
  251. // return error_show(1003,"库存数量为 {$stock['usable_stock']} 无法备库");
  252. // }
  253. // $userinfo = $data['data'];
  254. $bk_code=makeNo("BK");
  255. $info['bk_code']=$bk_code;
  256. $info['status']=1;
  257. $info['addtime']=date("Y-m-d H:i:s");
  258. $info['updatetime']=date("Y-m-d H:i:s");
  259. $info['apply_id']=$this->uid;
  260. $info['apply_name']=$this->uname;
  261. unset($info['id']);
  262. $in = Db::name("purchease")->insert($info,true);
  263. if($in>0){
  264. $supplier = Db::name('supplier')
  265. ->field('id,person,personid')
  266. ->where('code', $info['supplierNo'])
  267. ->findOrEmpty();
  268. $order = ["order_type" => 'BHD', "order_code" => $bk_code, "order_id" => $in, "order_status" => 1, "before_status" => 1, 'wait_id' => $supplier['personid'], 'wait_name' => $supplier['person']];
  269. ProcessOrder::AddProcess(['id' => $this->uid, 'nickname' => $this->uname], $order);
  270. $ste = ["order_code"=>$bk_code,"status"=>0,"action_remark"=>'',"action_type"=>"create"];
  271. ActionLog::logAdd(['id' => $this->uid, 'nickname' => $this->uname],$ste,"BHD",1,$info);
  272. return app_show(0,"新建成功",['bk_code'=>$bk_code]);
  273. }else{
  274. return error_show(1005,"新建失败");
  275. }
  276. }
  277. /**
  278. * @return \think\response\Json|void
  279. * @throws \think\db\exception\DataNotFoundException
  280. * @throws \think\db\exception\DbException
  281. * @throws \think\db\exception\ModelNotFoundException
  282. */
  283. public function info(){
  284. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  285. if($id==""){
  286. return error_show(1001,'id不能为空');
  287. }
  288. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  289. if(empty($info)){
  290. return error_show(1002,'未找到数据');
  291. }
  292. $good =Db::name("good_basic")->where([["spuCode","=", $info['spuCode']],["is_del","=",0]])->find();
  293. if($good==false){
  294. return error_show(1004,"未找到商品数据");
  295. }
  296. $int= isset($good['cat_id']) && $good['cat_id'] !=0 ? made($good['cat_id']):[];
  297. $metal = \think\facade\Config::get("noble");
  298. $info['noble_metal']= isset($metal[$good['noble_metal']]) && $good['noble_metal'] !=''?$metal[$good['noble_metal']]:'';
  299. $info['noble_id']= isset($good['noble_metal']) && $good['noble_metal'] !='' ? $good['noble_metal']:"";
  300. $info['wsm_name']="";
  301. $info['file_name'] ='';
  302. if($info['file_url']){
  303. $file= basename($info['file_url']);
  304. $info['file_name'] =substr($file,0,strripos($file,"_"));
  305. }
  306. if($info['wsm_code']!=""){
  307. $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b","a.supplierNo=b.code")
  308. ->where(["a.wsm_code"=>$info['wsm_code']])->field("a.name as wsm_name,b.name,b.code")->find();
  309. $info['wsm_name'] =isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name']:"";
  310. $info['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
  311. $info['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";
  312. }
  313. $supplier =Db::name("supplier")->where(["code"=>$info['supplierNo']])->find();
  314. $info['supplier_name'] = isset($supplier['name'])?$supplier['name']:"";
  315. $company =Db::name("business")->where(["companyNo"=>$info['companyNo']])->find();
  316. $info['company_name'] = isset($company['company'])?$company['company']:"";
  317. $info['can']=$int;
  318. return app_show(0,"获取成功",$info);
  319. }
  320. public function edit(){
  321. $token = isset($this->post['token']) ? trim($this->post['token']) : "";
  322. if($token==""){
  323. return error_show(101,'token不能为空');
  324. }
  325. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  326. if($id==""){
  327. return error_show(1001,'id不能为空');
  328. }
  329. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  330. if(empty($info)){
  331. return error_show(1002,'未找到数据');
  332. }
  333. $customer = isset($this->post['customer_code'])&&$this->post['customer_code']!="" ?trim($this->post['customer_code']):"";
  334. if($customer==""){
  335. return error_show(1004,"参数customer_code不能为空");
  336. }
  337. $supplier = isset($this->post['supplier_code'])&&$this->post['supplier_code']!="" ?trim($this->post['supplier_code']):"";
  338. if($supplier==""){
  339. return error_show(1004,"参数supplier_code不能为空");
  340. }
  341. $good_code = isset($this->post['good_code']) && $this->post['good_code']!=""?trim($this->post['good_code']):"";
  342. if($good_code==""){
  343. return error_show(1004,"参数good_code不能为空");
  344. }
  345. $good_num = isset($this->post['good_num'])&& $this->post['good_num']!==""? intval($this->post['good_num']):"";
  346. if($good_num===""){
  347. return error_show(1004,"参数good_code不能为空");
  348. }
  349. $file_url = isset($this->post['file_url'])&& $this->post['file_url']!==""? trim($this->post['file_url']):"";
  350. if($file_url===""){
  351. return error_show(1004,"参数file_url不能为空");
  352. }
  353. $mark =isset($this->post['remark'])&&$this->post['remark']!=""?trim($this->post['remark']):"";
  354. if($mark==""){
  355. return error_show(1004,"参数remark不能为空");
  356. }
  357. $good =Db::name("good_basic")->where([["spuCode","=", $good_code],["is_del","=",0]])->find();
  358. if($good==false){
  359. return error_show(1004,"未找到商品数据");
  360. }
  361. // $data = GetUserInfo($token);
  362. // if((!empty($data) && $data['code']!=0) ||empty($data) ){
  363. // return error_show($data['code'],$data['message']);
  364. // }
  365. // $userinfo = $data['data'];
  366. $up = [
  367. "spuCode"=>$good_code,
  368. "good_name"=>$good['good_name'],
  369. "good_num"=>$good_num,
  370. // "skuCode"=>$good['skuCode'],
  371. "companyNo"=>$customer,
  372. "supplierNo"=>$supplier,
  373. "file_url"=>$file_url,
  374. "remark"=>$mark,
  375. "updatetime"=>date("Y-m-d H:i:s"),
  376. ];
  377. $in = Db::name("purchease")->where($info)->save($up);
  378. if($in){
  379. $order=["order_type"=>'BHD',"order_code"=>$info['bk_code'],"order_id"=>$info['id'],"order_status"=>$info['status'],"before_status"=>1, 'holder_id' => $info['apply_id']];
  380. ProcessOrder::AddProcess($this->post['token'],$order);
  381. $ste = ["order_code"=>$info['bk_code'],"status"=>$info['status'],"action_remark"=>'',"action_type"=>"edit"];
  382. ActionLog::logAdd($this->post['token'],$ste,"BHD",$info['status'],$up);
  383. return app_show(0,"更新成功",['bk_code'=>$info['bk_code']]);
  384. }else{
  385. return error_show(1005,"更新失败");
  386. }
  387. }
  388. public function delete(){
  389. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  390. if($id==""){
  391. return error_show(1001,'id不能为空');
  392. }
  393. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  394. if(empty($info)){
  395. return error_show(1002,'未找到数据');
  396. }
  397. $info['is_del']=1;
  398. $info['updatetime']=date("Y-m-d H:i:s");
  399. $up = Db::name("purchease")->update($info);
  400. if($up){
  401. $order=["order_type"=>'BHD',"order_code"=>$info['bk_code'],"order_id"=>$info['id'],"order_status"=>$info['status']];
  402. ProcessOrder::workdel($order);
  403. $ste = ["order_code"=>$info['bk_code'],"status"=>$info['status'],"action_remark"=>'',"action_type"=>"delete"];
  404. ActionLog::logAdd($this->post['token'],$ste,"BHD",$info['status'],$info);
  405. }
  406. return $up ? app_show(0,"删除成功"):error_show(1005,"删除失败");
  407. }
  408. public function status(){
  409. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  410. if($id==""){
  411. return error_show(1001,'id不能为空');
  412. }
  413. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  414. if(empty($info)){
  415. return error_show(1002,'未找到数据');
  416. }
  417. $status = isset($this->post['status'])&&$this->post['status']!=='' ? intval($this->post['status']) : "";
  418. if($status===""){
  419. return error_show(1001,'status不能为空');
  420. }
  421. $temp = $info['status'];
  422. $info['status']= $status;
  423. $info['updatetime']=date("Y-m-d H:i:s");
  424. $up = Db::name("purchease")->update($info);
  425. if($up){
  426. if($status==1){
  427. $supplier = Db::name('supplier')
  428. ->field('id,person,personid')
  429. ->where('code', $info['supplierNo'])
  430. ->findOrEmpty();
  431. $order = ["order_type" => 'BHD', "order_code" => $info['bk_code'], "order_id" => $info['id'], "order_status" => $status, "before_status" => $temp,'wait_id' => $supplier['personid'], 'wait_name' => $supplier['person']];
  432. }else $order = ["order_type" => 'BHD', "order_code" => $info['bk_code'], "order_id" => $info['id'], "order_status" => $status, "before_status" => $temp, 'holder_id' => $info['apply_id']];
  433. $order = ["order_type" => 'BHD', "order_code" => $info['bk_code'], "order_id" => $info['id'], "order_status" => $status, "before_status" => $temp, 'holder_id' => $info['apply_id']];
  434. ProcessOrder::AddProcess($this->post['token'],$order);
  435. $ste = ["order_code"=>$info['bk_code'],"status"=> $temp,"action_remark"=>'',"action_type"=>"status"];
  436. ActionLog::logAdd($this->post['token'],$ste,"BHD",$status,$info);
  437. return app_show(0,"更新成功",['bk_code'=>$info['bk_code']]);
  438. }else{
  439. return error_show(1005,"更新失败");
  440. }
  441. }
  442. public function addFeed(){
  443. $token = isset($this->post['token']) ? trim($this->post['token']) : "";
  444. if($token==""){
  445. return error_show(101,'token不能为空');
  446. }
  447. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  448. if($id==""){
  449. return error_show(1001,'id不能为空');
  450. }
  451. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  452. if(empty($info)){
  453. return error_show(1002,'未找到备库数据');
  454. }
  455. if($info['status']!=1){
  456. return error_show(1002,'备库数据状态有误');
  457. }
  458. $num = isset($this->post['num']) && $this->post['num']!=="" ? intval($this->post['num']):"";
  459. if($num==''){
  460. return error_show(1002,'参数num 不能为空或零');
  461. }
  462. $expecttime = isset($this->post['expecttime'])&&$this->post['expecttime']!=''?$this->post['expecttime'] :"";
  463. if($expecttime==''){
  464. return error_show(1002,'参数expecttime 不能为空');
  465. }
  466. $wsm_type = isset($this->post['wsm_type'])&&$this->post['wsm_type']!="" ? intval($this->post['wsm_type']):"";
  467. if($wsm_type==""){
  468. return error_show(1002,'参数wsm_type 不能为空');
  469. }
  470. $wsm_code = isset($this->post['wsm_code'])&&$this->post['wsm_code']!="" ? trim($this->post['wsm_code']):"";
  471. if($wsm_code==""){
  472. return error_show(1002,'参数wsm_code 不能为空');
  473. }
  474. $wsminfo = Db::name("warehouse_info")->where(['wsm_code'=>$wsm_code,"wsm_type"=>$wsm_type,"is_del"=>0])->find();
  475. if(empty($wsminfo)){
  476. return error_show(1002,'未找到仓库数据');
  477. }
  478. $supplierNo = isset($this->post['supplierNo'])&&$this->post['supplierNo']!="" ? trim($this->post['supplierNo']):"";
  479. if($supplierNo==""){
  480. return error_show(1002,'参数supplierNo 不能为空');
  481. }
  482. $supplie = Db::name("supplier")->where(['code'=>$supplierNo,"is_del"=>0])->find();
  483. if(empty($supplie)){
  484. return error_show(1002,'未找到供应商');
  485. }
  486. $good_price = isset($this->post['good_price'])&&$this->post['good_price']!=="" ? $this->post['good_price']:"";
  487. if($good_price===""){
  488. return error_show(1002,'参数good_price 不能为空');
  489. }
  490. $pakge_fee = isset($this->post['pakge_fee'])&&$this->post['pakge_fee']!=="" ? $this->post['pakge_fee']:0;
  491. $cert_fee = isset($this->post['cert_fee'])&&$this->post['cert_fee']!=="" ? $this->post['cert_fee']:0;
  492. $open_fee = isset($this->post['open_fee'])&&$this->post['open_fee']!=="" ? $this->post['open_fee']:0;
  493. $delivery_fee = isset($this->post['delivery_fee'])&&$this->post['delivery_fee']!=="" ? $this->post['delivery_fee']:0;
  494. $mark_fee = isset($this->post['mark_fee'])&&$this->post['mark_fee']!=="" ? $this->post['mark_fee']:0;
  495. $teach_fee = isset($this->post['teach_fee'])&&$this->post['teach_fee']!=="" ? $this->post['teach_fee']:0;
  496. $nake_fee = isset($this->post['nake_fee'])&&$this->post['nake_fee']!=="" ? $this->post['nake_fee']:0;
  497. $demo_fee = isset($this->post['demo_fee'])&&$this->post['demo_fee']!=="" ? $this->post['demo_fee']:0;
  498. $weight = isset($this->post['weight'])&&$this->post['weight']!=="" ? $this->post['weight']:0;
  499. $diff_weight =isset($this->post['diff_weight'])&&$this->post['diff_weight']!=="" ? $this->post['diff_weight']:0;
  500. $diff_price =isset($this->post['diff_price'])&&$this->post['diff_price']!=="" ? $this->post['diff_price']:0;
  501. $remark =isset($this->post['remark'])&&$this->post['remark']!=="" ? $this->post['remark']:'';
  502. $data = GetUserInfo($token);
  503. if((!empty($data) && $data['code']!=0) ||empty($data) ){
  504. return error_show($data['code'],$data['message']);
  505. }
  506. $userinfo = $data['data'];
  507. $data=[
  508. "bkcode"=>$info['bk_code'],
  509. "warehouse"=>$wsm_code,
  510. "wsm_type"=>$wsm_type,
  511. "num"=>$num,
  512. 'expecttime'=>$expecttime,
  513. 'supplier'=>isset($supplie) && $supplie['code']!=''? $supplie['code']:'',
  514. 'good_price'=>$good_price,
  515. 'pakge_fee'=>$pakge_fee,
  516. 'cert_fee'=>$cert_fee,
  517. 'open_fee'=>$open_fee,
  518. 'mark_fee'=>$mark_fee,
  519. 'teach_fee'=>$teach_fee,
  520. 'nake_fee'=>$nake_fee,
  521. 'demo_fee'=>$demo_fee,
  522. 'delivery_fee'=>$delivery_fee,
  523. 'weight'=>$weight,
  524. 'remark'=>$remark,
  525. 'diff_weight'=>$diff_weight,
  526. 'diff_price'=>$diff_price,
  527. 'purchaser'=>$userinfo['nickname'],
  528. 'purchaser_id'=>$userinfo['id'],
  529. "addtime"=>date("Y-m-d H:i:s"),
  530. "updatetime"=>date("Y-m-d H:i:s")
  531. ];
  532. Db::startTrans();
  533. try{
  534. $in = Db::name('purchease_feedback')->insert($data,true);
  535. if($in>0){
  536. $order=["order_type"=>'FKD',"order_code"=>$info['bk_code'],"order_id"=>$in, "order_status"=>0,"before_status"=>1];
  537. ProcessOrder::AddProcess($this->post['token'],$order);
  538. $ste = ["order_code"=>$info['bk_code'],"status"=>0,"action_remark"=>'',"action_type"=>"create"];
  539. ActionLog::logAdd($this->post['token'],$ste,"FKD",0,$data);
  540. $temp=$info['status'];
  541. $info['status']=2;
  542. $info['wsm_code']=$wsm_code;
  543. $info['addtime']=date("Y-m-d H:i:s");
  544. $ood=Db::name('purchease')->save($info);
  545. if($ood){
  546. $order=["order_type"=>'BHD',"order_code"=>$info['bk_code'],"order_id"=>$info['id'], "order_status"=>$info['status'],"before_status"=>$temp, 'holder_id' => $info['apply_id']];
  547. ProcessOrder::AddProcess($this->post['token'],$order);
  548. $ste = ["order_code"=>$info['bk_code'],"status"=>$temp,"action_remark"=>'',"action_type"=>"status"];
  549. ActionLog::logAdd($this->post['token'],$ste,"BHD",$info['status'],$info);
  550. Db::commit();
  551. return app_show(0,"新建成功");
  552. }
  553. }
  554. Db::rollback();
  555. return error_show(1005,"新建失败");
  556. }catch (\Exception $e){
  557. Db::rollback();
  558. return error_show(1005,"新建失败");
  559. }
  560. // return $in ? app_show(0,"新建成功"):error_show(1005,"新建失败");
  561. }
  562. public function delFeed(){
  563. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  564. if($id==""){
  565. return error_show(1001,'id不能为空');
  566. }
  567. $feed = Db::name("purchease_feedback")->where(['id'=>$id,'is_del'=>0])->find();
  568. if(empty($feed)){
  569. return error_show(1004,'未找到数据');
  570. }
  571. if($feed['status']==1){
  572. return error_show(1004,'反馈数据已采用无法删除');
  573. }
  574. $feed['is_del']= 1;
  575. $feed['updatetime']=date("Y-m-d H:i:s");
  576. $up = Db::name("purchease_feedback")->update($feed);
  577. if($up){
  578. $order=["order_type"=>'FKD',"order_code"=>$feed['bk_code'],"order_id"=>$feed['id'], "order_status"=>0];
  579. ProcessOrder::workdel($order);
  580. $ste = ["order_code"=>$feed['bk_code'],"status"=>$feed['status'],"action_remark"=>'',"action_type"=>"delete"];
  581. ActionLog::logAdd($this->post['token'],$ste,"FKD",$feed['status'],$feed);
  582. }
  583. return $up ? app_show(0,"删除成功"):error_show(1005,"删除失败");
  584. }
  585. public function infoFeed(){
  586. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  587. if($id==""){
  588. return error_show(1001,'id不能为空');
  589. }
  590. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  591. if(empty($info)){
  592. return error_show(1002,'未找到备库数据');
  593. }
  594. $feed = Db::name("purchease_feedback")->where(['bkcode'=>$info['bk_code'],'is_del'=>0])->find();
  595. if(empty($feed)){
  596. return error_show(1004,'未找到反馈数据');
  597. }
  598. $feed['wsm_name']="";
  599. if($feed['warehouse']!=""){
  600. $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b","a.supplierNo=b.code")
  601. ->where(["a.wsm_code"=>$feed['warehouse']])->field("a.name as wsm_name,b.name,b.code")->find();
  602. $feed['wsm_name'] =isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name']:"";
  603. $feed['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
  604. $feed['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";
  605. }
  606. if($feed['supplier']!=""){
  607. $supplie = Db::name("supplier")->where(['code'=>$feed['supplier'],"is_del"=>0])->find();
  608. $feed['supplier_name'] =isset($supplie['name']) ? $supplie['name']:"";
  609. }
  610. return app_show(0,"获取成功",$feed);
  611. }
  612. public function changeFeed(){
  613. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  614. if($id==""){
  615. return error_show(1001,'id不能为空');
  616. }
  617. $feed = Db::name("purchease")->where(['id'=>$id,'is_del'=>0])->find();
  618. if(empty($feed)){
  619. return error_show(1004,'未找到数据');
  620. }
  621. $status = isset($this->post['status'])&& $this->post['status']!=='' ? intval($this->post['status']) : "";
  622. if($status==""){
  623. return error_show(1001,'参数status 不能为空');
  624. }
  625. $remark = isset($this->post['remark'])&& $this->post['remark']!=='' ? trim($this->post['remark']) : "";
  626. Db::startTrans();
  627. try{
  628. $tem =$feed['status'];
  629. $feed['remark']= $remark;
  630. $feed['status']= $status;
  631. $feed['updatetime']=date("Y-m-d H:i:s");
  632. $up = Db::name("purchease")->update($feed);
  633. if($up){
  634. if ($feed['status'] == 1) {
  635. $supplier = Db::name('supplier')
  636. ->field('id,person,personid')
  637. ->where('code', $feed['supplierNo'])
  638. ->findOrEmpty();
  639. $order = ["order_type" => 'BHD', "order_code" => $feed['bk_code'], "order_id" => $feed['id'], "order_status" => $feed['status'], "before_status" => $tem, 'holder_id' => $feed['apply_id'], 'wait_id' => $supplier['personid'], 'wait_name' => $supplier['person']];
  640. } else $order = ["order_type" => 'BHD', "order_code" => $feed['bk_code'], "order_id" => $feed['id'], "order_status" => $feed['status'], "before_status" => $tem, 'holder_id' => $feed['apply_id']];
  641. ProcessOrder::AddProcess($this->post['token'], $order);
  642. $ste = ["order_code"=>$feed['bk_code'],"status"=>$tem,"action_remark"=>'',"action_type"=>"edit"];
  643. ActionLog::logAdd($this->post['token'],$ste,"BHD",$feed['status'],$feed);
  644. if($status==3){
  645. // $ware = Db::name("warehouse_addr")->where(["wsm_code"=>$feed['warehouse'],"is_del"=>0])->find();
  646. $purse = Db::name("purchease_feedback")->where(['bkcode'=>$feed['bk_code'],"is_del"=>0])->find();
  647. if(empty($purse)){
  648. Db::rollback();
  649. return error_show(1001,'未找到备库反馈数据');
  650. }
  651. $pe = $purse['status'];
  652. $purse['status']=1;
  653. $purse['addtime']=date("Y-m-d H:i:s");
  654. $up = Db::name("purchease_feedback")->save($purse);
  655. if($up==false){
  656. Db::rollback();
  657. return error_show(1001,'备库反馈数据状态修改失败');
  658. }
  659. $order=["order_type"=>'FKD',"order_code"=>$feed['bk_code'],"order_id"=>$purse['id'],"order_status"=>$purse['status'],"before_status"=>$pe];
  660. ProcessOrder::AddProcess($this->post['token'],$order);
  661. $ste = ["order_code"=>$feed['bk_code'],"status"=>$pe,"action_remark"=>'',"action_type"=>"status"];
  662. ActionLog::logAdd($this->post['token'],$ste,"FKD",$feed['status'],$purse);
  663. $supplier = Db::name("supplier")->where(["code"=>$purse['supplier']])->find();
  664. $inw = makeNo("CG");
  665. $goodinfo=Db::name('good_basic')
  666. ->field('id,createrid,creater')
  667. ->where(['is_del'=>0,'spuCode'=>$feed['spuCode']])
  668. ->findOrEmpty();
  669. $data=[
  670. "bkcode"=>$purse['bkcode'],
  671. 'cgdNo'=>$inw,
  672. "wsm_code"=>$purse['warehouse'],
  673. "good_code"=>$feed['good_code'],
  674. "good_name"=>$feed['good_name'],
  675. "good_type_code"=>$feed['good_type_code'],
  676. "good_num"=>$feed['good_num'],
  677. "send_num"=>0,
  678. "wsend_num"=>$feed['good_num'],
  679. 'good_price'=>$purse['good_price'],
  680. "total_fee"=>$purse['good_price'],
  681. 'pakge_fee'=>$purse['pakge_fee'],
  682. 'cert_fee'=>$purse['cert_fee'],
  683. 'open_fee'=>$purse['open_fee'],
  684. 'mark_fee'=>$purse['mark_fee'],
  685. 'teach_fee'=>$purse['teach_fee'],
  686. 'nake_fee'=>$purse['nake_fee'],
  687. 'demo_fee'=>$purse['demo_fee'],
  688. 'delivery_fee'=>$purse['delivery_fee'],
  689. 'weight'=>$purse['weight'],
  690. 'diff_weight'=>$purse['diff_weight'],
  691. 'diff_fee'=>$purse['diff_price'],
  692. 'cgder_id'=>$purse['purchaser_id'],
  693. 'cgder'=>$purse['purchaser'],
  694. "remark"=>$purse['remark'],
  695. "status"=>0,
  696. 'supplierNo'=>$purse['supplier'],
  697. 'supplier_name'=>isset($supplier['name']) ? $supplier['name']:"",
  698. 'lasttime'=>$purse['expecttime'],
  699. "addtime"=>date("Y-m-d H:i:s"),
  700. "updatetime"=>date("Y-m-d H:i:s"),
  701. 'good_createrid' => $goodinfo['createrid'],
  702. 'good_creater' => $goodinfo['creater'],//商品的创建人
  703. ];
  704. $in= Db::name("purchease_order")->insert($data,true);
  705. if($in>0){
  706. //当采购单是节点0待与供应商确认,推给供应商负责人
  707. if(!isset($supplier)) $supplier = Db::name("supplier")->where(["code"=>$purse['supplier']])->find();
  708. $order=["order_type"=>'CGD',"order_code"=>$data['cgdNo'],"order_id"=>$in, "order_status"=>$data['status'],"before_status"=>0,'wait_id'=>$supplier['personid'],'wait_name'=>$supplier['person']];
  709. ProcessOrder::AddProcess($this->post['token'],$order);
  710. $ste = ["order_code"=>$inw,"status"=>$data['status'],"action_remark"=>'',"action_type"=>"create"];
  711. ActionLog::logAdd($this->post['token'],$ste,"CGD",$data['status'],$data);
  712. //将采购单数据塞入到队列中
  713. $push_data = json_encode([
  714. 'supplierNo' => $data['supplierNo'],
  715. 'type' => 1,//1销售订单(采销的采购单),2上线结果
  716. 'data' => [
  717. 'cgdNo' => $data['cgdNo'],
  718. 'spuCode' => $feed['spuCode'],
  719. 'good_name' => $data['good_name'],
  720. 'good_num' => $data['good_num'],
  721. 'good_price' => $data['good_price'],
  722. 'total_fee' => $data['total_fee'],
  723. 'weight' => $data['weight'],
  724. 'addtime' => $data['addtime'],
  725. ],
  726. ], JSON_UNESCAPED_UNICODE);
  727. Cache::store("redis")->handler()->lPush(Config::get('app.abutment_queue'), $push_data);
  728. Db::commit();
  729. return app_show(0,"更新成功",['cgdNo'=>$inw]);
  730. }
  731. }else{
  732. if($status==4){
  733. $purse = Db::name("purchease_feedback")->where(['bkcode'=>$feed['bk_code'],"is_del"=>0])->find();
  734. if(empty($purse)){
  735. Db::rollback();
  736. return error_show(1001,'未找到备库反馈数据');
  737. }
  738. $pe=$purse['status'];
  739. $purse['status']=2;
  740. $purse['addtime']=date("Y-m-d H:i:s");
  741. $up = Db::name("purchease_feedback")->save($purse);
  742. if($up==false){
  743. Db::rollback();
  744. return error_show(1001,'备库反馈数据状态修改失败');
  745. }
  746. $order=["order_type"=>'FKD',"order_code"=>$feed['bk_code'],"order_id"=>$purse['id'],"order_status"=>$purse['status'],"before_status"=>1];
  747. ProcessOrder::AddProcess($this->post['token'],$order);
  748. $ste = ["order_code"=>$feed['bk_code'],"status"=>$pe,"action_remark"=>'',"action_type"=>"status"];
  749. ActionLog::logAdd($this->post['token'],$ste,"FKD",$feed['status'],$purse);
  750. }
  751. Db::commit();
  752. return app_show(0,"更新成功");
  753. }
  754. }
  755. Db::rollback();
  756. return error_show(1004,"更新失败");
  757. }catch (\Exception $e){
  758. Db::rollback();
  759. return error_show(1005,$e->getMessage());
  760. }
  761. }
  762. public function addwsm(){
  763. $id = isset($this->post['id']) ? intval($this->post['id']) : "";
  764. if($id==""){
  765. return error_show(1001,'id不能为空');
  766. }
  767. $info = Db::name("purchease")->where(["id"=>$id,"is_del"=>0])->find();
  768. if($info==false){
  769. return error_show(1002,'未找到备库数据');
  770. }
  771. $wsm= isset($this->post['wsm_code'])&&$this->post['wsm_code']!="" ? trim($this->post['wsm_code']) : "";
  772. if($wsm==""){
  773. return error_show(1004,"参数wsm_code不能为空");
  774. }
  775. $wsminfo = Db::name("warehouse_info")->where(["wsm_code"=>$wsm,"is_del"=>0])->find();
  776. if($wsminfo==false){
  777. return error_show(1004,"未找到仓库数据");
  778. }
  779. $info['wsm_code']=$wsm;
  780. $old_info_status = $info['status'];
  781. $info['status']=1;
  782. $info['updatetime']=date("y-m-d H;i:s");
  783. $up =Db::name("purchease")->save($info);
  784. if($up){
  785. //修改状态,添加待办
  786. ActionLog::logAdd($this->post['token'], [
  787. "order_code" => $info['bk_code'],//销售单code
  788. "status" => $old_info_status,//这里的status是之前的值
  789. "action_remark" => '',//备注
  790. "action_type" => "edit"//新建create,编辑edit,更改状态status
  791. ], "BHD", $info['status'], $info);
  792. $supplier = Db::name('supplier')
  793. ->field('id,person,personid')
  794. ->where('code', $info['supplierNo'])
  795. ->findOrEmpty();
  796. ProcessOrder::AddProcess($this->post['token'], [
  797. "order_type" => 'BHD',
  798. "order_code" => $info['bk_code'],//销售单code
  799. "order_id" => $info['id'],
  800. "order_status" => $info['status'],
  801. "before_status"=>$old_info_status,
  802. //'holder_id' => $info['apply_id'],
  803. 'wait_id' => $supplier['personid'],
  804. 'wait_name' => $supplier['person'],
  805. ]);
  806. return app_show(0,"备库单仓库选择成功");
  807. }else{
  808. return error_show(1004,"备库单仓库选择失败");
  809. }
  810. }
  811. //备库单生成采购单
  812. public function createCgd(){
  813. $bk_code=isset($this->post['bk_code'])&&$this->post['bk_code']!=="" ? trim($this->post['bk_code']):"";
  814. if($bk_code===""){
  815. return error_show(1004,"参数bk_code不能为空");
  816. }
  817. $info = Db::name("purchease")->where(["bk_code"=>$bk_code,"is_del"=>0])->find();
  818. if($info==false){
  819. return error_show(1002,'未找到备库数据');
  820. }
  821. $wsm_code =isset($this->post['wsm_code'])&&$this->post['wsm_code']!=="" ? trim($this->post['wsm_code']):'';
  822. if($wsm_code==""){
  823. return error_show(1002,'备库仓库不能为空');
  824. }
  825. $wsminfo = Db::name("warehouse_info")->where(["wsm_code"=>$wsm_code,"is_del"=>0])->find();
  826. if($wsminfo==false){
  827. return error_show(1002,'备库仓库未找到');
  828. }
  829. $good =Db::name("good_basic")->where([["spuCode","=",$info['spuCode']],["is_del","=",0]])->find();
  830. if($good==false){
  831. return error_show(1004,"未找到商品数据");
  832. }
  833. $supplier=Db::name("supplier")->where(["code"=>$info['supplierNo'],"is_del"=>0])->find();
  834. if($supplier==false){
  835. return error_show(1004,"未找到供应商数据");
  836. }
  837. $goodnake =Db::name("good_nake")->where([["spuCode","=",$info['spuCode']],["is_del","=",0],["min_num","<=",
  838. $info['good_num']]])->order("min_num desc")->find();
  839. if($goodnake==false){
  840. return error_show(1004,"未找到成本数据");
  841. }
  842. $top_cat = made($good['cat_id']);
  843. $top_cat_id = isset($top_cat[0]['id'])?$top_cat[0]['id']:"";
  844. if($good['is_gold_price']==1 && $top_cat_id==6){
  845. $gold = Db::name("gold_price1")->where(["type"=>$good['noble_metal'],"is_del"=>0,"status"=>1])->order("addtime desc")
  846. ->find();
  847. // $weight = $good['noble_weight']*$info['good_num'];
  848. $sale_price = round($good['demo_fee'] / $info['good_num'] + $good['open_fee'] / $info['good_num'] + $good['noble_weight'] * $gold["price"] + $goodnake['cost_fee'] * $good['noble_weight'] + $goodnake['package_fee'] + $goodnake['mark_fee'] + $goodnake['cert_fee'] +$goodnake['nake_fee'] + $goodnake['delivery_fee'],2);
  849. $total_price = round($info['good_num']*$sale_price,2);
  850. }else{
  851. $sale_price = $goodnake['nake_total'];
  852. $total_price = round($info['good_num']*$sale_price,2);
  853. }
  854. $cgdCode = makeNo("CG");
  855. $cg =["cgdNo"=>$cgdCode,
  856. "bkcode"=>$bk_code,
  857. "wsm_code"=>$wsm_code,
  858. "cgder"=>$good['creater'],
  859. "cgder_id"=>$good['createrid'],
  860. "spuCode"=>$info['spuCode'],
  861. "good_name"=>$info['good_name'],
  862. "good_num"=>$info['good_num'],
  863. "good_price"=>$sale_price,
  864. "total_fee"=>$total_price,
  865. "pakge_fee"=>isset($goodnake['package_fee'])? $goodnake['package_fee']:0,
  866. "cert_fee"=>isset($goodnake['cert_fee'])? $goodnake['cert_fee']:0,
  867. "open_fee"=>$good['open_fee'],
  868. "delivery_fee"=>isset($goodnake['delivery_fee'])? $goodnake['delivery_fee']:0,
  869. "mark_fee"=>isset($goodnake['mark_fee'])? $goodnake['mark_fee']:0,
  870. "nake_fee"=>isset($goodnake['nake_fee'])? $goodnake['nake_fee']:0,
  871. "teach_fee"=>isset($goodnake['cost_fee'])? $goodnake['cost_fee']:0,
  872. "demo_fee"=>$good['demo_fee'],
  873. "diff_weight"=>"0",
  874. "diff_fee"=>"0",
  875. "gold_price"=>"0",
  876. "supplierNo"=>$info['supplierNo'],
  877. "supplier_name"=>$supplier['name'],
  878. "companyNo"=>$info['companyNo'],
  879. "send_status"=>1,
  880. "send_num"=>"0",
  881. "wsend_num"=>$info['good_num'],
  882. "weight"=>$good['noble_weight'],
  883. "remark"=>"",
  884. "status"=>0,//0表示初始化
  885. "lasttime"=>$info['lasttime'],
  886. "is_del"=>0,
  887. "order_type" => 1,//1备库
  888. "order_source" => 0,//0备库下单
  889. "good_type"=>1,
  890. "addtime"=>date("Y-m-d H:i:s"),
  891. "updatetime"=>date("Y-m-d H:i:s"),
  892. 'good_createrid' => $good['createrid'],
  893. 'good_creater' => $good['creater'],//商品创建人
  894. ];
  895. Db::startTrans();
  896. try{
  897. $up =Db::name("purchease_order")->insert($cg,true);
  898. if($up>0){
  899. $good = Db::name("good_stock")->where(["wsm_code" =>$wsm_code, "spuCode" => $info['spuCode'], "is_del" => 0])->find();
  900. if ($good == false) {
  901. $good = [
  902. "spuCode" => $info['spuCode'],
  903. "wsm_code" => $wsm_code,
  904. "usable_stock" => 0,
  905. "wait_out_stock" => 0,
  906. "wait_in_stock" => 0,
  907. "total_stock" => 0,
  908. "addtime" => date("Y-m-d H:i:s"),
  909. "updatetime" => date("Y-m-d H:i:s"),
  910. ];
  911. $order = ["order_code" => $info['spuCode'], "status" => 1, "action_remark" => '', "action_type" => "create"];
  912. } else {
  913. $order = ["order_code" => $info['spuCode'], "status" => 1, "action_remark" => '', "action_type" => "edit"];
  914. }
  915. $good['wait_in_stock'] += $info['good_num'];
  916. $good['updatetime'] = date("Y-m-d H:i:s");
  917. $upd = Db::name("good_stock")->save($good);
  918. $good_data[] = ['good_log_code' => $cgdCode,"stock_id" => isset($good['id']) ? $good['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1,
  919. 'stock' => $info['good_num'], "stock_name" => "wait_in_stock"];
  920. if ($upd) {
  921. // 商品变动日志表,good_log_code字段存储采购单号
  922. $order = ["order_code" => $cgdCode, "status" => 0, "action_remark" => '', "action_type" => "create"];
  923. GoodLog::LogAdd($this->post['token'], $good_data, 'CGD');
  924. ActionLog::logAdd($this->post['token'], $order, "CGD", 0, $good);
  925. $process = ["order_code" => $cgdCode, "order_id" => $up, "order_status" => $cg['status'], "order_type" => 'CGD',"before_status"=>0,'holder_id'=>$supplier['personid'],'wait_id'=>$supplier['personid'],'wait_name'=>$supplier['person']];
  926. ProcessOrder::AddProcess($this->post['token'], $process);
  927. $info['wsm_code'] = $wsm_code;
  928. $old_info_status = $info['status'];
  929. $info['status'] = 2;
  930. $info['updatetime'] = date("Y-m-d H:i:s");
  931. $bas = Db::name("purchease")->save($info);
  932. if ($bas) {
  933. //修改状态,添加待办
  934. ActionLog::logAdd($this->post['token'], [
  935. "order_code" => $info['bk_code'],//销售单code
  936. "status" => $old_info_status,//这里的status是之前的值
  937. "action_remark" => '',//备注
  938. "action_type" => "edit"//新建create,编辑edit,更改状态status
  939. ], "BHD", $info['status'], $info);
  940. ProcessOrder::AddProcess($this->post['token'], [
  941. "order_type" => 'BHD',
  942. "order_code" => $info['bk_code'],//销售单code
  943. "order_id" => $info['id'],
  944. "order_status" => $info['status'],
  945. "before_status"=> $old_info_status,
  946. 'holder_id' => $info['apply_id']
  947. ]);
  948. //维护台账记录
  949. Db::name('standing_book')->where('bk_code', $bk_code)->update([
  950. 'spuCode' => $cg['spuCode'],
  951. 'order_type' => $cg['order_type'],
  952. 'order_source' => $cg['order_source'],
  953. 'supplierNo' => $cg['supplierNo'],
  954. 'companyNo' => $cg['companyNo'],
  955. 'cgdNo' => $cg['cgdNo'],
  956. 'updatetime' => date('Y-m-d H:i:s'),
  957. ]);
  958. //将采购单数据塞入到队列中
  959. $push_data = json_encode([
  960. 'supplierNo' => $cg['supplierNo'],
  961. 'type' => 1,//1销售订单(采销的采购单),2上线结果
  962. 'data' => [
  963. 'cgdNo' => $cg['cgdNo'],
  964. 'spuCode' => $cg['spuCode'],
  965. 'good_name' => $cg['good_name'],
  966. 'good_num' => $cg['good_num'],
  967. 'good_price' => $cg['good_price'],
  968. 'total_fee' => $cg['total_fee'],
  969. 'weight' => $cg['weight'],
  970. 'addtime' => $cg['addtime'],
  971. ],
  972. ], JSON_UNESCAPED_UNICODE);
  973. Cache::store("redis")->handler()->lPush(Config::get('app.abutment_queue'), $push_data);
  974. Db::commit();
  975. return app_show(0, "采购单新建成功", ["cgdNo" => $cgdCode]);
  976. }
  977. }
  978. // }
  979. }
  980. Db::rollback();
  981. return error_show(1004,"采购单新建失败");
  982. }catch (\Exception $e){
  983. Db::rollback();
  984. return error_show(1004,$e->getMessage());
  985. }
  986. }
  987. }