TaxCategory.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace app\user\controller;
  3. use app\user\model\TaxCompany;
  4. use app\user\model\TaxRelation;
  5. use app\user\model\TaxRelationLog;use think\App;
  6. use think\facade\Validate;
  7. class TaxCategory extends Base{
  8. public function __construct(App $app) {
  9. parent::__construct($app);
  10. $this->model = new \app\user\model\TaxCategory();
  11. }
  12. public function list(){
  13. $params=$this->request->param(["cat_name"=>"","cat_code"=>"","status"=>[],"page"=>1,"size"=>15],"post","trim");
  14. $where=[];
  15. if($params["cat_name"]!='') $where[]=["cat_name|short_name","like","%".$params["cat_name"]."%"];
  16. if($params["cat_code"]!='') $where[]=["cat_code|merge_code","like","%".$params["cat_code"]."%"];
  17. if(!empty($params["status"])) $where[]=["status","in",$params["status"]];
  18. $list=$this->model->where($where)->order("status asc,id desc")->paginate(["page"=>$params["page"],"list_rows"=>$params["size"]]);
  19. return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
  20. }
  21. public function query(){
  22. $params=$this->request->param(["cat_name"=>"","cat_code"=>"","status"=>[]],"post","trim");
  23. $where=[["tax","<>",""]];
  24. if($params["cat_name"]!='') $where[]=["cat_name|short_name","like","%".$params["cat_name"]."%"];
  25. if($params["cat_code"]!='') $where[]=["cat_code|merge_code","like","%".$params["cat_code"]."%"];
  26. if(!empty($params["status"])) $where[]=["status","in",$params["status"]];
  27. $list=$this->model->where($where)
  28. ->field('cat_name,cat_code,status,tax,addtax,sumitem,`desc`,short_name,merge_code,LENGTH(cat_name) as weight')
  29. ->order("weight asc,id desc")
  30. ->limit(30)->select()->toArray();
  31. return success("获取成功",$list);
  32. }
  33. public function listByCompany(){
  34. $params=$this->request->param([
  35. "cat_name"=>"",
  36. "short_name"=>"",
  37. "income_status"=>"",
  38. "output_status"=>"",
  39. "cat_code"=>"",
  40. "in_status"=>"",
  41. 'out_status'=>'',
  42. "companyNo"=>"",
  43. "page"=>1,"size"=>15],"post","trim");
  44. $where=[];
  45. $whereor=[];
  46. if($params["cat_name"]!='') $where[]=["cat_name","like","%".$params["cat_name"]."%"];
  47. if($params["short_name"]!='') $where[]=["short_name","like","%".$params["short_name"]."%"];
  48. if($params["income_status"]!=='') $where[]=$params['income_status']==0 ? ['income','=',null] :['income','=',$params['income_status']];
  49. if($params["output_status"]!=='') $where[]=$params['output_status']==0 ? ['output','=',null] :['output','=',$params['output_status']];
  50. if($params['in_status']!='') $params['in_status']==0 ? ['in_status','=',null] :['in_status','=',$params['in_status']];
  51. if($params['out_status']!='') $params['out_status']==0 ? ['out_status','=',null] :['out_status','=',$params['out_status']];
  52. if($params["cat_code"]!='') $where[]=["cat_code|merge_code","like","%".$params["cat_code"]."%"];
  53. if($params["companyNo"]!='') $whereor=function ($query)use($params){
  54. $query->whereOr([['companyNo','=',$params['companyNo']],["companyNo","=",null]]);
  55. };
  56. $list=$this->model
  57. ->with(['TaxCompany'=>['company']])
  58. ->withJoin(['tax_company'],'left')
  59. ->where($where)
  60. ->where($whereor)
  61. ->order("id desc")->paginate(["page"=>$params["page"],"list_rows"=>$params["size"]])
  62. ->each(function($item){
  63. $item->income=$item->income??0;
  64. $item->output=$item->output??0;
  65. $item->in_status= $item->in_status??0;
  66. $item->out_status= $item->out_status??0;
  67. $item->incomeCn= TaxCompany::$useType[$item->income];
  68. $item->outputCn= TaxCompany::$useType[$item->output];
  69. $item->in_statusCn=TaxCompany::$inStatus[$item->in_status];
  70. $item->out_statusCn=TaxCompany::$inStatus[$item->out_status];
  71. })->visible(["id","cat_name","short_name","cat_code","merge_code","desc","tax","companyName","companyNo","in_status",
  72. "out_status","income","output","incomeCn","outputCn","in_statusCn","out_statusCn"]);
  73. return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
  74. }
  75. public function taxCompanySet(){
  76. $params=$this->request->param(["tax_ids"=>[],"companyNo"=>"","status"=>"","type"=>"in"],"post","trim");
  77. $valid=Validate::rule([
  78. "tax_ids|税目Id"=>"require|array",
  79. "companyNo|公司编号"=>"require",
  80. "status|状态"=>"require|integer|in:1,2",
  81. "type|类型"=>"require|in:in,out"
  82. ]);
  83. if(!$valid->check($params))return error($valid->getError());
  84. try{
  85. $taxCompany=new TaxCompany();
  86. $taxCompany->saveAll(array_map(function($item)use($params){
  87. $temp = [
  88. 'id'=>TaxCompany::where(['tax_id'=>$item,'companyNo'=>$params['companyNo']])->value('id',null),
  89. 'tax_id'=>$item,
  90. 'companyNo'=>$params['companyNo'],
  91. 'createrid'=>$this->uid,
  92. 'creater'=>$this->uname
  93. ];
  94. if($params['type']=='in'){
  95. $temp['income']=$params['status'];
  96. }else{
  97. $temp['output']=$params['status'];
  98. }
  99. return $temp;
  100. },$params['tax_ids']));
  101. }catch(\Exception $e){
  102. return error($e->getMessage());
  103. }
  104. return success("设置成功");
  105. }
  106. public function taxCompanyQuery(){
  107. $params=$this->request->param([
  108. 'cat_name'=>'',
  109. 'short_name'=>'',
  110. 'income_status'=>'',
  111. 'output_status'=>'',
  112. 'cat_code'=>'',
  113. 'in_status'=>'',
  114. 'out_status'=>'',
  115. 'companyNo'=>'',
  116. 'size'=>15],'post','trim');
  117. $where=[];
  118. if($params['cat_name']!='') $where[]=['cat_name','like','%'.$params['cat_name'].'%'];
  119. if($params['short_name']!='') $where[]=['short_name','like','%'.$params['short_name'].'%'];
  120. if($params['income_status']!=='') $where[]=$params['income_status']==0 ? ['income','is',null] :['income','=',$params['income_status']];
  121. if($params['output_status']!=='') $where[]=$params['output_status']==0 ? ['output','is',null] :['output','=',$params['output_status']];
  122. if($params['in_status']!='') $params['in_status']==0 ? ['in_status','is',null] :['in_status','=',$params['in_status']];
  123. if($params['out_status']!='') $params['out_status']==0 ? ['out_status','is',null] :['out_status','=',$params['out_status']];
  124. if($params['cat_code']!='') $where[]=['cat_code|merge_code','like','%'.$params['cat_code'].'%'];
  125. if($params['companyNo']!='') $where[]=['companyNo','like','%'.$params['companyNo'].'%'];
  126. $list=$this->model->with(['taxCompany'=>['company']])
  127. ->withJoin(['taxCompany'],'left')->where($where)
  128. ->order('id desc')->limit($params['size'])->select()
  129. ->visible(['id','cat_name','short_name','cat_code','merge_code','tax','companyName','companyNo','in_status',
  130. 'out_status','income','output','incomeCn','outputCn','in_statusCn','out_statusCn']);;
  131. return success('获取成功',$list);
  132. }
  133. public function taxCompanyCreate(){
  134. $params=$this->request->param(["in_tax_ids"=>[],"companyNo"=>"","out_tax_id"=>"",'out_bind_tax'=>''],"post","trim");
  135. $valid=Validate::rule([
  136. "in_tax_ids|进项类目"=>"require|array",
  137. "companyNo|公司编号"=>"require",
  138. "out_tax_id|销项类目"=>"require|integer",
  139. "out_bind_tax|销项税率"=>"require"
  140. ]);
  141. if(!$valid->check($params))return error($valid->getError());
  142. try {
  143. $inCheck = TaxCompany::taxCheck($params['companyNo'],$params['in_tax_ids']);
  144. if(!$inCheck)return error('进项类目配置异常');
  145. $outCheck=TaxCompany::taxCheck($params['companyNo'],$params['out_tax_id'],'out');
  146. if(!$outCheck)return error('销项类目配置异常');
  147. $isExist=TaxRelation::relationCheck($params['companyNo'],$params['in_tax_ids']);
  148. if(!$isExist)return error('进项类目已存在');
  149. $isInExist=\app\user\model\TaxCategory::checkTax($params['out_tax_id'],$params['out_bind_tax']);
  150. if(!$isInExist)return error('销项类目税率不存在');
  151. $createData=[
  152. 'income_tax_id'=>0,
  153. 'output_tax_id'=>$params['out_tax_id'],
  154. 'output_bind_tax'=>$params['out_bind_tax'],
  155. 'companyNo'=>$params['companyNo'],
  156. 'createrid'=>$this->uid,
  157. 'creater'=>$this->uname,
  158. ];
  159. (new TaxRelation())->saveAll(array_map(function($item)use($createData){
  160. $createData['income_tax_id']=$item;
  161. return $createData;
  162. },$params['in_tax_ids']));
  163. }catch (\Exception $e){
  164. return error($e->getMessage());
  165. }
  166. return success("添加成功");
  167. }
  168. public function taxCompanyUpdate(){
  169. $params=$this->request->param(["id"=>"",'out_tax_id'=>'','out_bind_tax'=>''],"post","trim");
  170. $valid=Validate::rule([
  171. "id|主键Id"=>"require|integer",
  172. "out_tax_id|销项类目"=>"require|integer",
  173. "out_bind_tax|销项税率"=>"require"
  174. ]);
  175. if(!$valid->check($params))return error($valid->getError());
  176. $relation=TaxRelation::where(["id"=>$params["id"]])->findOrEmpty();
  177. if($relation->isEmpty())return error("数据不存在");
  178. try{
  179. $outCheck=TaxCompany::taxCheck($relation->companyNo,$params['out_tax_id'],'out');
  180. if(!$outCheck)return error('销项类目配置异常');
  181. if($relation->output_tax_id!=$params['out_tax_id']){
  182. $isExist=TaxRelation::where([['companyNo','=',$relation->companyNo],['income_tax_id','=',
  183. $relation->income_tax_id],['output_tax_id','=',$params['out_tax_id']],['id','<>',$relation->id]])->findOrEmpty();
  184. if(!$isExist->isEmpty())return error('进销项类目关联已存在');
  185. }
  186. $isInExist=\app\user\model\TaxCategory::checkTax($params['out_tax_id'],$params['out_bind_tax']);
  187. if(!$isInExist)return error('销项类目税率不存在');
  188. $relation->output_tax_id=$params['out_tax_id'];
  189. $relation->output_bind_tax=$params['out_bind_tax'];
  190. $relation->updater=$this->uname;
  191. $save=$relation->save();
  192. if(!$save)return error("修改失败");
  193. }catch (\Exception $e){
  194. return error($e->getMessage());
  195. }
  196. return success("修改成功");
  197. }
  198. public function taxCompanyDelete(){
  199. $id=$this->request->post("id/d");
  200. $relation=TaxRelation::where(["id"=>$id])->findOrEmpty();
  201. if($relation->isEmpty())return error("数据不存在");
  202. $relation->updater=$this->uname;
  203. $save=$relation->delete();
  204. if($save)return success("删除成功");
  205. return error("删除失败");
  206. }
  207. public function taxCompanyList(){
  208. $params=$this->request->param(["companyNo"=>"","income_code"=>"","output_code"=>"","page"=>1,"size"=>15],"post","trim");
  209. $where=[];
  210. if($params["companyNo"]!='') $where[]=["companyNo","like","%".$params["companyNo"]."%"];
  211. if($params["income_code"]!='') $where[]=["incomeTax.merge_code","like","%".$params["income_code"]."%"];
  212. if($params["output_code"]!='') $where[]=["outputTax.merge_code","like","%".$params["output_code"]."%"];
  213. $list=TaxRelation::with(["incomeTax","company",'outputTax'])
  214. ->withJoin(["incomeTax","outputTax"])->where($where)->order("id desc")
  215. ->paginate(["page"=>$params["page"],"list_rows"=>$params["size"]]);
  216. return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
  217. }
  218. public function taxCompanyLog(){
  219. $params=$this->request->param(['companyNo'=>'','income_code'=>'','output_code'=>'','page'=>1,'size'=>15],'post','trim');
  220. $where=[];
  221. if($params['companyNo']!='') $where[]=['companyNo','like','%'.$params['companyNo'].'%'];
  222. if($params['income_code']!='') $where[]=['incomeTax.merge_code','like','%'.$params['income_code'].'%'];
  223. if($params['output_code']!='') $where[]=['outputTax.merge_code','like','%'.$params['output_code'].'%'];
  224. $list=TaxRelationLog::with(['incomeTax','company','outputTax'])
  225. ->withJoin(['incomeTax','outputTax'])->where($where)->order('id desc')
  226. ->paginate(['page'=>$params['page'],'list_rows'=>$params['size']])->each(function(&$item){
  227. if(!empty($item['change_content'])&& isset($item['change_content']['output_tax_id'])){
  228. $outputTax=\app\user\model\TaxCategory::where(['id'=>$item->change_content['output_tax_id']])->field('id output_tax_id,cat_name,merge_code,tax,short_name,cat_code')->findOrEmpty();
  229. if(!$outputTax->isEmpty()){
  230. $item->change_content=array_merge($item->change_content,["output_tax_info"=>$outputTax]);
  231. }
  232. }
  233. });
  234. return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  235. }
  236. }