You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
3.5 KiB

  1. <?php
  2. namespace backend\modules\shop\logic;
  3. use backend\modules\shop\models\ars\City;
  4. use backend\modules\shop\models\ars\ExpressArea;
  5. use backend\modules\shop\models\ars\Province;
  6. use backend\modules\shop\models\ars\ExpressTemplate;
  7. class ShopManager
  8. {
  9. //单位类型
  10. const UNIT_TYPE_WEIGHT = 1; //重量
  11. const UNIT_TYPE_MONEY = 2; //金额
  12. const UNIT_TYPE_ITEM = 3; //件
  13. /**
  14. * @param $type
  15. * @param $value
  16. * @return int
  17. * 比例转换
  18. */
  19. public static function proportionalConversion($type)
  20. {
  21. switch ($type) {
  22. case self::UNIT_TYPE_WEIGHT:
  23. return 1000; //后台显示为kg,数据库保存为g
  24. break;
  25. case self::UNIT_TYPE_MONEY:
  26. return 100; //后台显示为元,数据库保存为分
  27. break;
  28. case self::UNIT_TYPE_ITEM:
  29. return 1; //后台显示和数据库都为件
  30. break;
  31. default:
  32. return 1;
  33. }
  34. }
  35. /**
  36. * @param $expressAreaModel
  37. * @param $expressTemplateModel
  38. * 区域运费模板按比例转化数据
  39. */
  40. public static function expressAreaScaleDate($expressAreaModel, $expressTemplateModel)
  41. {
  42. $expressAreaModel->basic_price *= self::proportionalConversion(self::UNIT_TYPE_MONEY);
  43. $expressAreaModel->extra_price *= self::proportionalConversion(self::UNIT_TYPE_MONEY);
  44. if ($expressTemplateModel->calculation_type == ExpressTemplate::CALCULATION_TYPE_WEIGHT) {
  45. $expressAreaModel->basic_count *= self::proportionalConversion(self::UNIT_TYPE_WEIGHT);
  46. $expressAreaModel->extra_count *= self::proportionalConversion(self::UNIT_TYPE_WEIGHT);
  47. } else {
  48. $expressAreaModel->basic_count *= self::proportionalConversion(self::UNIT_TYPE_ITEM);
  49. $expressAreaModel->extra_count *= self::proportionalConversion(self::UNIT_TYPE_ITEM);
  50. }
  51. }
  52. /**
  53. * @param $expressAresModel
  54. * @return array
  55. * 除去已被选取的城市,筛选剩下的城市数据
  56. */
  57. public static function filterCity($expressAresModel)
  58. {
  59. $data = [];
  60. $query = ExpressArea::find()
  61. ->select(['city'])
  62. ->where(['express_template' => $expressAresModel->express_template]);
  63. if ($expressAresModel->id) { //修改操作时,除去自身的城市
  64. $query = $query->andWhere(['!=', 'id', $expressAresModel->id]);
  65. }
  66. $expressAreas = $query->all();
  67. //获取已选的城市id数组
  68. $expressAresCityIdArr = [];
  69. if ($expressAreas) {
  70. foreach ($expressAreas as $expressAreaCity) {
  71. $cityIdArr = explode(',', $expressAreaCity->city);
  72. $expressAresCityIdArr = array_unique(array_merge($cityIdArr, $expressAresCityIdArr));
  73. }
  74. }
  75. //筛选剩下的城市
  76. $provinces = Province::find()->cache(0)->all();
  77. $j = 0;
  78. foreach ($provinces as $k => $v) {
  79. $cities = City::find()
  80. ->where(['province_id' => $v->province_id])
  81. ->andWhere(['not in', 'city_id', $expressAresCityIdArr])
  82. ->all();
  83. if ($cities) {
  84. $data[$j]['province'] = $v->name;
  85. foreach ($cities as $city) {
  86. $data[$j]['city'][] = ['id' => $city->city_id, 'name' => $city->name];
  87. }
  88. $j++;
  89. }
  90. }
  91. return $data;
  92. }
  93. }