FreightForm.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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\LocalDeliveryFreight;
  9. use yii\base\Model;
  10. class FreightForm extends Model
  11. {
  12. public $store_id;
  13. public $id;
  14. public $name;
  15. public $detail;
  16. public $is_enable = 1;
  17. public $is_scan = 0;
  18. public $begin_time;
  19. public $end_time;
  20. public $level = 0;
  21. public $is_delete;
  22. public $day;
  23. public $price_type;
  24. public $order_price_type;
  25. public $is_have_page = 1;
  26. //搜索
  27. public $search_key;
  28. public $search_is_show;
  29. const SCENARIO_ADD = 'add';
  30. const SCENARIO_EDIT = 'edit';
  31. const SCENARIO_DEL = 'del';
  32. const SCENARIO_LIST = 'list';
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public function rules()
  37. {
  38. return [
  39. [['id'], 'required', 'on' => [self::SCENARIO_DEL, self::SCENARIO_EDIT]],
  40. [['name'], 'required', 'on' => [self::SCENARIO_ADD, self::SCENARIO_EDIT]],
  41. ['is_delete', 'default', 'value'=> LocalDeliveryFreight::IS_DELETE_NO],
  42. ['detail', 'default', 'value' => '[{"distance":"0","distance_price":"0","second":"0","second_price":"0"}]'],
  43. ['search_key', 'string', 'on' => self::SCENARIO_LIST],
  44. ['id', 'string', 'on' => self::SCENARIO_DEL],
  45. [['is_delete', 'is_enable', 'level', 'day', 'price_type', 'order_price_type', 'is_scan'], 'integer'],
  46. [['name', 'begin_time', 'end_time'], 'string', 'max' => 255],
  47. [['detail'], 'string'],
  48. [['store_id'], 'safe'],
  49. ];
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function attributeLabels()
  55. {
  56. return [
  57. 'id' => 'ID',
  58. 'is_enable' => '是否启用:0=否,1=是',
  59. 'level' => '规则优先级,值越大优先级越高',
  60. 'name' => '名称',
  61. 'detail' => '规则详细',
  62. 'begin_time' => '开始时间段',
  63. 'end_time' => '结束时间段',
  64. 'created_at' => '创建时间',
  65. 'updated_at' => '最后一次修改时间',
  66. 'is_delete' => '是否删除:0=否;1=是;',
  67. 'day' => '可预约天数'
  68. ];
  69. }
  70. public function scenarios()
  71. {
  72. $scenarios = parent::scenarios();
  73. return $scenarios;
  74. }
  75. /* ************************************************* */
  76. public function saveFreight($type = 0)
  77. {
  78. if ($this->validate()) {
  79. $t = \Yii::$app->db->beginTransaction();
  80. $level_query = LocalDeliveryFreight::find()->where(['type' => $type, 'level' => $this->level, 'is_delete' => 0]);
  81. if ($this->scenario == self::SCENARIO_EDIT) {
  82. $model = LocalDeliveryFreight::findOne(['id' => $this->id]);
  83. $level_query->andWhere(['<>','id', $this->id]);
  84. } else {
  85. $model = new LocalDeliveryFreight();
  86. }
  87. if($this->store_id > 0){
  88. $level_query->andWhere(['store_id' => $this->store_id]);
  89. } else {
  90. $level_query->andWhere(['store_id' => 0]);
  91. }
  92. $level_exist = $level_query->exists();
  93. if($level_exist) {
  94. return [
  95. 'code' => 1,
  96. 'msg' => '规则优先级已存在,不能重复'
  97. ];
  98. }
  99. $model->attributes = $this->attributes;
  100. $model->type = $type;
  101. if($type == LocalDeliveryFreight::TYPE_MAIYATIAN && $this->store_id > 0){
  102. $model->store_id = $this->store_id;
  103. }
  104. if (!$model->save()) {
  105. $t->rollBack();
  106. return [
  107. 'code' => 1,
  108. 'msg' => $model->getErrorSummary(false)[0]
  109. ];
  110. }
  111. $t->commit();
  112. return [
  113. 'code' => 0,
  114. 'msg' => '保存成功'
  115. ];
  116. } else {
  117. // 验证失败:$errors 是一个包含错误信息的数组
  118. return [
  119. 'code' => 1,
  120. "msg" => $this->getErrorSummary(false)[0]
  121. ];
  122. }
  123. }
  124. /* ************************************************* */
  125. public function searchFreight($type = 0)
  126. {
  127. $query = LocalDeliveryFreight::find();
  128. if ($this->is_have_page) {
  129. $query->where(['type' => $type, 'is_delete' => LocalDeliveryFreight::IS_DELETE_NO])->orderBy("id desc");
  130. $query->andWhere(['store_id' => $this->store_id ?: 0]);
  131. // 搜索
  132. if ($this->search_key) {
  133. $query->andWhere(['like', 'name', $this->search_key]);
  134. }
  135. $list = pagination_make($query);
  136. foreach ($list['list'] as &$val) {
  137. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  138. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  139. $val['price_type'] = (int)$val['price_type'];
  140. $val['order_price_type'] = (int)$val['order_price_type'];
  141. $val['is_scan'] = (int)$val['is_scan'];
  142. }
  143. $data = [
  144. 'data' => $list['list'],
  145. 'pageNo' => $list['pageNo'],
  146. 'totalCount' => $list['totalCount']
  147. ];
  148. } else {
  149. $query->where(['type' => $type, 'is_delete' => LocalDeliveryFreight::IS_DELETE_NO]);
  150. if($this->store_id > 0){
  151. $query->andWhere(['store_id' => $this->store_id]);
  152. }
  153. $data = $query->orderBy("id desc")->asArray()->all();
  154. foreach ($data['list'] as &$val) {
  155. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  156. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  157. }
  158. }
  159. return [
  160. 'code' => 0,
  161. 'msg' => 'success',
  162. 'data' => $data
  163. ];
  164. }
  165. public function delFreight()
  166. {
  167. if ($this->validate()) {
  168. $t = \Yii::$app->db->beginTransaction();
  169. if ($this->scenario !== self::SCENARIO_DEL) {
  170. return [
  171. 'code' => 1,
  172. 'msg' => '删除失败'
  173. ];
  174. }
  175. $model = LocalDeliveryFreight::findOne(['id' => $this->id]);
  176. $model->is_delete = LocalDeliveryFreight::IS_DELETE_YES;
  177. if (!$model || !$model->save()) {
  178. $t->rollBack();
  179. return [
  180. 'code' => 1,
  181. 'msg' => $model->getErrorSummary(false)[0]
  182. ];
  183. }
  184. $t->commit();
  185. return [
  186. 'code' => 0,
  187. 'msg' => '删除成功'
  188. ];
  189. // 所有输入数据都有效 all inputs are valid
  190. } else {
  191. // 验证失败:$errors 是一个包含错误信息的数组
  192. return [
  193. 'code' => 1,
  194. "msg" => $this->getErrorSummary(false)[0]
  195. ];
  196. }
  197. }
  198. public function applyFreight()
  199. {
  200. if ($this->validate()) {
  201. $t = \Yii::$app->db->beginTransaction();
  202. $model = LocalDeliveryFreight::findOne(['id' => $this->id]);
  203. $field = 'is_enable';
  204. if (isset($this->is_scan)) {
  205. $field = 'is_scan';
  206. }
  207. if ($model->$field == $this->$field) {
  208. return [
  209. 'code' => 1,
  210. 'msg' => '规则状态以改变,请勿重复提交'
  211. ];
  212. }
  213. if ($model->is_delete != 0) {
  214. return [
  215. 'code' => 1,
  216. 'msg' => '记录不存在,请刷新页面'
  217. ];
  218. }
  219. $model->$field = $this->$field;
  220. if (!$model || !$model->save()) {
  221. $t->rollBack();
  222. return [
  223. 'code' => 1,
  224. 'msg' => $model->getErrorSummary(false)[0]
  225. ];
  226. }
  227. $t->commit();
  228. return [
  229. 'code' => 0,
  230. 'msg' => $this->$field == 1 ? '启用成功' : '关闭成功'
  231. ];
  232. // 所有输入数据都有效 all inputs are valid
  233. } else {
  234. // 验证失败:$errors 是一个包含错误信息的数组
  235. return [
  236. 'code' => 1,
  237. "msg" => $this->getErrorSummary(false)[0]
  238. ];
  239. }
  240. }
  241. public static function getFreightList($type = 0)
  242. {
  243. return LocalDeliveryFreight::find()->where(['type' => $type, 'is_delete' => LocalDeliveryFreight::IS_DELETE_NO])->orderBy(['sort desc, id desc'])->select('*')->asArray()->all();
  244. }
  245. }