Programme.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use app\common\model\Goods;
  5. use app\common\model\GoodsInstall;
  6. use app\common\model\GoodsInstallLink;
  7. use app\common\model\GoodsSku;
  8. use app\common\model\OrderInfo;
  9. use app\common\model\ProgrammeGoods;
  10. use app\common\model\Refund;
  11. use app\common\service\InstallService;
  12. use app\common\service\OrderService;
  13. use think\Db;
  14. use app\common\model\Orders as Order;
  15. /**
  16. * 快速报价接口
  17. * @inheritdoc
  18. */
  19. class Programme extends Api
  20. {
  21. protected $noNeedRight="*";
  22. protected $noNeedLogin=['calculate'];
  23. /**
  24. * 预估报价
  25. * @ApiMethod (POST)
  26. * @ApiParams (name=sku,description="key为规格id,对象:num购买数量,num_install安装数量,{1:{num:1,num_install:2}})
  27. * ApiReturnParams (name=logo,description=logo)
  28. * @ApiReturnParams (name=name,description=商品名称)
  29. * @ApiReturnParams (name=sku,description=规格)
  30. * @ApiReturnParams (name=amount,description=单价)
  31. * @ApiReturnParams (name=amount_install,description=安装费)
  32. * @ApiReturnParams (name=amount_total,description=共计)
  33. *@ApiReturnParams (name=total,description=预估报价)
  34. * @ApiReturnParams (name=num,description=采购数量)
  35. * @ApiReturnParams (name=num_install,description=安装数量)
  36. * @ApiReturnParams (name=category_id,description=商品分类id)
  37. * @ApiReturnParams (name=amount_install_single,description=安装费单价)
  38. */
  39. public function calculate(){
  40. $sku = input('sku');
  41. if(!$sku){
  42. $this->error('请传商品信息');
  43. }
  44. $sku = htmlspecialchars_decode($sku);
  45. $sku = json_decode($sku,true);
  46. $goods = [];
  47. $goodsModel = new Goods();
  48. $goodsSkuModel = new GoodsSku();
  49. $total = 0;
  50. foreach ($sku as $k=>$v){
  51. $goodsSku = $goodsSkuModel->where('id',$k)->find();
  52. $nowGoods = $goodsModel->where('id',$goodsSku['goods_id'])->find();
  53. $goods[$k]['logo'] = $nowGoods['logo'];
  54. $goods[$k]['name'] = $nowGoods['name'];
  55. $goods[$k]['sku'] = $goodsSku['name'];
  56. $goods[$k]['sku_id'] = $k;
  57. $goods[$k]['num'] = $v['num'];
  58. $goods[$k]['category_id'] = $nowGoods['category_id'];
  59. $goods[$k]['num_install'] = $v['num_install'];
  60. $goods[$k]['amount'] = $goodsSku['amount'];//单价
  61. $goods[$k]['amount_install']=InstallService::getFee([$k=>$v]);//安装费
  62. $goods[$k]['amount_install_single']=$goods[$k]['num_install']>0?bcdiv($goods[$k]['amount_install'],$v['num_install']):0;//安装费
  63. //$goods[$k]['amount_total']=bcmul($goodsSku['amount'],$v['num']);
  64. list($goods[$k]['amount_total'],$_,$goods[$k]['amount'])=OrderService::getAmount($goodsSku,$goodsSku->goods,$v['num']);
  65. $goods[$k]['amount_total']=bcadd($goods[$k]['amount_total'],$goods[$k]['amount_install']);
  66. $total+=$goods[$k]['amount_total'];
  67. }
  68. $goods = array_values($goods);
  69. $result = ['goods'=>$goods,'total'=>$total];
  70. $this->success('',$result);
  71. }
  72. /**
  73. * 保存方案
  74. * @ApiMethod (POST)
  75. * @ApiParams (name=sku,description="key为规格id,对象:num购买数量,num_install安装数量,{1:{num:1,num_install:2}})
  76. * @ApiParams (name=name,description=方案名称)
  77. */
  78. public function submit(){
  79. $data=input();
  80. $this->validate($data,[
  81. 'sku|商品'=>['require','min:1'],
  82. 'name|方案名称'=>['require','max:100'],
  83. ]);
  84. Db::startTrans();
  85. $user=$this->auth->getUser();
  86. $data['createtime'] = time();
  87. $data['user_id'] = $user['id'];
  88. $reault = Db::name('Programme')->strict(false)->insert($data);
  89. $id = Db::name('Programme')->getLastInsID();
  90. $sku = htmlspecialchars_decode($data['sku']);
  91. $sku = json_decode($sku,true);
  92. $goods = [];
  93. $goodsModel = new Goods();
  94. $goodsSkuModel = new GoodsSku();
  95. $total = 0;
  96. foreach ($sku as $k=>$v){
  97. $goodsSku = $goodsSkuModel->where('id',$k)->find();
  98. $nowGoods = $goodsModel->where('id',$goodsSku['goods_id'])->find();
  99. $goods[$k]['programme_id'] = $id;
  100. $goods[$k]['goods_id'] = $goodsSku['goods_id'];
  101. $goods[$k]['sku_id'] = $k;
  102. $goods[$k]['logo'] = implode(',',$nowGoods['logo']);
  103. $goods[$k]['name'] = $nowGoods['name'];
  104. $goods[$k]['sku'] = $goodsSku['name'];
  105. $goods[$k]['num'] = $v['num'];
  106. $goods[$k]['num_install'] = $v['num_install'];
  107. $goods[$k]['amount'] = $goodsSku['amount'];//单价
  108. $goods[$k]['amount_install']=InstallService::getFee([$k=>$v]);//安装费
  109. $goods[$k]['amount_total']=bcmul($goodsSku['amount'],$v['num']);
  110. $goods[$k]['amount_total']=bcadd($goods[$k]['amount_total'],$goods[$k]['amount_install']);
  111. $total+=$goods[$k]['amount_total'];
  112. }
  113. $goods = array_values($goods);
  114. $goodsResult = Db::name('ProgrammeGoods')->strict(false)->insertAll($goods);
  115. $totalResult = Db::name('Programme')->where('id',$id)->setField('amount_total',$total);
  116. if(!$reault || !$goodsResult || !$totalResult){
  117. Db::rollback();
  118. $this->error('保存失败');
  119. }
  120. Db::commit();
  121. $this->success('保存成功');
  122. }
  123. /**
  124. * 用户方案列表
  125. * @ApiParams (name=page,description=分页)
  126. * @ApiParams (name=limit,description=分页)
  127. *ApiReturnParams (name=id,description=方案id)
  128. * ApiReturnParams (name=name,description=方案名称)
  129. * ApiReturnParams (name=createtime,description=创建时间)
  130. * ApiReturnParams (name=sku_id,description=规格低)
  131. * ApiReturnParams (name=sku,description=规格名称)
  132. * ApiReturnParams (name=num,description=数量)
  133. */
  134. public function lists(){
  135. $user=$this->auth->getUser();
  136. $lists=$user->programmes()
  137. ->order('id','desc')
  138. ->paginate(input('limit',15));
  139. $data = $lists->toArray();
  140. $list = $data['data'];
  141. foreach ($list as &$v){
  142. $v['goods'] = Db('ProgrammeGoods')->where('programme_id',$v['id'])->select();
  143. }
  144. $data['data'] = $list;
  145. $this->success('',$data);
  146. }
  147. /**
  148. * 查看方案
  149. * @ApiParams (name=id,description=方案id)
  150. * @ApiParams (name=page,description=分页)
  151. * @ApiParams(name=limit,description=分页)
  152. * ApiReturnParams (name=goods_id,description=商品id)
  153. * ApiReturnParams (name=logo,description=logo)
  154. * ApiReturnParams (name=name,description=商品名称)
  155. * @ApiReturnParams (name=sku,description=规格)
  156. * @ApiReturnParams (name=amount,description=单价)
  157. * @ApiReturnParams (name=amount_install,description=安装费)
  158. * ApiReturnParams (name=createtime,description=创建时间)
  159. */
  160. public function detail(){
  161. $id = input('id');
  162. $user=$this->auth->getUser();
  163. $lists= ProgrammeGoods::where('programme_id',$id)
  164. ->order('id','desc')
  165. ->paginate(input('limit',15));
  166. $data = $lists->toArray();
  167. $list = $data['data'];
  168. foreach ($list as &$v){
  169. $v['logo'] = explode(',', $v['logo']);
  170. }
  171. $data['data'] = $list;
  172. $this->success('',$data);
  173. }
  174. /**
  175. * 查看方案无分页
  176. * @ApiParams (name=id,description=方案id)
  177. * @ApiParams (name=page,description=分页)
  178. * @ApiParams(name=limit,description=分页)
  179. * ApiReturnParams (name=goods_id,description=商品id)
  180. * ApiReturnParams (name=logo,description=logo)
  181. * ApiReturnParams (name=name,description=商品名称)
  182. * @ApiReturnParams (name=sku,description=规格)
  183. * @ApiReturnParams (name=amount,description=单价)
  184. * @ApiReturnParams (name=amount_install,description=安装费)
  185. * ApiReturnParams (name=createtime,description=创建时间)
  186. */
  187. public function detail1(){
  188. $id = input('id');
  189. $user=$this->auth->getUser();
  190. $list= ProgrammeGoods::where('programme_id',$id)
  191. ->order('id','desc')
  192. ->select();
  193. foreach ($list as &$v){
  194. $v['logo'] = explode(',', $v['logo']);
  195. $v['num_stock']=$v['skuObj']['num_stock'];
  196. }
  197. $data['data'] = $list;
  198. $this->success('',$data);
  199. }
  200. /**
  201. * 删除方案
  202. *@ApiParams (name=id,description=方案id)
  203. */
  204. public function delete(){
  205. $id = input('id');
  206. Db('Programme')->where('id',$id)->delete();
  207. Db('ProgrammeGoods')->where('programme_id',$id)->delete();
  208. $this->success('删除成功');
  209. }
  210. /**
  211. * 删除方案商品
  212. * @ApiParams (name=ids,description=方案详情id)
  213. */
  214. public function deleteGoods(){
  215. $id = input('ids');
  216. $user=$this->auth->getUser();
  217. ProgrammeGoods::whereIn('id',$id)
  218. ->whereExists(
  219. \app\common\model\Programme::where('user_id',$user->id)->where('id',Db::raw((new ProgrammeGoods)->getTable().'.programme_id'))->buildSql()
  220. )
  221. ->delete();
  222. $this->success('删除成功');
  223. }
  224. /**
  225. * 方案详情
  226. * @ApiParams (name=id,description=方案id)
  227. * ApiReturnParams (name=goods_id,description=商品id)
  228. * ApiReturnParams (name=logo,description=logo)
  229. * ApiReturnParams (name=name,description=商品名称)
  230. * @ApiReturnParams (name=sku,description=规格)
  231. * @ApiReturnParams (name=amount,description=单价)
  232. * @ApiReturnParams (name=amount_install,description=安装费)
  233. * ApiReturnParams (name=createtime,description=创建时间)
  234. */
  235. public function info(){
  236. $id = input('id');
  237. $goods = Db('ProgrammeGoods')->where('programme_id',$id)->select();
  238. $goodsIds = Db('ProgrammeGoods')->where('programme_id',$id)->column('goods_id');
  239. $left = [];
  240. foreach ($goodsIds as $k=>$v){
  241. $nowGoods = Db('ProgrammeGoods')->where('goods_id',$v)->where('programme_id',$id)->find();
  242. $categoryId = Db('Goods')->where('id',$v)->value('category_id');
  243. $cate = DB('category')->field('id,name')->where('id',$categoryId)->find();
  244. if(empty($left[$cate['id']])){
  245. $left[$cate['id']] = $cate;
  246. }
  247. array_push($left[$cate['id']],$nowGoods);
  248. }
  249. $left = array_values($left);
  250. dump($left);
  251. }
  252. /**
  253. * 更新方案
  254. * @ApiParams (name=skuid,description=skuid)
  255. * @ApiParams (name=pid,description=方案ID)
  256. * @ApiParams (name=num,description=数量)
  257. * @ApiParams (name=num_install,description=安装数量)
  258. */
  259. public function update(){
  260. $data=$this->_validate([
  261. 'pid'=>['require'],
  262. 'skuid'=>['require'],
  263. 'num'=>['require'],
  264. 'num_install'=>['require'],
  265. ]);
  266. $user=$this->auth->getUser();
  267. \app\common\model\Programme::where('user_id',$user['id'])->findOrFail($data['pid']);
  268. $goods=ProgrammeGoods::where('programme_id',$data['pid'])
  269. ->where('sku_id',$data['skuid'])
  270. ->find();
  271. if($goods){
  272. $goods['num']=$data['num'];
  273. $goods['num_install']=$data['num_install'];
  274. $goods->save();
  275. }
  276. $this->success();
  277. }
  278. }