FinancialManager.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. <?php
  2. namespace app\cxinv\controller;
  3. use app\cxinv\model\FinancialCheck as FinancialCheck;
  4. use app\cxinv\model\ManagerProduct;
  5. use think\App;
  6. class FinancialManager extends Base{
  7. public function __construct(App $app) {
  8. parent::__construct($app);
  9. $this->model=new \app\cxinv\model\FinancialManager();
  10. }
  11. public function List(){
  12. $param = $this->request->param(["code"=>"","type"=>[],"seller_code"=>"","buyer_code"=>"","orderCode"=>"","cxCode"=>"",
  13. "goodNo"=>"","inv_number"=>"","inv_buyer_code"=>"",'channel'=>[],'status'=>"","manager_status"=>"","start"=>"","end"=>"",
  14. "page"=>1,"size"=>15],"post","trim");
  15. $where=[];
  16. if($param['code']!="") $where[]= ["code","=","%{$param['code']}%"];
  17. if(!empty($param['type'])) $where[]= ["type","in",$param['type']];
  18. if(!empty($param['channel'])) $where[]= ["channel","in",$param['channel']];
  19. if($param['manager_status']!="") $where[]= ["manager_status","=",$param['manager_status']];
  20. if($param['status']!="") $where[]= ["status","=",$param['status']];
  21. if($param['start']!="") $where[]= ["create_time",">=",startTime($param['start'])];
  22. if($param['end']!="") $where[]= ["create_time","<=",endTime($param['end'])];
  23. if($param['seller_code']!="") $where[]= ["seller_code","=",$param['seller_code']];
  24. if($param['buyer_code']!="") $where[]= ["buyer_code","=",$param['buyer_code']];
  25. if($param['orderCode']!="") $where[]= ["orderCode","=",$param['orderCode']];
  26. if($param['cxCode']!="") $where[]= ["cxCode","=",$param['cxCode']];
  27. if($param['goodNo']!="") $where[]= ["goodNo","=",$param['goodNo']];
  28. if($param['inv_number']!="") $where[]= ["inv_number","=",$param['inv_number']];
  29. if($param['inv_buyer_code']!="") $where[]= ["inv_buyer_code","=",$param['inv_buyer_code']];
  30. $list = $this->model->with(['ProductRela'=>["product"]])
  31. ->where($where)
  32. ->order("id desc")
  33. ->paginate(['page'=>$param['page'],'list_rows'=>$param['size']]);
  34. return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  35. }
  36. // 'code'=>'string',//订单或记录的唯一标识符
  37. // 'type'=>'int',//记录类型 1入库 2出库 3入库红冲 4出库红冲
  38. // 'source'=>'int',//数据来源,1结算 2 线下订单
  39. // channel=>'int',//渠道,1订单 2 线下订单 3 toC订单
  40. // 'seller_code'=>'string',//卖方代码
  41. // 'seller_name'=>'string',//卖方名称
  42. // 'buyer_code'=>'string',//买方代码
  43. // 'buyer_name'=>'string',//买方名称
  44. // 'orderCode'=>'string',//订单编号
  45. // 'cxCode'=>'string',//客户编号
  46. // 'poCode'=>'string',//采购订单编号
  47. // 'platform_type'=>'int',//平台类型,1ToB 2ToC
  48. // 'goodNo'=>'string',//商品编号
  49. // 'goodName'=>'string',//商品名称
  50. // 'unit'=>'string',//商品单位
  51. // 'num'=>'int',//商品数量
  52. // 'goodPrice'=>'decimal',//商品单价
  53. // 'totalPrice'=>'decimal',//商品总价
  54. // 'cat_code'=>'string',//商品分类代码
  55. // 'cat_name'=>'string',//商品分类名称
  56. // 'tax'=>'decimal',//税率或税费
  57. // 'inv_fee'=>'decimal',//发票费用
  58. // 'inv_seller_code'=>'string',//发票卖方代码
  59. // 'inv_seller_name'=>'string',//发票卖方名称
  60. // 'inv_buyer_code'=>'string',//发票买方代码
  61. // 'inv_buyer_name'=>'string',//发票买方名称
  62. // 'inv_number'=>'string',//发票编号
  63. // 'inv_type'=>'string',//发票类型
  64. // 'inv_item_id'=>'int',//发票项目ID
  65. // 'inv_good_name'=>'string',//发票商品名称
  66. // 'inv_cat_code'=>'string',//发票商品分类代码
  67. // 'inv_spec'=>'string',//发票商品规格
  68. // 'inv_unit'=>'string',//发票商品单位
  69. // 'inv_num'=>'int',//发票商品数量
  70. // 'inv_subprice'=>'decimal',//发票商品子项单价
  71. // 'inv_subtotal'=>'decimal',//发票商品子项总价
  72. // 'inv_tax'=>'decimal',//发票税额
  73. // 'inv_tax_total'=>'decimal',//发票总税额
  74. // 'inv_price'=>'decimal',//发票单价
  75. // 'inv_total'=>'decimal',//发票总价
  76. // 'cat_diff'=>'int',//分类差异
  77. // 'tax_diff'=>'int',//税费差异
  78. // 'remark'=>'string',//备注或说明
  79. public function create(){
  80. $list=$this->request->post("list",[],"trim");
  81. if(empty($list)) return error("请传入数据");
  82. foreach ($list as $key=>&$item){
  83. $valid = $this->validate($item,[
  84. 'type|单据类型'=>'require|in:1,2,3,4',
  85. 'source|单据来源'=>'require|in:1,2',
  86. "channel|渠道"=>'require|in:1,2,3',
  87. 'invoiceCode|发票代码'=>'max:255',
  88. 'seller_code|卖方公司纳税识别号'=>'require|max:255',
  89. 'seller_name|卖方公司名称'=>'require|max:255',
  90. 'buyer_code|买方公司纳税识别号'=>'require|max:255',
  91. 'buyer_name|买方公司名称'=>'require|max:255',
  92. 'orderCode|订单号'=>'max:255',
  93. 'cxCode|主订单号'=>'max:255',
  94. 'poCode|Po订单号'=>'max:255',
  95. 'platform_type|平台类型'=>'require|in:1,2',
  96. 'goodType|商品类型'=>'require|in:1,2,3',
  97. 'goodNo|商品编号'=>'require|max:255',
  98. 'goodName|商品名称'=>'require|max:255',
  99. 'unit|商品单位'=>'require|max:255',
  100. 'num|商品数量'=>'require|integer',
  101. 'goodPrice|商品单价'=>'require|float',
  102. 'totalPrice|商品总价'=>'require|float',
  103. 'cat_code|商品分类代码'=>'require|max:255',
  104. 'cat_name|商品分类名称'=>'require|max:255',
  105. 'tax|税率或税费'=>'require|float',
  106. 'inv_fee|发票费用'=>'float',
  107. 'inv_seller_code|发票卖方代码'=>'max:255',
  108. 'inv_seller_name|发票卖方名称'=>'max:255',
  109. 'inv_buyer_code|发票买方代码'=>'max:255',
  110. 'inv_buyer_name|发票买方名称'=>'max:255',
  111. 'inv_number|发票编号'=>'max:255',
  112. 'inv_type|发票类型'=>'max:255',
  113. 'inv_open_date|发票开票日期'=>'max:255',
  114. 'inv_item_id|发票项目ID'=>'integer',
  115. 'inv_good_name|发票商品名称'=>'max:255',
  116. 'inv_cat_code|发票商品分类代码'=>'max:255',
  117. 'inv_spec|发票商品规格'=>'max:255',
  118. 'inv_unit|发票商品单位'=>'max:255',
  119. 'inv_num|发票商品数量'=>'integer',
  120. 'inv_subprice|发票商品税后单价'=>'float',
  121. 'inv_subtotal|发票商品税后总价'=>'float',
  122. 'inv_tax|发票税额'=>'float',
  123. 'inv_tax_total|发票总税额'=>'float',
  124. 'inv_price|发票单价'=>'float',
  125. 'inv_total|发票总价'=>'float',
  126. 'cat_diff|分类差异'=>'integer',
  127. 'tax_diff|税费差异'=>'integer',
  128. 'remark|备注'=>'max:255',
  129. 'relaArr|关联数据'=>'array',
  130. 'fz_date|入账月份'=>'max:255'
  131. ]);
  132. if($valid!==true)return error($valid);
  133. if($item['channel']!=1 &&(empty($item['relaArr']))) return error("请传入商品关联信息");
  134. // if($item['channel']==1){
  135. // $check = $this->model->CheckDatas($item);
  136. // if(!empty($check)) return error("数据校验不通过",1004,$check);
  137. // }
  138. $item['apply_id']=$this->uid;
  139. $item['apply_name']=$this->uname;
  140. $item['code']= makeNo("PM", count($list)==1?"":str_pad(strval($key),4,0,STR_PAD_LEFT));
  141. }
  142. $this->model->startTrans();
  143. try{
  144. foreach ($list as $item){
  145. (new \app\cxinv\model\FinancialManager)->CreateData($item);
  146. }
  147. $this->model->commit();
  148. }catch (\Exception $e){
  149. $this->model->rollback();
  150. return error($e->getMessage());
  151. }
  152. return success("操作成功");
  153. }
  154. public function info(){
  155. $id=$this->request->param("id",0,"intval");
  156. $info=$this->model->findOrEmpty($id);
  157. if($info->isEmpty()) return error("数据不存在");
  158. return success("获取成功",$info);
  159. }
  160. //处理计提数据
  161. public function CheckAccrue(){
  162. $params = $this->request->param(["manager_id"=>"","relaArr"=>[],"checkFee"=>"","is_ChekOrder"=>0],"post","trim");
  163. $valid = $this->validate($params,[
  164. 'manager_id|出库明细ID'=>'require|integer',
  165. 'relaArr|关联数据'=>'require|array',
  166. 'checkFee|调整费用'=>'require|float',
  167. 'is_ChekOrder|是否添加调整单'=>'require|in:0,1',
  168. ]);
  169. if($valid!==true) return error($valid);
  170. $manager = $this->model->findOrEmpty($params['manager_id']);
  171. if($manager->isEmpty()) return error("计提数据不存在");
  172. if($manager['status']!=1) return error("当前数据状态不允许操作");
  173. if($manager->manager_status!=2) return error("当前数据不是计提状态");
  174. $manager->relaArr=$params['relaArr'];
  175. $this->model->startTrans();
  176. try{
  177. $check = $this->model->outProduct($manager);
  178. if(empty($check)) return error("商品数据计提处理失败");
  179. if($manager->balance_num!=0) return error("计提数据数量未处理完不可提交");
  180. ManagerProduct::AddProduct($manager->id,$check);
  181. $manager->uid=$this->uid; //调整单需要创建人
  182. $manager->uname=$this->uname;//调整单需要创建人
  183. $manager->checkFee=$params['checkFee'];
  184. $manager->is_chekOrder=$params['is_ChekOrder'];
  185. $manager->status=2;
  186. $manager->error_remark='';
  187. $manager->save();
  188. $this->model->commit();
  189. }catch (\Exception $e){
  190. $this->model->rollback();
  191. return error($e->getMessage());
  192. }
  193. return success("操作成功");
  194. }
  195. //处理待确认数据
  196. public function CheckSure(){
  197. $params = $this->request->param(['manager_id'=>'','relaArr'=>[],"fz_date"=>""],'post','trim');
  198. $valid = $this->validate($params,[
  199. 'manager_id|出库明细ID'=>'require|integer',
  200. 'relaArr|关联数据'=>'require|array',
  201. 'fz_date|封账月份'=>'max:255',
  202. ]);
  203. if($valid!==true) return error($valid);
  204. $manager = $this->model->findOrEmpty($params['manager_id']);
  205. if($manager->isEmpty()) return error('待确认数据不存在');
  206. if($manager['status']!=1) return error('当前待确认数据状态不允许操作');
  207. if($manager->manager_status!=3) return error('当前数据不是待确认状态');
  208. $manager->relaArr=$params['relaArr'];
  209. $manager->fz_date=$params['fz_date']??"";
  210. $this->model->startTrans();
  211. try{
  212. $check = $this->model->inProduct($manager);
  213. if(empty($check)) return error('待确认数据处理失败');
  214. if($manager->balance_num!=0) return error('待确认数据数量未处理完不可提交');
  215. ManagerProduct::AddProduct($manager->id,$check);
  216. $manager->uid=$this->uid; //调整单需要创建人
  217. $manager->uname=$this->uname;//调整单需要创建人
  218. $manager->status=2;
  219. $manager->error_remark='';
  220. $manager->save();
  221. $this->model->commit();
  222. }catch (\Exception $e){
  223. $this->model->rollback();
  224. return error($e->getMessage());
  225. }
  226. return success('操作成功');
  227. }
  228. //待确认数据 c端订单确认处理
  229. public function CheckSureByOther(){
  230. $params = $this->request->param(['manager_id'=>[],'relaArr'=>[],"fz_date"=>""],'post','trim');
  231. $valid = $this->validate($params,[
  232. 'manager_id|出库明细ID'=>'require|array',
  233. 'relaArr|关联数据'=>'require|array',
  234. 'fz_date|封账月份'=>'max:255',
  235. ]);
  236. if($valid!==true) return error($valid);
  237. $manager = $this->model->whereIn('id',$params['manager_id'])->select();
  238. if($manager->isEmpty()) return error('待确认数据不存在');
  239. $goodNos = array_unique(array_column($manager->toArray(),'goodNo'));
  240. if(count($goodNos)!=1) return error('待确认数据商品编码不一致');
  241. $this->model->startTrans();
  242. try{
  243. foreach ($manager as $item){
  244. $item->relaArr=$params['relaArr'];
  245. $item->fz_date=$params['fz_date']??"";
  246. $check = $this->model->inProduct($item);
  247. if(empty($check)) return error('待确认数据处理失败');
  248. if($item->balance_num!=0) return error('待确认数据数量未处理完不可提交');
  249. ManagerProduct::AddProduct($item->id,$check);
  250. $item->status=2;
  251. $item->error_remark='';
  252. $item->save();
  253. }
  254. $this->model->commit();
  255. }catch (\Exception $e){
  256. $this->model->rollback();
  257. return error($e->getMessage());
  258. }
  259. return success('操作成功');
  260. }
  261. // 删除待确认数据
  262. public function delete(){
  263. $id = $this->request->param('id','0','intval');
  264. $info=$this->model->findOrEmpty($id);
  265. if($info->isEmpty()) return error("数据不存在");
  266. if($info->status!=1) return error("当前数据状态不允许删除");
  267. if($info->manager_status!=3) return error("当前数据不是待确认数据");
  268. if($info->balance_num!=$info->total_num) return error("数据数量已处理过不可删除");
  269. $info->delete();
  270. return success("删除成功");
  271. }
  272. public function CheckList(){
  273. $params = $this->request->param(["page"=>1,"size"=>20,"goodType"=>'',"goodNo"=>'',"company_code"=>'',"start_time"=>"","end_time"=>"","keywords"=>""],"post","trim");
  274. $where=[];
  275. if($params['goodType']!='') $where[]=['goodType','=',$params['goodType']];
  276. if($params['goodNo']!='') $where[]=['goodNo','=',$params['goodNo']];
  277. if($params['company_code']!='') $where[]=['company_code','=',$params['company_code']];
  278. if($params['keywords']!="") $where[]=['goodName|goodNo','like',"%".$params['keywords']."%"];
  279. if($params['start_time']!="" && $params['end_time']!=""){
  280. $where[]=['create_time','between',[$params['start_time'],$params['end_time']]];
  281. }
  282. $list = FinancialCheck::where($where)
  283. ->order('id desc')
  284. ->paginate(['page'=>$params['page'],'list_rows'=>$params['size']]);
  285. return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  286. }
  287. }