CanteenController.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. class CanteenController extends Controller
  3. {
  4. public static string $table = 'canteen';
  5. public function actionInfo()
  6. {
  7. $id = Helper::getPostInt('id');
  8. if ($id <= 0) {
  9. Helper::error('参数错误');
  10. }
  11. $data = DB::getInfoById(self::$table, $id);
  12. if (!$data) {
  13. Helper::error('数据不存在');
  14. }
  15. if (!$this->checkSchoolId($data['school_id'])) {
  16. Helper::error('您没有权限操作此数据');
  17. }
  18. $data['stall_imgs'] = Helper::formatImgsFiled($data['stall_imgs']);
  19. $school = DB::getInfoById('school', $data['school_id'], 'name');
  20. $cri = DbCriteria::simpleCompare(['t.canteen_id' => $id])
  21. ->setSelect('c.name,c.id')
  22. ->setAlias('t')
  23. ->setJoin('left join wx_company c on c.id=t.company_id');
  24. $companyInfo = DB::getInfoWithCriteria('company_canteen_relation', $cri);
  25. $data['company_name'] = $companyInfo['name']?? '';
  26. $data['company_id'] = $companyInfo['id']?? '';
  27. $data['school_name'] = $school['name']?? '';
  28. Helper::ok($data);
  29. }
  30. public function actionList()
  31. {
  32. $filter = ['t.is_del' => 0];
  33. $schoolId = Helper::getPostString('school_id');
  34. if ($schoolId) {
  35. if (!$this->checkSchoolId($schoolId)) {
  36. $filter['t.school_id'] = -1;
  37. } else {
  38. $filter['t.school_id'] = $schoolId;
  39. }
  40. } else {
  41. $filter['t.school_id'] = $this->getSchoolFilter();
  42. }
  43. if ($name = Helper::getPostString('name')) {
  44. $filter['t.name'] = '%' . $name;
  45. }
  46. if ($last_user_id = Helper::getPostInt('last_user_id')) {
  47. $filter['t.last_user_id'] = $last_user_id;
  48. }
  49. if ($phone = Helper::getPostString('phone')) {
  50. $filter['t.phone'] = $phone;
  51. }
  52. if ($company_id = Helper::getPostInt('company_id')) {
  53. $rs = Helper::arrayColumn(
  54. DB::getListWithCriteria(
  55. 'company_canteen_relation',
  56. DbCriteria::simpleCompare(['company_id' => $company_id])
  57. ),
  58. 'canteen_id'
  59. );
  60. $filter['t.id'] = $rs ?: [-1];
  61. }
  62. $cri = DbCriteria::simpleCompareWithPage($filter)
  63. ->setAlias('t')
  64. ->setSelect('t.*, group_concat(sf.id) AS follow_ids')
  65. ->addJoin('LEFT JOIN wx_canteen_follow AS sf ON sf.canteen_id = t.id')
  66. ->setGroup('t.id')
  67. ->setOrder('t.id desc');
  68. if ($date = Helper::getPostDate('date')) {
  69. $cri->addBetweenCondition('create_date', $date, $date . ' 23:59:59');
  70. }
  71. $last_date = $_POST['last_date'];
  72. if (is_array($last_date) && count($last_date) == 2 && $last_date[0] < $last_date[1]) {
  73. $cri->addcondition("t.last_date > '{$last_date[0]}' and t.last_date < '{$last_date[1]}'");
  74. }
  75. $data = DB::getListWithCriteria(self::$table, $cri);
  76. if (!empty($data['records'])) {
  77. $users = Helper::arrayColumn(
  78. DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare([])->setSelect('id, username,avatar')),
  79. null,
  80. 'id'
  81. );
  82. $schools = Helper::arrayColumn(
  83. DB::getListWithCriteria('school', DbCriteria::simpleCompare(['id' => array_column($data['records'], 'school_id')])->setSelect('id, name')),
  84. 'name',
  85. 'id'
  86. );
  87. $cri = DbCriteria::simpleCompare([['t.canteen_id' => array_column($data['records'], 'id')]])
  88. ->setSelect('c.name,t.canteen_id')
  89. ->setAlias('t')
  90. ->setJoin('left join wx_company c on c.id=t.company_id');
  91. $relations = Helper::arrayColumn(
  92. DB::getListWithCriteria('company_canteen_relation', $cri),
  93. 'name',
  94. 'canteen_id'
  95. );
  96. $data['records'] = FollowSrv::formatWithFollowList($data['records'], 'wx_canteen_follow', $users);
  97. $data['records'] = array_map(function ($item) use ($users, $schools, $relations) {
  98. $item['last_user_name'] = $users[$item['last_user_id']]['username'] ?? '-';
  99. $item['school_name'] = $schools[$item['school_id']] ?? '-';
  100. $item['company_name'] = $relations[$item['id']] ?? '-';
  101. $item['stall_imgs'] = Helper::formatImgsFiled($item['stall_imgs']);
  102. return $item;
  103. }, $data['records']);
  104. }
  105. Helper::ok($data);
  106. }
  107. public function actionDelete()
  108. {
  109. $id = Helper::getPostInt('id');
  110. if ($id < 1) {
  111. Helper::error('参数错误');
  112. }
  113. $data = DB::getInfoById(self::$table, $id);
  114. if (!$data || !$this->checkSchoolId($data['school_id'])) {
  115. Helper::error('您没有权限操作此数据');
  116. }
  117. Db::updateById(self::$table, ['is_del' => 1], $id);
  118. Helper::ok();
  119. }
  120. public function actionAdd()
  121. {
  122. $this->_save();
  123. }
  124. public function actionEdit()
  125. {
  126. $id = Helper::getPostInt('id');
  127. if (!$id) {
  128. Helper::error('参数错误');
  129. }
  130. $data = DB::getInfoById(self::$table, $id);
  131. if (!$data || !$this->checkSchoolId($data['school_id'])) {
  132. Helper::error('您没有权限操作此数据');
  133. }
  134. $this->_save($id);
  135. }
  136. private function _save($id = 0)
  137. {
  138. $data = [
  139. 'school_id' => Helper::getPostInt('school_id'),
  140. 'name' => Helper::getPostString('name'),
  141. 'stall_num' => Helper::getPostInt('stall_num'),
  142. 'is_direct' => Helper::getPostInt('is_direct'),
  143. 'stall_imgs' => Helper::getArrParam($_POST, 'stall_imgs', Helper::PARAM_KEY_TYPE['array_string']),
  144. 'username' => Helper::getPostString('username'),
  145. 'phone' => Helper::getPostString('phone'),
  146. 'weixin' => Helper::getPostString('weixin'),
  147. 'memo' => Helper::getPostString('memo'),
  148. ];
  149. $company_id = Helper::getPostInt('company_id');
  150. $notNullField = ["school_id","name","stall_num","is_direct","username","phone","weixin"];
  151. $allowEmptyField = ["stall_num","is_direct",'weixin'];
  152. // 空字段检测
  153. if (!Helper::checkEmptyKey($data, $notNullField, $allowEmptyField)) {
  154. Helper::error('参数错误');
  155. }
  156. $name = $data['name'];
  157. // 检测名称重复
  158. $cri = DbCriteria::simpleCompare(['name' => $name])->setSelect('id');
  159. if ($id > 0) {
  160. $cri->addCondition('id!=' . $id);
  161. }
  162. if ($fid = DB::getScalerWithCriteria(self::$table, $cri)) {
  163. Helper::error('食堂名称已存在 ' . $fid);
  164. }
  165. $this->dobuleCheck();
  166. $data['stall_imgs'] = $data['stall_imgs'] ? implode(',', $data['stall_imgs']) : '';
  167. $trans = \Yii::app()->db->beginTransaction();
  168. try {
  169. if ($id) {
  170. DB::updateById(self::$table, $data, $id);
  171. } else {
  172. DB::addData(self::$table, $data);
  173. }
  174. Db::deleteByCondition('company_canteen_relation', ['canteen_id' => $id]);
  175. if ($company_id) {
  176. Db::addData('company_canteen_relation', ['canteen_id' => $id, 'company_id' => $company_id, 'school_id' => $data['school_id']]);
  177. }
  178. $trans->commit();
  179. } catch (\Exception $e) {
  180. $trans->rollback();
  181. Helper::error($e->getMessage());
  182. }
  183. $this->clearAuth();
  184. Helper::ok();
  185. }
  186. public function actionUpdateAttr()
  187. {
  188. $id = Helper::getPostInt('id');
  189. $attr = Helper::getPostString('attr');
  190. $value = Helper::getPostString('value');
  191. if ($id <= 0 || !$attr) {
  192. Helper::error('参数错误');
  193. }
  194. $data = DB::getInfoById(self::$table, $id);
  195. if (!$data || !$this->checkSchoolId($data['school_id'])) {
  196. Helper::error('您没有权限操作此数据');
  197. }
  198. if (!in_array($attr, ['is_direct', 'stall_num'])) {
  199. Helper::error('参数错误2');
  200. }
  201. if (DB::updateById(self::$table, [$attr => $value], $id) === false) {
  202. Helper::error('更新失败');
  203. }
  204. Helper::ok();
  205. }
  206. }