Good.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\controller;
  4. use think\App;use think\facade\Validate;
  5. class Good extends Base
  6. {
  7. protected $model=null;
  8. protected $novalidate=["*"];
  9. public function __construct(App $app) {
  10. parent::__construct($app);
  11. $this->model=new \app\admin\model\Good();
  12. }
  13. /** 商品列表
  14. * @throws \think\db\exception\DbException
  15. * @throws \think\exception\DbException
  16. */
  17. public function list(){
  18. $param=$this->request->param(["spuCode"=>"","status"=>"","good_name"=>"",'companyNo'=>'','supplierNo'=>'',
  19. 'creater'=>'','isZx'=>'',"cat_diff"=>"","tax_diff"=>"","is_diff"=>"","start"=>"",'end'=>'','page'=>'1',
  20. 'size'=>'15'],"post","trim");
  21. $where=[];
  22. $param["spuCode"]==""?: $where[]=['spuCode','like',"%{$param['spuCode']}%"];
  23. $param["good_name"]==""?: $where[]=['good_name','like',"%{$param['good_name']}%"];
  24. $param["companyNo"]==""?: $where[]=['companyNo','like',"%{$param['companyNo']}%"];
  25. $param["supplierNo"]==""?: $where[]=['supplierNo','like',"%{$param['supplierNo']}%"];
  26. $param["creater"]==""?: $where[]=['creater','like',"%{$param['creater']}%"];
  27. $param["status"]===""?: $where[]=['status','=',$param['status']];
  28. $param["isZx"]==""?: $where[]=['isZx','=',$param['isZx']];
  29. $param["is_diff"]==""?: $where[]=['cat_diff|tax_diff','=',2];
  30. $param["cat_diff"]==""?: $where[]=['cat_diff','=',$param['cat_diff']];
  31. $param["tax_diff"]==""?: $where[]=['tax_diff','=',$param['tax_diff']];
  32. $param["start"]==""?: $where[]=['addtime','>=',date("Y-m-d 00:00:00",strtotime($param['start']))];
  33. $param["end"]==""?: $where[]=['addtime','<=',date("Y-m-d 23:59:59",strtotime($param['end']))];
  34. $list= $this->model
  35. ->where($where)
  36. ->order("id desc")
  37. ->paginate(["page"=>$param['page'],"list_rows"=>$param["size"]]);
  38. $this->success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
  39. }
  40. //批量更新数据状态审核
  41. public function exam(){
  42. $param=$this->request->param(["list"=>[],"status"=>""],"post","trim");
  43. $valid=Validate::rule(["list|审核数据集"=>"require|array","status|状态"=>"require|number|in:1,2"]);
  44. if($valid->check($param)==false)$this->error($valid->getError());
  45. $validList=Validate::rule([
  46. 'spuCode|商品编号' => 'require|max:255',
  47. 'tax|税率' => 'require|max:4',
  48. 'cat_code|类目编号简写' => 'require|max:255',
  49. 'inv_good_name|开票商品名称' => 'require|max:255',
  50. 'inv_tag|税率标识' => 'requireIf:status,2|between:0,3',
  51. 'is_discount|是否有优惠政策' => 'requireIf:status,2|in:0,1',
  52. 'addTax|增值税管理内容' => 'max:255']);
  53. $goodUpdate=[];
  54. $catArr = \app\admin\model\InvCat::where(["merge_code"=>array_unique(array_column($param['list'],"cat_code"))])
  55. ->column('tax,merge_code,short_name', 'merge_code');
  56. foreach ($param['list'] as $item){
  57. $temp=[];
  58. $item['status'] = $param['status'];
  59. if($validList->check($item)==false) $this->error("商品{$item['spuCode']}".$validList->getError());
  60. $good=$this->model->where(["spuCode"=>$item['spuCode']])->findOrEmpty();
  61. if($good->isEmpty())$this->error("商品信息{$item['spuCode']}不存在");
  62. if(!isset($catArr[$item['cat_code']]))$this->error("商品{$item['spuCode']}所选类目不存在");
  63. $tax = $catArr[$item['cat_code']]['tax']==""?[]:explode('、', $catArr[$item['cat_code']]['tax']);
  64. if(!in_array($item['tax'],$tax))$this->error("商品{$item['spuCode']}所选税率与类目包含税率不一致");
  65. //采购端修改 只能在待财务设置税务类目状态 切该商品未参与采购付款回票对账
  66. //销售端修改 只要没参与销售回款开票结算
  67. $temp['id']=$good->id;
  68. $temp['status']=$param['status'];
  69. if($param['status']<$good->status) $this->error("商品{$item['spuCode']}当前状态".\app\admin\model\Good::$status[$good->status]."不可修改");
  70. $tax= $item['tax'];
  71. $item['tax'] = bcdiv(str_replace('%', '', $item['tax']), "100", 2);
  72. if($param['status']==1){
  73. if($good->cgd_to_pay)$this->error("商品{$item['spuCode']}已参与采购付款回票对账");
  74. $temp["cgd_inv_cat_code"]=$catArr[$item['cat_code']]['merge_code'];
  75. $temp["cgd_inv_cat_name"]=$catArr[$item['cat_code']]['short_name'];
  76. $temp["cgd_inv_good_name"]= $item['inv_good_name'];
  77. $temp["cgd_inv_tax"]= $item['tax'];
  78. }
  79. if($param['status']==2){
  80. if($good->qrd_to_pay)$this->error("商品{$item['spuCode']}已参与销售回款开票结算");
  81. $check = CheckTax($item['is_discount'],$item['tax'],$item['inv_tag'],
  82. $item['addTax'],$message);
  83. if($check==false)$this->error("商品{$item['spuCode']}{$message}");
  84. $temp['inv_cat_code']=$catArr[$item['cat_code']]['merge_code'];
  85. $temp['inv_cat_name']=$catArr[$item['cat_code']]['short_name'];
  86. $temp['inv_good_name']= $item['inv_good_name'];
  87. $temp['inv_tax']= $item['tax'];
  88. $temp['is_discount']= $item['is_discount'];
  89. $temp['addTax']= $item['addTax'];
  90. $temp['inv_tag']= $item['inv_tag'];
  91. $temp['tax_diff']= $tax==$good->cgd_inv_tax?1:2;
  92. $temp['cat_diff']= $temp['inv_cat_code']==$good->cgd_inv_cat_code?1:2;
  93. }
  94. $examinfo=$good->exam_info;
  95. $examinfo[]=['apply_name'=>$this->uname,'exam_status'=>$item['status'],"updatetime"=>date("Y-m-d H:i:s")];
  96. $temp['exam_info'] = json_encode($examinfo,JSON_UNESCAPED_UNICODE);
  97. $goodUpdate[]=$temp;
  98. }
  99. $this->model->saveAll($goodUpdate);
  100. $this->success("更新成功");
  101. }
  102. //商品信息
  103. public function info(){
  104. $param=$this->request->param(['spuCode'=>''],'post','trim');
  105. $valid=Validate::rule(['spuCode|商品成本编号'=>'require|max:255']);
  106. if($valid->check($param)==false)$this->error($valid->getError());
  107. $info = $this->model->where(["spuCode"=>$param['spuCode']])->findOrEmpty();
  108. if($info->isEmpty())$this->error("商品信息不存在");
  109. $this->success("获取成功",$info);
  110. }
  111. //导出列表
  112. public function exportDiff(){
  113. $param=$this->request->param(['spuCode'=>'','status'=>'','good_name'=>'','companyNo'=>'','supplierNo'=>'',
  114. 'creater'=>'','isZx'=>'','cat_diff'=>'','tax_diff'=>'',"start"=>"",'end'=>'','is_diff'=>''],'post','trim');
  115. ini_set('memory_limit' , '-1');
  116. $where=[];
  117. $param['spuCode']==''?: $where[]=['spuCode','like',"%{$param['spuCode']}%"];
  118. $param['good_name']==''?: $where[]=['good_name','like',"%{$param['good_name']}%"];
  119. $param['companyNo']==''?: $where[]=['companyNo','like',"%{$param['companyNo']}%"];
  120. $param['supplierNo']==''?: $where[]=['supplierNo','like',"%{$param['supplierNo']}%"];
  121. $param['creater']==''?: $where[]=['creater','like',"%{$param['creater']}%"];
  122. $param['status']===''?: $where[]=['status','=',$param['status']];
  123. $param['isZx']==''?: $where[]=['isZx','=',$param['isZx']];
  124. $param['is_diff']==''?: $where[]=['cat_diff|tax_diff','=',2];
  125. $param['cat_diff']==''?: $where[]=['cat_diff','=',$param['cat_diff']];
  126. $param['tax_diff']==''?: $where[]=['tax_diff','=',$param['tax_diff']];
  127. $param['start']==''?: $where[]=['addtime','>=',date('Y-m-d 00:00:00',strtotime($param['start']))];
  128. $param['end']==''?: $where[]=['addtime','<=',date('Y-m-d 23:59:59',strtotime($param['end']))];
  129. $field=["spuCode","cat_name","good_name","isZx","inv_cat_name","inv_good_name","inv_tax","cgd_inv_cat_name","
  130. cgd_inv_good_name","cgd_inv_tax","cat_diff","tax_diff","addtime"];
  131. $list= $this->model->export($where,$field);
  132. $header=["商品编码","商品分类","商品名称",'商品类型','采购商品类目','采购商品名称','采购商品税率','财务商品类目','财务商品名称','财务商品税率',
  133. '类目是否一致','税率是否一致','创建时间'];
  134. excelExport("商品税率异常记录", $header, $list);
  135. }
  136. }