CountrysideForm.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\models\District;
  9. use yii\base\Model;
  10. class CountrysideForm extends Model
  11. {
  12. public $id;
  13. public $name;
  14. public $level;
  15. public $parent_id;
  16. public $lng;
  17. public $lat;
  18. public $is_delete;
  19. public $is_have_page = 1;
  20. public $adcode;
  21. public $citycode;
  22. //搜索
  23. public $search_key;
  24. public $search_is_show;
  25. const SCENARIO_ADD = 'add';
  26. const SCENARIO_EDIT = 'edit';
  27. const SCENARIO_DEL = 'del';
  28. const SCENARIO_LIST = 'list';
  29. /**
  30. * {@inheritdoc}
  31. */
  32. public function rules()
  33. {
  34. return [
  35. [['is_delete', 'is_have_page', 'parent_id'], 'integer'],
  36. [['name'], 'string', 'max' => 255],
  37. ['is_delete', 'default', 'value'=> District::IS_DELETE_NO],
  38. [['name'],'required', 'on'=> [self::SCENARIO_ADD, self::SCENARIO_EDIT]],
  39. [['id'],'required', 'on'=> [self::SCENARIO_DEL, self::SCENARIO_EDIT]],
  40. ['id', 'string', 'on' => self::SCENARIO_DEL],
  41. ['search_key', 'string', 'on' => self::SCENARIO_LIST],
  42. [['id', 'lng','lat','level','adcode','citycode'], 'safe'],
  43. ];
  44. }
  45. /**
  46. * {@inheritdoc}
  47. */
  48. public function attributeLabels()
  49. {
  50. return [
  51. 'id' => 'ID',
  52. 'parent_id' => 'Parent ID',
  53. 'citycode' => 'Citycode',
  54. 'adcode' => 'Adcode',
  55. 'name' => 'Name',
  56. 'lng' => '经度',
  57. 'lat' => '纬度',
  58. 'level' => 'Level',
  59. 'is_delete' => 'IS DELETE'
  60. ];
  61. }
  62. public function scenarios()
  63. {
  64. $scenarios = parent::scenarios();
  65. return $scenarios;
  66. }
  67. /* ************************************************* */
  68. public function saveCountryside()
  69. {
  70. if (!$this->validate()) {
  71. return [
  72. 'code' => 1,
  73. 'msg' => array_shift($this->getFirstErrors()),
  74. ];
  75. }
  76. if ($this->id) {
  77. $model = District::findOne($this->id);
  78. } else {
  79. $model = new District();
  80. }
  81. $parent = District::findOne($this->parent_id);
  82. if(!$parent){
  83. return [
  84. 'code' => 1,
  85. 'msg' => '参数错误'
  86. ];
  87. }
  88. if($parent->level == 'province'){
  89. $model->level = 'city';
  90. }
  91. if($parent->level == 'city'){
  92. $model->level = 'district';
  93. }
  94. if($parent->level == 'district'){
  95. $model->level = 'town';
  96. }
  97. if($parent->level == 'town'){
  98. $model->level = 'village';
  99. }
  100. $model->parent_id = $this->parent_id;
  101. $model->citycode = $parent->citycode;
  102. $model->adcode = $parent->adcode;
  103. $model->name = $this->name;
  104. $model->lng = $this->lng ?? '';
  105. $model->lat = $this->lat ?? '';
  106. if (!$model->save()) {
  107. return [
  108. 'code' => 1,
  109. 'msg' => array_shift($model->getFirstErrors()),
  110. ];
  111. }
  112. return [
  113. 'code' => 0,
  114. 'msg' => '保存成功',
  115. 'data' => $model,
  116. ];
  117. }
  118. /* ************************************************* */
  119. public function searchDistrict()
  120. {
  121. $data = District::getAll2(1);
  122. return [
  123. 'code' => 0,
  124. 'msg' => 'success',
  125. 'data' => $data
  126. ];
  127. $query = District::find();
  128. if ($this->is_have_page) {
  129. $query->where(['is_delete' => District::IS_DELETE_NO])->andWhere(['or',['level' => 'village'],['level' => 'town']])->orderBy("id desc");
  130. // 搜索
  131. if ($this->search_key) {
  132. $query->andWhere(['like', 'name', $this->search_key]);
  133. }
  134. $list = pagination_make($query);
  135. foreach ($list['list'] as &$val) {
  136. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  137. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  138. if($val['level'] == 'town') {
  139. $town_id = $val['id'];
  140. $val['level_name'] = '乡镇';
  141. } elseif($val['level'] == 'village') {
  142. $town_id = $val['parent_id'];
  143. $val['level_name'] = '村庄';
  144. }
  145. $town = District::findOne($town_id);
  146. $district = District::findOne($town->parent_id);
  147. $city = District::findOne($district->parent_id);
  148. $province = District::findOne($city->parent_id);
  149. $val['area'] = [
  150. 'province_id' => $province->id,
  151. 'city_id' => $city->id,
  152. 'district_id'=> $district->id,
  153. 'town_id'=> $town_id,
  154. ];
  155. $val['parent_name'] = $province->name.'/'.$city->name.'/'.$district->name.'/'.$town->name;
  156. }
  157. $data = [
  158. 'data' => $list['list'],
  159. 'pageNo' => $list['pageNo'],
  160. 'totalCount' => $list['totalCount']
  161. ];
  162. } else {
  163. $data = $query->where(['is_delete' => District::IS_DELETE_NO])->andWhere(['or',['level' => 'village'],['level' => 'town']])->orderBy("id desc")->asArray()->all();
  164. foreach ($data as &$val) {
  165. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  166. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  167. if($val['level'] == 'town') {
  168. $town_id = $val['id'];
  169. $val['level_name'] = '乡镇';
  170. } elseif($val['level'] == 'village') {
  171. $town_id = $val['parent_id'];
  172. $val['level_name'] = '村庄';
  173. }
  174. $town = District::findOne($town_id);
  175. $district = District::findOne($town->parent_id);
  176. $city = District::findOne($district->parent_id);
  177. $province = District::findOne($city->parent_id);
  178. $val['area'] = [
  179. 'province_id' => $province->id,
  180. 'city_id' => $city->id,
  181. 'district_id'=> $district->id,
  182. 'town_id'=> $town_id,
  183. ];
  184. $val['parent_name'] = $province->name.'/'.$city->name.'/'.$district->name.'/'.$town->name;
  185. }
  186. }
  187. return [
  188. 'code' => 0,
  189. 'msg' => 'success',
  190. 'data' => $data
  191. ];
  192. }
  193. public function delCountryside()
  194. {
  195. if ($this->validate()) {
  196. $t = \Yii::$app->db->beginTransaction();
  197. if ($this->scenario !== self::SCENARIO_DEL) {
  198. return [
  199. 'code' => 1,
  200. 'msg' => '删除失败'
  201. ];
  202. }
  203. $model = District::findOne(['id' => $this->id]);
  204. $son = District::findOne(['parent_id' => $this->id, 'is_delete' => 0]);
  205. if($son){
  206. return [
  207. 'code' => 1,
  208. 'msg' => "乡镇有下级村庄未删除,请先删除村庄后再删除乡镇"
  209. ];
  210. }
  211. $model->is_delete = District::IS_DELETE_YES;
  212. if (!$model || !$model->save()) {
  213. $t->rollBack();
  214. return [
  215. 'code' => 1,
  216. 'msg' => $model->getErrorSummary(false)[0]
  217. ];
  218. }
  219. $t->commit();
  220. return [
  221. 'code' => 0,
  222. 'msg' => '删除成功'
  223. ];
  224. // 所有输入数据都有效 all inputs are valid
  225. } else {
  226. // 验证失败:$errors 是一个包含错误信息的数组
  227. return [
  228. 'code' => 1,
  229. "msg" => $this->getErrorSummary(false)[0]
  230. ];
  231. }
  232. }
  233. public static function getDistrictList(){
  234. return District::find()->where(['is_delete' => District::IS_DELETE_NO])->orderBy(['sort desc, id desc'])->select('*')->asArray()->all();
  235. }
  236. }