TaxCategory.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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']!='') $where[]=$params['in_status']==0 ? ['in_status','=',null] :['in_status','=',$params['in_status']];
  50. if($params['out_status']!='') $where[]=$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. ->limit($params['size'])
  130. ->order('tax_category.id desc')->select()
  131. ->each(function($item){
  132. $item->income=$item->income??0;
  133. $item->output=$item->output??0;
  134. $item->in_status= $item->in_status??0;
  135. $item->out_status= $item->out_status??0;
  136. $item->incomeCn= TaxCompany::$useType[$item->income];
  137. $item->outputCn= TaxCompany::$useType[$item->output];
  138. $item->in_statusCn=TaxCompany::$inStatus[$item->in_status];
  139. $item->out_statusCn=TaxCompany::$inStatus[$item->out_status];
  140. });
  141. return success('获取成功',$list);
  142. }
  143. public function taxCompanyCreate(){
  144. $params=$this->request->param(["in_tax_ids"=>[],"companyNo"=>"","out_tax_id"=>"",'out_bind_tax'=>''],"post","trim");
  145. $valid=Validate::rule([
  146. "in_tax_ids|进项类目"=>"require|array",
  147. "companyNo|公司编号"=>"require",
  148. "out_tax_id|销项类目"=>"require|integer",
  149. "out_bind_tax|销项税率"=>"require"
  150. ]);
  151. if(!$valid->check($params))return error($valid->getError());
  152. try {
  153. $inCheck = TaxCompany::taxCheck($params['companyNo'],$params['in_tax_ids']);
  154. if(!$inCheck)return error('进项类目配置异常');
  155. $outCheck=TaxCompany::taxCheck($params['companyNo'],$params['out_tax_id'],'out');
  156. if(!$outCheck)return error('销项类目配置异常');
  157. $isExist=TaxRelation::relationCheck($params['companyNo'],$params['in_tax_ids']);
  158. if(!$isExist)return error('进项类目已存在');
  159. $isInExist=\app\user\model\TaxCategory::checkTax($params['out_tax_id'],$params['out_bind_tax']);
  160. if(!$isInExist)return error('销项类目税率不存在');
  161. $createData=[
  162. 'income_tax_id'=>0,
  163. 'output_tax_id'=>$params['out_tax_id'],
  164. 'output_bind_tax'=>$params['out_bind_tax'],
  165. 'companyNo'=>$params['companyNo'],
  166. 'createrid'=>$this->uid,
  167. 'creater'=>$this->uname,
  168. ];
  169. (new TaxRelation())->saveAll(array_map(function($item)use($createData){
  170. $createData['income_tax_id']=$item;
  171. return $createData;
  172. },$params['in_tax_ids']));
  173. }catch (\Exception $e){
  174. return error($e->getMessage());
  175. }
  176. return success("添加成功");
  177. }
  178. public function taxCompanyUpdate(){
  179. $params=$this->request->param(["id"=>"",'out_tax_id'=>'','out_bind_tax'=>''],"post","trim");
  180. $valid=Validate::rule([
  181. "id|主键Id"=>"require|integer",
  182. "out_tax_id|销项类目"=>"require|integer",
  183. "out_bind_tax|销项税率"=>"require"
  184. ]);
  185. if(!$valid->check($params))return error($valid->getError());
  186. $relation=TaxRelation::where(["id"=>$params["id"]])->findOrEmpty();
  187. if($relation->isEmpty())return error("数据不存在");
  188. try{
  189. $outCheck=TaxCompany::taxCheck($relation->companyNo,$params['out_tax_id'],'out');
  190. if(!$outCheck)return error('销项类目配置异常');
  191. if($relation->output_tax_id!=$params['out_tax_id']){
  192. $isExist=TaxRelation::where([['companyNo','=',$relation->companyNo],['income_tax_id','=',
  193. $relation->income_tax_id],['output_tax_id','=',$params['out_tax_id']],['id','<>',$relation->id]])->findOrEmpty();
  194. if(!$isExist->isEmpty())return error('进销项类目关联已存在');
  195. }
  196. $isInExist=\app\user\model\TaxCategory::checkTax($params['out_tax_id'],$params['out_bind_tax']);
  197. if(!$isInExist)return error('销项类目税率不存在');
  198. $relation->output_tax_id=$params['out_tax_id'];
  199. $relation->output_bind_tax=$params['out_bind_tax'];
  200. $relation->updater=$this->uname;
  201. $save=$relation->save();
  202. if(!$save)return error("修改失败");
  203. }catch (\Exception $e){
  204. return error($e->getMessage());
  205. }
  206. return success("修改成功");
  207. }
  208. public function taxCompanyDelete(){
  209. $id=$this->request->post("id/d");
  210. $relation=TaxRelation::where(["id"=>$id])->findOrEmpty();
  211. if($relation->isEmpty())return error("数据不存在");
  212. $relation->updater=$this->uname;
  213. $save=$relation->delete();
  214. if($save)return success("删除成功");
  215. return error("删除失败");
  216. }
  217. public function taxCompanyList(){
  218. $params=$this->request->param(["companyNo"=>"","income_code"=>"","output_code"=>"","page"=>1,"size"=>15],"post","trim");
  219. $where=[];
  220. if($params["companyNo"]!='') $where[]=["companyNo","like","%".$params["companyNo"]."%"];
  221. if($params["income_code"]!='') $where[]=["incomeTax.merge_code","like","%".$params["income_code"]."%"];
  222. if($params["output_code"]!='') $where[]=["outputTax.merge_code","like","%".$params["output_code"]."%"];
  223. $list=TaxRelation::with(["incomeTax","company",'outputTax'])
  224. ->withJoin(["incomeTax","outputTax"])->where($where)->order("id desc")
  225. ->paginate(["page"=>$params["page"],"list_rows"=>$params["size"]]);
  226. return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
  227. }
  228. public function taxCompanyLog(){
  229. $params=$this->request->param(['companyNo'=>'','income_code'=>'','output_code'=>'','change_type'=>'','page'=>1,'size'=>15],'post','trim');
  230. $where=[];
  231. if($params['companyNo']!='') $where[]=['companyNo','like','%'.$params['companyNo'].'%'];
  232. if($params['income_code']!='') $where[]=['incomeTax.merge_code','like','%'.$params['income_code'].'%'];
  233. if($params['output_code']!='') $where[]=['outputTax.merge_code','like','%'.$params['output_code'].'%'];
  234. if($params['change_type']!='') $where[]=['change_type','=',$params['change_type']];
  235. $list=TaxRelationLog::with(['incomeTax','company','outputTax'])
  236. ->withJoin(['incomeTax','outputTax'])->where($where)->order('id desc')
  237. ->paginate(['page'=>$params['page'],'list_rows'=>$params['size']])->each(function(&$item){
  238. if(!empty($item['change_content'])&& isset($item['change_content']['output_tax_id'])){
  239. $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();
  240. if(!$outputTax->isEmpty()){
  241. $item->change_content=array_merge($item->change_content,["output_tax_info"=>$outputTax]);
  242. }
  243. }
  244. });
  245. return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  246. }
  247. }