Goods.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?php
  2. namespace app\admin\controller\service;
  3. use app\common\controller\Backend;
  4. use think\Db;
  5. /**
  6. * 项目管理
  7. *
  8. * @icon fa fa-circle-o
  9. */
  10. class Goods extends Backend
  11. {
  12. /**
  13. * Goods模型对象
  14. * @var \app\admin\model\service\Goods
  15. */
  16. protected $model = null;
  17. public function _initialize()
  18. {
  19. parent::_initialize();
  20. $this->model = new \app\admin\model\service\Goods;
  21. $this->view->assign("typeList", $this->model->getTypeList());
  22. $this->view->assign("isTravelList", $this->model->getIsTravelList());
  23. $this->view->assign("chooseSkillTypeList", $this->model->getChooseSkillTypeList());
  24. $this->view->assign("specTypeList", $this->model->getSpecTypeList());
  25. $this->view->assign("shopStateList", $this->model->getShopStateList());
  26. $this->view->assign("statusList", $this->model->getStatusList());
  27. $this->view->assign("toshopList", $this->model->getToshopList());
  28. }
  29. public function index()
  30. {
  31. //设置过滤方法
  32. $this->request->filter(['strip_tags', 'trim']);
  33. if (false === $this->request->isAjax()) {
  34. return $this->view->fetch();
  35. }
  36. //如果发送的来源是 Selectpage,则转发到 Selectpage
  37. if ($this->request->request('keyField')) {
  38. return $this->selectpage();
  39. }
  40. [$where, $sort, $order, $offset, $limit] = $this->buildparams();
  41. $list = $this->model
  42. ->where($where)
  43. ->where('shop_id',0)
  44. ->order($sort, $order)
  45. ->paginate($limit);
  46. foreach ($list as &$value)
  47. {
  48. $value->categoryName = \app\admin\model\service\Category::where('id',$value->category_id)->value('name');
  49. $value->twoCategoryName = \app\admin\model\service\Category::where('id',$value->two_category_id)->value('name');
  50. $value->skillCateName = \app\api\model\service\SkillCate::getNameList($value->skill_cate_ids);
  51. $value->update_time = $value->updatetime?date("Y-m-d",$value->updatetime):'';
  52. $value->create_time = date("Y-m-d",$value->createtime);
  53. }
  54. $result = ['total' => $list->total(), 'rows' => $list->items()];
  55. return json($result);
  56. }
  57. public function add()
  58. {
  59. if (false === $this->request->isPost()) {
  60. return $this->view->fetch();
  61. }
  62. $params = $this->request->post('row/a');
  63. if (empty($params)) {
  64. $this->error(__('Parameter %s can not be empty', ''));
  65. }
  66. $params = $this->preExcludeFields($params);
  67. ($params['spec_type'] == 1 && !$params['spu']) && $this->error('请完善项目规格');
  68. if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
  69. $params[$this->dataLimitField] = $this->auth->id;
  70. }
  71. $result = false;
  72. if($params['city']){
  73. $address = explode('/',$params['city']);
  74. $params['province'] = $address[0];
  75. $params['city'] = $address[1];
  76. //$params['district'] = isset($address[1])?:'';
  77. $cityList = \app\admin\model\service\Cityconfig::column('city');
  78. !in_array($params['city'],$cityList) && $this->error('当前城市未开通');
  79. }else{
  80. unset($params['city']);
  81. }
  82. Db::startTrans();
  83. try {
  84. $params['shop_state'] = 1;
  85. $goods = new \app\admin\model\service\Goods ($params);
  86. $goods->allowField(true)->save();
  87. $result = true;
  88. if($params['spec_type'] == 1)
  89. {
  90. $spuList = json_decode($params['spu'],true);
  91. $spu = [];
  92. foreach ($spuList as $value) {
  93. $spu[] = [
  94. 'goods_id' => $goods->id,
  95. 'name' => $value['name'],
  96. 'skudetail'=> implode(',',array_column($value['info'],'name'))
  97. ];
  98. }
  99. if(!model('\app\admin\model\service\Goodsspu')->allowField(true)->saveAll($spu)){
  100. $result == false;
  101. }
  102. $skuList = json_decode($params['sku'],true);
  103. foreach ($skuList as $value) {
  104. $sku[] = [
  105. 'goods_id' => $goods->id,
  106. 'name' => $value['name'],
  107. 'cost_seconds' => $value['cost_seconds'],
  108. 'price' => $value['price'],
  109. 'type' => (isset($params['city']) || $params['is_travel'])?0:1,
  110. ];
  111. }
  112. if(!model('\app\admin\model\service\Goodssku')->allowField(true)->saveAll($sku)){
  113. $result == false;
  114. }
  115. }
  116. Db::commit();
  117. } catch (ValidateException|PDOException|Exception $e) {
  118. Db::rollback();
  119. $this->error($e->getMessage());
  120. }
  121. if ($result === false) {
  122. $this->error(__('No rows were inserted'));
  123. }
  124. $this->success();
  125. }
  126. public function edit($ids = null){
  127. $row = $this->model->get(['id' => $ids]);
  128. if (!$row) {
  129. $this->error(__('No Results were found'));
  130. }
  131. if (false === $this->request->isPost()) {
  132. $spu = \app\admin\model\service\Goodsspu::where(['goods_id'=>$row->id,'status'=>'normal'])->field('name,skudetail')->select();
  133. foreach ($spu as &$item){
  134. $info = explode(',',$item['skudetail']);
  135. $arr=[];
  136. foreach ($info as $val){
  137. $v['name'] = $val;
  138. array_push($arr,$v);
  139. }
  140. $item['info'] = $arr;
  141. }
  142. $row->city = $row->province.'/'.$row->city;
  143. $sku = \app\admin\model\service\Goodssku::where(['goods_id'=>$row->id,'status'=>'normal'])->field('name,price,cost_seconds')->select();
  144. $this->assignconfig('spu',$spu);
  145. $this->assignconfig('sku',$sku);
  146. $this->assignconfig('spec_type',$row['spec_type']);
  147. $this->assignconfig('choose_skill_type',$row['choose_skill_type']);
  148. $this->assignconfig('status',$row['status']);
  149. $this->view->assign("row", $row);
  150. return $this->view->fetch();
  151. }
  152. $params = $this->request->post('row/a');
  153. if (empty($params)) {
  154. $this->error(__('Parameter %s can not be empty', ''));
  155. }
  156. $params = $this->preExcludeFields($params);
  157. $result = false;
  158. if($params['city'])
  159. {
  160. $address = explode('/',$params['city']);
  161. $params['province'] = $address[0];
  162. $params['city'] = $address[1];
  163. //$params['district'] = isset($address[1])?:'';
  164. $cityList = \app\admin\model\service\Cityconfig::column('city');
  165. !in_array($params['city'],$cityList) && $this->error('当前城市未开通');
  166. }else{
  167. unset($params['city']);
  168. }
  169. Db::startTrans();
  170. try {
  171. $goods = new \app\admin\model\service\Goods ();
  172. $goods->allowField(true)->save($params,['id'=>$row->id]);
  173. $result = true;
  174. if($params['status'] == 'normal')
  175. {
  176. if($params['spec_type'] == 1)
  177. {
  178. \app\admin\model\service\Goodsspu::where(['goods_id'=>$row->id,'status'=>'normal'])->update(['status'=>'hidden']);
  179. \app\admin\model\service\Goodssku::where(['goods_id'=>$row->id,'status'=>'normal'])->update(['status'=>'hidden']);
  180. $spuList = json_decode($params['spu'],true);
  181. $spu = [];
  182. foreach ($spuList as $value) {
  183. $spu[] = [
  184. 'goods_id' => $row->id,
  185. 'name' => $value['name'],
  186. 'skudetail'=> implode(',',array_column($value['info'],'name'))
  187. ];
  188. }
  189. if(!model('\app\admin\model\service\Goodsspu')->allowField(true)->saveAll($spu)){
  190. $result == false;
  191. }
  192. $skuList = json_decode($params['sku'],true);
  193. $sku = [];
  194. foreach ($skuList as $value) {
  195. $sku[] = [
  196. 'goods_id' => $row->id,
  197. 'name' => $value['name'],
  198. 'cost_seconds' => $value['cost_seconds'],
  199. 'price' => $value['price'],
  200. 'type' => (isset($params['city']) || $params['is_travel'])?0:1,
  201. ];
  202. }
  203. if(!model('\app\admin\model\service\Goodssku')->allowField(true)->saveAll($sku)){
  204. $result == false;
  205. }
  206. }
  207. }
  208. Db::commit();
  209. } catch (ValidateException|PDOException|Exception $e) {
  210. Db::rollback();
  211. $this->error($e->getMessage());
  212. }
  213. if (false === $result) {
  214. $this->error(__('No rows were updated'));
  215. }
  216. $this->success();
  217. }
  218. public function updateGoodsStatus()
  219. {
  220. $id = input('id');
  221. $status = input('status');
  222. $goods = db('service_goods')->where('id',$id)->field('id,status')->find();
  223. $goods['status'] == $status && $this->error('商品状态错误');
  224. db('service_goods')->where('id',$id)->update(['status'=>$status]);
  225. $this->success('商品状态已更新');
  226. }
  227. public function select()
  228. {
  229. $params = (array)$this->request->request("custom/a");
  230. if (isset($params['pid'])) {
  231. $list = \app\admin\model\service\Category::where(['status'=>'normal','pid'=>$params['pid']])->field('id,name')->select();
  232. } else {
  233. $list = \app\admin\model\service\Category::where(['status'=>'normal','pid'=>0])->field('id,name')->select();
  234. }
  235. return json(['list' => $list, 'total' => count($list)]);
  236. }
  237. public function category()
  238. {
  239. $pid = $this->request->get('pid', '');
  240. $where = ['status' => 'normal'];
  241. $categorylist = null;
  242. if ($pid) {
  243. $where['pid'] = $pid;
  244. }else{
  245. $where['pid'] = 0;
  246. }
  247. $categorylist = Db::name('service_category')->where($where)->field('id as value,pid,name')->order('weigh desc,id desc')->select();
  248. $this->success('', '', $categorylist);
  249. }
  250. }