SmsNoticeService.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace addons\SmartForm\common\service;
  3. use addons\SmartForm\common\models\AddonsSmartFormTemplateUserForm;
  4. use addons\SmartForm\common\models\AddonsStartFormSmsNotice;
  5. use common\enums\StatusEnum;
  6. use common\models\common\Region;
  7. class SmsNoticeService
  8. {
  9. public static function findByUserIdAndGoodsIds(int $user_id, array $goods_ids, int $order_id)
  10. {
  11. // $user_form_ids = AddonsStartFormSmsNotice::find()->where(['status' => StatusEnum::ENABLED])
  12. // ->andWhere(['user_id' => $user_id])
  13. // ->andWhere(['goods_id' => $goods_ids])
  14. // ->andWhere(['order_id' => $order_id])
  15. // ->select('user_form_id')->column();
  16. //
  17. // if (empty($user_form_ids)) return null;
  18. $form = AddonsSmartFormTemplateUserForm::lists([
  19. 'where' => [
  20. ['user_id' => $user_id],
  21. ['order_id' => $order_id]
  22. // ['id' => $user_form_ids]
  23. ],
  24. 'select'=> 'id, smart_form_template_id, created_at',
  25. 'with' => ['form' => function($query) {
  26. $query->select('id, title');
  27. }, 'formInfo' => function($query) {
  28. $query->select('smart_form_template_user_form_id, smart_form_components_code,
  29. smart_form_components_title, col_value, smart_form_components_id')
  30. ->with(['column' => function($query1) {
  31. $query1->select('id, option');
  32. }]);
  33. }]
  34. ]);
  35. $ret = [];
  36. foreach ($form as &$item) {
  37. foreach ($item['formInfo'] as &$fItem) {
  38. $option = null;
  39. if (!empty($fItem['column']['option'])) {
  40. $option = explode("\n", $fItem['column']['option']);
  41. }
  42. switch ($fItem['smart_form_components_code']) {
  43. case 'drow-box':
  44. case 'radio-tool':
  45. $fItem['col_value'] = $option[$fItem['col_value']];
  46. break;
  47. case 'checked-tool':
  48. $vals = explode(",", $fItem['col_value']);
  49. $val1 = "";
  50. foreach ($vals as $val) {
  51. $val1 .= "{$option[$val]}, ";
  52. }
  53. $fItem['col_value'] = rtrim($val1, ", ");
  54. break;
  55. case 'city-chose':
  56. $regions = Region::find()->where(['id' => explode(",", $fItem['col_value'])])->select('name')->column();
  57. $fItem['col_value'] = implode(", ", $regions);
  58. break;
  59. case 'upload-photo':
  60. $fItem['col_value'] = explode(",", $fItem['col_value']);
  61. break;
  62. default:
  63. }
  64. unset($fItem['column'], $fItem['smart_form_components_id']);
  65. }
  66. $ret[] = [
  67. 'title' => $item['form']['title'],
  68. 'created_at'=> date('Y-m-d H:i:s', $item['created_at']),
  69. 'fields' => $item['formInfo']
  70. ];
  71. }
  72. return $ret;
  73. }
  74. /**
  75. * @param int $user_id
  76. * @param array $goods_ids
  77. * @param int $order_id
  78. * @param int $user_form_id
  79. * @return void
  80. */
  81. public static function bindOrderId(int $user_id, array $goods_ids, int $order_id, int $user_form_id)
  82. {
  83. $update = ['order_id' => $order_id];
  84. $where = ['and',
  85. ['send_status' => StatusEnum::DISABLED],
  86. ['user_id' => $user_id],
  87. ['user_form_id' => $user_form_id],
  88. ['order_id' => 0]];
  89. AddonsStartFormSmsNotice::updateAll($update, $where);
  90. }
  91. /**
  92. * @param int $user_id
  93. * @param array $goods_ids
  94. * @param int $status 0待发送,1可以发送,10发送中,20已过期,30已取消,50发送失败,100发送成功
  95. * @param int $order_id
  96. * @param int $user_form_id
  97. * @return void
  98. */
  99. public static function setStatus(int $user_id, array $goods_ids, int $status, int $order_id, int $user_form_id)
  100. {
  101. // 只能是 1或者30 - 支付设置为
  102. // 买了一次后,第二次购买不能再发送短信,因为表单只能填写一次
  103. switch ($status) {
  104. case 1:
  105. $update = ['send_status' => $status, 'order_id' => $order_id];
  106. $where = ['and',
  107. ['send_status' => $status == StatusEnum::ENABLED ? StatusEnum::DISABLED : StatusEnum::ENABLED],
  108. ['user_id' => $user_id], ['user_form_id' => $user_form_id]];
  109. break;
  110. default:
  111. $update = ['send_status' => $status];
  112. $where = ['and',
  113. ['send_status' => $status == StatusEnum::ENABLED ? StatusEnum::DISABLED : StatusEnum::ENABLED],
  114. ['user_id' => $user_id], ['user_form_id' => $user_form_id], ['order_id' => $order_id]];
  115. }
  116. AddonsStartFormSmsNotice::updateAll($update, $where);
  117. }
  118. }