Track.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\controller;
  4. use app\admin\model\CgdInfo;
  5. use app\admin\model\CompanyInfo;
  6. use app\admin\model\FhdChild;
  7. use app\admin\model\Pay;use app\admin\model\PayInfo;use app\admin\model\QrdInfo;use app\admin\model\SupplierInfo;
  8. use think\App;
  9. use think\facade\Validate;
  10. class Track extends Base
  11. {
  12. protected $model=null;
  13. // protected $novalidate=["*"];
  14. public function __construct(App $app) {
  15. parent::__construct($app);
  16. $this->model=new \app\admin\model\Track();
  17. }
  18. //运费单创建
  19. public function create(){
  20. $param = $this->request->post('list/a', '', 'trim');
  21. if(empty($param))$this->error("参数不能为空");
  22. $rule =Validate::rule([
  23. "outChildCode|发货工单编号"=>"require|max:255",
  24. "supplierNo|物流供货商"=>'require|max:255',
  25. "companyNo|业务公司"=>'require|max:255',
  26. "post_fee|物流费用"=>'require|float',
  27. ]);
  28. $supplier = (new SupplierInfo())->where(["code"=>array_unique(array_column($param,"supplierNo"))])->column("name","code");
  29. $business = (new CompanyInfo())->where(["companyNo"=>array_unique(array_column($param,"companyNo"))])->column("company_name","companyNo");
  30. $outChild = (new FhdChild())->where(["outChildCode"=>array_unique(array_column($param,'outChildCode'))])
  31. ->column('orderCode','outChildCode');
  32. $cgdArr = (new CgdInfo())->where(["qrdCode"=>array_unique($outChild)])->column("sequenceNo","qrdCode");
  33. $qrdArr = (new QrdInfo())->where(["sequenceNo"=>array_unique($outChild)])->column("ownerName,ownerid","sequenceNo");
  34. $data=[];
  35. foreach ($param as $item){
  36. if($rule->check($item)==false)$this->error($rule->getError());
  37. if(!isset($outChild[$item['outChildCode']]))$this->error("发货工单未找到或未发货");
  38. $temp=[
  39. "TrackCode"=>makeNo("TK"),
  40. "orderCode"=>$outChild[$item['outChildCode']],
  41. "cgdNo"=>$cgdArr[$outChild[$item['outChildCode']]]??"",
  42. "saler"=>$qrdArr[$outChild[$item['outChildCode']]]['ownerName'],
  43. "salerid"=>$qrdArr[$outChild[$item['outChildCode']]]['ownerid'],
  44. "outChildCode"=>$item['outChildCode'],
  45. "supplierNo"=>$item['supplierNo'],
  46. "supplierName"=>$supplier[$item['supplierNo']]??"",
  47. 'companyNo'=>$item['companyNo'],
  48. 'companyName'=>$business[$item['companyNo']]??'',
  49. 'post_fee'=>$item['post_fee'],
  50. 'apply_name'=>$item['apply_name'],
  51. 'apply_id'=>$item['apply_id']
  52. ];
  53. $data[]=$temp;
  54. }
  55. $this->model->saveAll($data);
  56. $this->success("运费单创建成功");
  57. }
  58. //***列表
  59. public function list(){
  60. $param=$this->request->param(["outChildCode"=>"","order_type"=>"","order_source"=>"","supplierNo"=>"",
  61. "companyNo"=>"","status"=>"","orderCode"=>"","cgdNo"=>"",'page'=>1,'size'=>10],"post","trim");
  62. $where=[];
  63. $param['outChildCode']==''??$where[]=["outChildCode","like","%{$param['outChildCode']}%"];
  64. $param['orderCode']==''??$where[]=["orderCode","like","%{$param['orderCode']}%"];
  65. $param['cgdNo']==''??$where[]=["cgdNo","like","%{$param['cgdNo']}%"];
  66. $param['order_type']==''??$where[]=["order_type","=",$param['order_type']];
  67. $param['order_source']==''??$where[]=["order_source","=",$param['order_source']];
  68. $param['supplierNo']==''??$where[]=["supplierNo","=",$param['supplierNo']];
  69. $param['companyNo']==''??$where[]=["companyNo","=",$param['companyNo']];
  70. $param['status']==''??$where[]=["status","=",$param['status']];
  71. $list=$this->model->with(['fhdChild'])->where($where)->order("id desc")->paginate(["list_rows"=>$param['size'],
  72. "page"=>$param['page']]);
  73. $this->success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
  74. }
  75. //***列表
  76. public function fhdList(){
  77. $param=$this->request->param(['outChildCode'=>'','order_type'=>'','order_source'=>'','supplierNo'=>'',
  78. 'companyNo'=>'','orderCode'=>'','cgdNo'=>'','page'=>1,'size'=>10],'post','trim');
  79. $where=[];
  80. $param['outChildCode']==''??$where[]=['outChildCode','like',"%{$param['outChildCode']}%"];
  81. $param['orderCode']==''??$where[]=['orderCode','like',"%{$param['orderCode']}%"];
  82. $param['cgdNo']==''??$where[]=['cgdNo','like',"%{$param['cgdNo']}%"];
  83. $param['order_type']==''??$where[]=['order_type','=',$param['order_type']];
  84. $param['order_source']==''??$where[]=['order_source','=',$param['order_source']];
  85. $param['supplierNo']==''??$where[]=['supplierNo','=',$param['supplierNo']];
  86. $param['companyNo']==''??$where[]=['companyNo','=',$param['companyNo']];
  87. $param['status']==''??$where[]=['status','=',$param['status']];
  88. $list=(new FhdChild())->where($where)->order('id desc')->paginate(['list_rows'=>$param['size'],
  89. 'page'=>$param['page']]);
  90. $this->success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  91. }
  92. //***列表
  93. public function info(){
  94. $param=$this->request->param(["id"=>""],'post','trim');
  95. $valid=Validate::rule(["id"=>"require|number|gt:0"]);
  96. if($valid->check($param)==false)$this->error($valid->getError());
  97. $list=$this->model->with(['fhdChild'])->order('id desc')->findOrEmpty($param['id']);
  98. $this->success('获取成功',$list);
  99. }
  100. //***列表
  101. public function query(){
  102. $param=$this->request->param(['outChildCode'=>[],'order_type'=>'','order_source'=>'','supplierNo'=>'',
  103. 'companyNo'=>'','status'=>'','orderCode'=>[],'cgdNo'=>[],"page"=>1,"size"=>100],'post','trim');
  104. $where=[];
  105. empty($param['outChildCode'])??$where[]=['outChildCode','in',$param['outChildCode']];
  106. empty($param['cgdNo'])??$where[]=['cgdNo','in',$param['cgdNo']];
  107. empty($param['orderCode'])??$where[]=['orderCode','in',$param['orderCode']];
  108. // $param['orderCode']==''??$where[]=['orderCode','like',"%{$param['orderCode']}%"];
  109. // $param['cgdNo']==''??$where[]=['cgdNo','like',"%{$param['cgdNo']}%"];
  110. $param['order_type']==''??$where[]=['order_type','=',$param['order_type']];
  111. $param['order_source']==''??$where[]=['order_source','=',$param['order_source']];
  112. $param['supplierNo']==''??$where[]=['supplierNo','=',$param['supplierNo']];
  113. $param['companyNo']==''??$where[]=['companyNo','=',$param['companyNo']];
  114. $param['status']==''??$where[]=['status','=',$param['status']];
  115. $list=$this->model->with(['fhdChild'])->order('id desc')->paginate(['list_rows'=>$param['size'],
  116. 'page'=>$param['page']]);
  117. $this->success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  118. }
  119. public function PayAdd(){
  120. $param=$this->request->param(['cids'=>[]],'post','trim');
  121. $valid = Validate::rule(['cids|对账数据集合'=>'require|array']);
  122. if($valid->check($param)==false)$this->error($valid->getError());
  123. $PayObject = new \app\admin\model\Track();
  124. $objall= $PayObject->where(['id'=>$param['cids']])->select();
  125. if($objall->isEmpty()) $this->error('对账数据不能为空');
  126. $supplierNo= array_column($objall,'supplierNo');
  127. $supplierName= array_column($objall,'supplierName');
  128. if(count(array_unique($supplierNo))>1){
  129. $this->error('对账数据供应商不唯一');
  130. }
  131. $companyNo= array_column($objall,'companyNo');
  132. $companyName= array_column($objall,'companyName');
  133. if(count(array_unique($companyNo))>1){
  134. $this->error('对账数据业务公司不唯一');
  135. }
  136. if ($this->level == 2) {
  137. //判断是否开通供应商账号
  138. $temp = check_has_account_by_supplierNos([$supplierNo[0]]);
  139. if (isset($temp['data'][$supplierNo[0]])) $this->error( '该供应商已经开通账号,不允许当前账号操作');
  140. }
  141. $pay= new Pay();
  142. $data = [
  143. 'payNo'=>makeNo('PAY'),
  144. 'apply_id'=>$this->uid,
  145. 'apply_name'=>$this->uname,
  146. 'total_fee'=>'0',
  147. 'pay_type'=>2,
  148. 'supplierNo'=>$supplierNo[0],
  149. 'supplierName'=>$supplierName[0],
  150. 'companyNo'=>$companyNo[0],
  151. 'companyName'=>$companyName[0],
  152. 'wpay_fee'=>'0',
  153. 'apay_fee'=>'0',
  154. 'ainv_fee'=>'0',
  155. 'winv_fee'=>'0',
  156. 'remark'=>'',
  157. 'status'=>1,
  158. ];
  159. $pay->startTrans();
  160. try{
  161. $payinfo=[];
  162. foreach ($objall as $item){
  163. $temp=[];
  164. $temp['cgdNo']=$item['TrackCode'];
  165. $temp['total_fee']=$item['post_fee'];
  166. $temp['apay_fee']=0;
  167. $temp['wpay_fee']=$item['post_fee'];
  168. $temp['winv_fee']=0;
  169. $temp['ainv_fee']=$item['post_fee'];
  170. $temp['payNo']=$data['payNo'];
  171. $temp['addtime']=date('Y-m-d H:i:s');
  172. $temp['updatetime']=date('Y-m-d H:i:s');
  173. $payinfo[]=$temp;
  174. $data['total_fee']=bcadd($data['total_fee'],$item['post_fee'],2);
  175. $data['wpay_fee']= bcadd($data['wpay_fee'],$item['post_fee'],2);
  176. $data['winv_fee']= bcadd($data['winv_fee'],$item['post_fee'],2);
  177. }
  178. $info =(new PayInfo())->saveAll($payinfo);
  179. if(empty($info)==false){
  180. $create=$pay->save($data);
  181. if($create)$objall->update(['status'=>1]);
  182. }
  183. $pay->commit();
  184. }catch (\Exception $e){
  185. $pay->rollback();
  186. $this->error($e->getMessage());
  187. }
  188. $this->success('对账单添加成功',['payNo'=>$data['payNo']]);
  189. }
  190. /**对账单未对账前编辑8**/
  191. public function PaySave(){
  192. $param=$this->request->param(['cids'=>[],'payNo'=>''],'post','trim');
  193. $valid = Validate::rule(['cids|对账数据集合'=>'require|array','payNo|对账编号'=>'require']);
  194. if($valid->check($param)==false)$this->error($valid->getError());
  195. $PayObject = new \app\admin\model\Track();
  196. $pay= new Pay();
  197. $objall= $PayObject->where(['id'=>$param['cids']])->select();
  198. if($objall->isEmpty()) $this->error('对账数据不能为空');
  199. $PayInfo = $pay->where(['payNo'=>$param['payNo']])->findOrEmpty();
  200. if($PayInfo->isEmpty()) $this->error('未找到对账单数据');
  201. $supplierNo= array_column($objall,'supplierNo');
  202. $supplierName= array_column($objall,'supplierName');
  203. if(count(array_unique($supplierNo))>1){
  204. $this->error('对账数据供应商不唯一');
  205. }
  206. $companyNo= array_column($objall,'companyNo');
  207. $companyName= array_column($objall,'companyName');
  208. if(count(array_unique($companyNo))>1){
  209. $this->error('对账数据业务公司不唯一');
  210. }
  211. if ($this->level == 2) {
  212. //判断是否开通供应商账号
  213. $temp = check_has_account_by_supplierNos([$supplierNo[0]]);
  214. if (isset($temp['data'][$supplierNo[0]])) $this->error( '该供应商已经开通账号,不允许当前账号操作');
  215. }
  216. $trackArr = PayInfo::where(['payNo'=>$param['payNo'],'is_del'=>0,'status'=>1])->column('cgdNo');
  217. $add=$remove=[];
  218. if(empty($trackArr)==false){
  219. $remove= array_diff($trackArr,array_column($objall,'TrackCode'));
  220. $add= array_diff(array_column($objall,'TrackCode'),$trackArr);
  221. }
  222. $data = [
  223. 'apply_id'=>$this->uid,
  224. 'apply_name'=>$this->uname,
  225. 'total_fee'=>'0',
  226. 'supplierNo'=>$supplierNo[0],
  227. 'supplierName'=>$supplierName[0],
  228. 'companyNo'=>$companyNo[0],
  229. 'companyName'=>$companyName[0],
  230. 'wpay_fee'=>'0',
  231. 'winv_fee'=>'0',
  232. ];
  233. $pay->startTrans();
  234. try{
  235. $payinfo=[];
  236. foreach ($objall as $item){
  237. $data['total_fee']=bcadd($data['total_fee'],$item['post_fee'],2);
  238. $data['wpay_fee']= bcadd($data['wpay_fee'],$item['post_fee'],2);
  239. $data['winv_fee']= bcadd($data['winv_fee'],$item['post_fee'],2);
  240. if(!empty($add)&& in_array($item['TrackCode'],$add)){
  241. $temp=[];
  242. $temp['cgdNo']=$item['TrackCode'];
  243. $temp['total_fee']=$item['post_fee'];
  244. $temp['apay_fee']=0;
  245. $temp['wpay_fee']=$item['post_fee'];
  246. $temp['winv_fee']=0;
  247. $temp['ainv_fee']=$item['post_fee'];
  248. $temp['payNo']=$param['payNo'];
  249. $temp['addtime']=date('Y-m-d H:i:s');
  250. $temp['updatetime']=date('Y-m-d H:i:s');
  251. $payinfo[]=$temp;
  252. }
  253. }
  254. if(!empty($payinfo))(new PayInfo())->saveAll($payinfo);
  255. $up = $PayInfo->save($data);
  256. if($up){
  257. $objall->update(['status'=>1]);
  258. if(!empty($remove)){
  259. $PayObject->where(['TrackCode'=>$remove,'status'=>1])->update(['status'=>0]);
  260. PayInfo::where(['cgdNo'=>$remove,'status'=>1,'is_del'=>0])->update(['status'=>0,'is_del'=>1]);
  261. }
  262. }
  263. $pay->commit();
  264. }catch (\Exception $exception){
  265. $pay->rollback();
  266. $this->error($exception->getMessage());
  267. }
  268. $this->success('更新成功');
  269. }
  270. }