TaxCategory.php 14 KB

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