CourierForm.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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 app\models\LocalDeliveryCourier;
  10. use app\models\Store;
  11. use yii\base\Model;
  12. use yii\helpers\Json;
  13. class CourierForm extends Model
  14. {
  15. public $id;
  16. public $saas_user_id;
  17. public $real_name;
  18. public $real_code;
  19. public $real_just_pic;
  20. public $real_back_pic;
  21. public $type = 1;
  22. public $money;
  23. public $total_money;
  24. public $work_time;
  25. public $area;
  26. public $state;
  27. public $status;
  28. public $is_auto;
  29. public $is_delete;
  30. public $store_id = 0;
  31. public $source;
  32. public $apply_time = 0;
  33. public $max_num = 0;
  34. public $mobile;
  35. public $is_have_page = 1;
  36. //搜索
  37. public $search_key;
  38. public $search_is_show;
  39. const SCENARIO_ADD = 'add';
  40. const SCENARIO_EDIT = 'edit';
  41. const SCENARIO_DEL = 'del';
  42. const SCENARIO_LIST = 'list';
  43. // const SCENARIO_APPLY = 'apply';
  44. /**
  45. * {@inheritdoc}
  46. */
  47. public function rules()
  48. {
  49. /* return [
  50. [['is_delete', 'is_have_page', 'parent_id'], 'integer'],
  51. [['name'], 'string', 'max' => 255],
  52. ['is_delete', 'default', 'value'=> LocalDeliveryCourier::IS_DELETE_NO],
  53. [['name'],'required', 'on'=> [self::SCENARIO_ADD, self::SCENARIO_EDIT]],
  54. [['id'],'required', 'on'=> [self::SCENARIO_DEL, self::SCENARIO_EDIT]],
  55. ['id', 'string', 'on' => self::SCENARIO_DEL],
  56. ['search_key', 'string', 'on' => self::SCENARIO_LIST],
  57. [['lng','lat','level','adcode','citycode'], 'string'],
  58. ]; */
  59. return [
  60. [['id'], 'required', 'on' => [self::SCENARIO_DEL, self::SCENARIO_EDIT]],
  61. [['saas_user_id', 'type', 'store_id', 'real_name', 'real_code', 'real_just_pic', 'real_back_pic'], 'required', 'on' => [self::SCENARIO_ADD, self::SCENARIO_EDIT]],
  62. ['is_delete', 'default', 'value' => LocalDeliveryCourier::IS_DELETE_NO],
  63. ['state', 'default', 'value' => LocalDeliveryCourier::IS_STATE_AWAITING],
  64. ['status', 'default', 'value' => LocalDeliveryCourier::IS_STATUS_NO],
  65. ['is_auto', 'default', 'value' => LocalDeliveryCourier::IS_AUTO_NO],
  66. ['source', 'default', 'value' => LocalDeliveryCourier::SOURCE_ADD],
  67. ['work_time', 'default', 'value' => '[{"begin_time":"00:00","end_time":"00:00"}]'],
  68. ['area', 'default', 'value' => '[{"province_id":0,"city_id":0,"district_id":0,"town_id":0,"village_id":0}]'],
  69. [['money', 'total_money'], 'default', 'value' => 0],
  70. ['search_key', 'string', 'on' => self::SCENARIO_LIST],
  71. ['id', 'string', 'on' => self::SCENARIO_DEL],
  72. [['saas_user_id', 'type', 'store_id', 'state', 'status', 'is_auto', 'is_delete', 'source', 'apply_time', 'max_num'], 'integer'],
  73. [['real_name', 'real_code', 'real_just_pic', 'real_back_pic', 'mobile'], 'string', 'max' => 255],
  74. [['work_time', 'area'], 'string'],
  75. [['money', 'total_money'], 'number'],
  76. ];
  77. }
  78. /**
  79. * {@inheritdoc}
  80. */
  81. public function attributeLabels()
  82. {
  83. return [
  84. 'id' => 'ID',
  85. 'saas_user_id' => 'saas_user表的id',
  86. 'type' => '配送员类型:1=平台配送员;2=店铺配送员;',
  87. 'store_id' => '店铺ID',
  88. 'state' => '审核状态:1待审核,2审核通过,3审核拒绝',
  89. 'status' => '在线状态:0=离线;1=在线;',
  90. 'is_auto' => '是否自动接单:0=否;1=是;',
  91. 'real_name' => '姓名',
  92. 'real_code' => '身份证号',
  93. 'real_just_pic' => '身份证照片正面',
  94. 'real_back_pic' => '身份证照片反面',
  95. 'work_time' => '工作时间段json',
  96. 'area' => '常驻区域json',
  97. 'money' => '可提现金额',
  98. 'total_money' => '总收入',
  99. 'created_at' => '创建时间',
  100. 'updated_at' => '最后一次修改时间',
  101. 'is_delete' => '是否删除:0=否;1=是;',
  102. 'source' => '用户来源:1=平台添加;2=用户申请;',
  103. 'apply_time' => '审核时间',
  104. 'max_num' => '同时最大接单数量,0=无限制',
  105. 'mobile' => '配送员电话'
  106. ];
  107. }
  108. public function scenarios()
  109. {
  110. $scenarios = parent::scenarios();
  111. return $scenarios;
  112. }
  113. /* ************************************************* */
  114. public function saveCourier()
  115. {
  116. if ($this->validate()) {
  117. $t = \Yii::$app->db->beginTransaction();
  118. if ($this->scenario == self::SCENARIO_EDIT) {
  119. $model = LocalDeliveryCourier::findOne(['id' => $this->id]);
  120. } else {
  121. $exist = LocalDeliveryCourier::find()->where(['is_delete' => 0, 'saas_user_id' => $this->saas_user_id])->exists();
  122. if($exist) {
  123. return [
  124. 'code' => 1,
  125. 'msg' => '该用户已提交申请,或已是配送员'
  126. ];
  127. }
  128. $model = new LocalDeliveryCourier();
  129. }
  130. $model->attributes = $this->attributes;
  131. if ($this->scenario != self::SCENARIO_EDIT) {
  132. $model->state = LocalDeliveryCourier::IS_STATE_YES;
  133. }
  134. if (!$model->save(true, ['saas_user_id', 'real_name', 'real_code', 'real_just_pic', 'real_back_pic', 'type', 'store_id', 'work_time', 'mobile', 'area', 'max_num', 'state'])) {
  135. $t->rollBack();
  136. return [
  137. 'code' => 1,
  138. 'msg' => $model->getErrorSummary(false)[0]
  139. ];
  140. }
  141. $t->commit();
  142. return [
  143. 'code' => 0,
  144. 'msg' => '保存成功'
  145. ];
  146. } else {
  147. // 验证失败:$errors 是一个包含错误信息的数组
  148. return [
  149. 'code' => 1,
  150. "msg" => $this->getErrorSummary(false)[0]
  151. ];
  152. }
  153. }
  154. /* ************************************************* */
  155. public function searchCourier()
  156. {
  157. $query = LocalDeliveryCourier::find();
  158. if ($this->is_have_page) {
  159. $query->where(['is_delete' => LocalDeliveryCourier::IS_DELETE_NO])->orderBy("id desc");
  160. // 搜索
  161. if ($this->search_key) {
  162. $query->andWhere(['like', 'real_name', $this->search_key]);
  163. }
  164. if ($this->state) {
  165. $query->andWhere(['state' => $this->state]);
  166. }
  167. if ($this->store_id > 0) {
  168. $query->andWhere(['store_id' => $this->store_id]);
  169. }
  170. $list = pagination_make($query);
  171. foreach ($list['list'] as &$val) {
  172. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  173. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  174. $val['apply_time'] = $val['apply_time'] ? date('Y-m-d H:i:s', $val['apply_time']) : "";
  175. $area = Json::decode($val['area'], true);
  176. $village = District::findOne($area[0]['village_id']);
  177. $town = District::findOne($area[0]['town_id']);
  178. $district = District::findOne($area[0]['district_id']);
  179. $city = District::findOne($area[0]['city_id']);
  180. $province = District::findOne($area[0]['province_id']);
  181. if ($village) {
  182. $val['parent_name'] = $province->name . '/' . $city->name . '/' . $district->name . '/' . $town->name . '/' . $village->name;
  183. } elseif ($town) {
  184. $val['parent_name'] = $province->name . '/' . $city->name . '/' . $district->name . '/' . $town->name;
  185. } elseif ($district) {
  186. $val['parent_name'] = $province->name . '/' . $city->name . '/' . $district->name;
  187. } else {
  188. $val['parent_name'] = '';
  189. }
  190. $val['store_name'] = $val['store_id'] > 0 ? Store::findOne($val['store_id'])->name : '';
  191. $saasUser = \app\models\SaasUser::findOne($val['saas_user_id']);
  192. $val['saas_user_info'] = $saasUser;
  193. }
  194. $data = [
  195. 'data' => $list['list'],
  196. 'pageNo' => $list['pageNo'],
  197. 'totalCount' => $list['totalCount']
  198. ];
  199. } else {
  200. $data = $query->where(['is_delete' => LocalDeliveryCourier::IS_DELETE_NO])->orderBy("id desc")->asArray()->all();
  201. foreach ($data['list'] as &$val) {
  202. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  203. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  204. $val['apply_time'] = $val['apply_time'] ? date('Y-m-d H:i:s', $val['apply_time']) : "";
  205. $area = Json::decode($val['area'], true);
  206. $village = District::findOne($area[0]['village_id']);
  207. $town = District::findOne($area[0]['town_id']);
  208. $district = District::findOne($area[0]['district_id']);
  209. $city = District::findOne($area[0]['city_id']);
  210. $province = District::findOne($area[0]['province_id']);
  211. if ($village) {
  212. $val['parent_name'] = $province->name . '/' . $city->name . '/' . $district->name . '/' . $town->name . '/' . $village->name;
  213. } elseif ($town) {
  214. $val['parent_name'] = $province->name . '/' . $city->name . '/' . $district->name . '/' . $town->name;
  215. } elseif ($district) {
  216. $val['parent_name'] = $province->name . '/' . $city->name . '/' . $district->name;
  217. } else {
  218. $val['parent_name'] = '';
  219. }
  220. $val['store_name'] = $val['store_id'] > 0 ? Store::findOne($val['store_id'])->name : '';
  221. }
  222. }
  223. return [
  224. 'code' => 0,
  225. 'msg' => 'success',
  226. 'data' => $data
  227. ];
  228. }
  229. public function delCourier()
  230. {
  231. if ($this->validate()) {
  232. $t = \Yii::$app->db->beginTransaction();
  233. if ($this->scenario !== self::SCENARIO_DEL) {
  234. return [
  235. 'code' => 1,
  236. 'msg' => '删除失败'
  237. ];
  238. }
  239. $model = LocalDeliveryCourier::findOne(['id' => $this->id]);
  240. $model->is_delete = LocalDeliveryCourier::IS_DELETE_YES;
  241. if (!$model || !$model->save()) {
  242. $t->rollBack();
  243. return [
  244. 'code' => 1,
  245. 'msg' => $model->getErrorSummary(false)[0]
  246. ];
  247. }
  248. $t->commit();
  249. return [
  250. 'code' => 0,
  251. 'msg' => '删除成功'
  252. ];
  253. // 所有输入数据都有效 all inputs are valid
  254. } else {
  255. // 验证失败:$errors 是一个包含错误信息的数组
  256. return [
  257. 'code' => 1,
  258. "msg" => $this->getErrorSummary(false)[0]
  259. ];
  260. }
  261. }
  262. public function applyCourier()
  263. {
  264. if ($this->validate()) {
  265. $t = \Yii::$app->db->beginTransaction();
  266. $model = LocalDeliveryCourier::findOne(['id' => $this->id]);
  267. if($model->state != 1) {
  268. return [
  269. 'code' => 1,
  270. 'msg' => '申请已审核,请勿重复提交'
  271. ];
  272. }
  273. if($model->is_delete != 0) {
  274. return [
  275. 'code' => 1,
  276. 'msg' => '记录不存在,请刷新页面'
  277. ];
  278. }
  279. $model->state = $this->state;
  280. $model->apply_time = time();
  281. if (!$model || !$model->save()) {
  282. $t->rollBack();
  283. return [
  284. 'code' => 1,
  285. 'msg' => $model->getErrorSummary(false)[0]
  286. ];
  287. }
  288. $t->commit();
  289. return [
  290. 'code' => 0,
  291. 'msg' => '审核成功'
  292. ];
  293. // 所有输入数据都有效 all inputs are valid
  294. } else {
  295. // 验证失败:$errors 是一个包含错误信息的数组
  296. return [
  297. 'code' => 1,
  298. "msg" => $this->getErrorSummary(false)[0]
  299. ];
  300. }
  301. }
  302. public static function getCourierList()
  303. {
  304. return LocalDeliveryCourier::find()->where(['is_delete' => LocalDeliveryCourier::IS_DELETE_NO])->orderBy(['sort desc, id desc'])->select('*')->asArray()->all();
  305. }
  306. }