ReconciliationOrderController.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\controllers;
  8. use app\constants\OptionSetting;
  9. use app\models\CloudGoodsBind;
  10. use app\models\common\admin\order\CommonUpdateAddress;
  11. use app\models\Express;
  12. use app\models\Goods;
  13. use app\models\Order;
  14. use app\models\OrderComment;
  15. use app\models\OrderDetail;
  16. use app\models\OrderTransit;
  17. use app\models\SaaSLeaguePriceLog;
  18. use app\models\SaasUser;
  19. use app\models\Shop;
  20. use app\models\Store;
  21. use app\models\StoreCloud;
  22. use app\modules\admin\models\OrderClerkForm;
  23. use app\modules\admin\models\OrderMessageForm;
  24. use app\modules\admin\models\OrderPriceForm;
  25. use app\modules\admin\models\OrderSendForm;
  26. use app\utils\PrintOrder;
  27. use yii\helpers\Html;
  28. use app\models\User;
  29. use app\modules\admin\models\ExpressDetailForm;
  30. use app\modules\admin\models\OrderCommentForm;
  31. use app\modules\admin\models\ReconciliationOrderForm;
  32. use app\modules\admin\models\OrderRefundListForm;
  33. use app\modules\admin\models\OrderRevokeForm;
  34. use app\modules\admin\models\OrderRefundForm;
  35. use app\modules\admin\models\OrderShopForm;
  36. use app\models\OrderPayOffline;
  37. use app\utils\Notice\NoticeSend;
  38. use app\utils\PrintExpress;
  39. use app\models\VerifyCardSale;
  40. use app\models\Admin;
  41. use app\models\Notice;
  42. use app\models\Option;
  43. use app\models\PrintHistory;
  44. use app\utils\Notice\NoticeAction;
  45. use DateTime;
  46. use PHP_CodeSniffer\Reports\Json;
  47. use yii\helpers\Json as HelpersJson;
  48. use yii\helpers\VarDumper;
  49. class ReconciliationOrderController extends BaseController
  50. {
  51. /**
  52. * 平台商品订单列表
  53. * @return Response
  54. */
  55. public function actionList()
  56. {
  57. $store_id = get_store_id();
  58. $form = new ReconciliationOrderForm();
  59. $form->attributes = get_params();
  60. if (!empty(get_params('is_offline')) && get_params('is_offline') == Order::IS_OFFLINE_TRUE) {
  61. $form->is_offline = Order::IS_OFFLINE_TRUE;
  62. } else {
  63. $form->is_offline = Order::IS_OFFLINE_FALSE;
  64. }
  65. $form->store_id = $store_id;
  66. $form->supplier_id = get_params('supplier_id');
  67. $form->order_id = get_params('order_id');
  68. $form->type = get_params('type');
  69. $form->sort = get_params('sort');
  70. $form->sort_type = get_params('sort_type');
  71. $form->selected_rows = json_decode(get_params('selectedRows'));
  72. $form->selected_row_keys = json_decode(get_params('selectedRowKeys'));
  73. $form->filters_is_pay = json_decode(get_params('filters_is_pay'));
  74. $form->filters_order_types = json_decode(get_params('filters_order_types'));
  75. $form->admin = get_admin();
  76. return $this->asJson($form->search());
  77. }
  78. /**
  79. * 编辑排单或备注
  80. */
  81. public function actionEditSortAndRemark()
  82. {
  83. $id = (int) get_params('id');
  84. $value = get_params('value');
  85. $column = get_params('column');
  86. $form = Order::findOne($id);
  87. if (!$form) {
  88. return $this->asJson([
  89. 'code' => 1,
  90. 'msg' => '订单未找到',
  91. ]);
  92. }
  93. if ($column == 'pay_price' && $value == $form->pay_price || $column == 'sort' && $value == $form->sort || $column == 'shop_remark' && $value == $form->shop_remark) {
  94. return $this->asJson([
  95. 'code' => 0,
  96. 'msg' => '无操作',
  97. ]);
  98. }
  99. if (in_array($column, ['sort', 'shop_remark', 'pay_price']) && !empty($value)) {
  100. $form->{$column} = $value;
  101. } else {
  102. return $this->asJson([
  103. 'code' => 1,
  104. 'msg' => '无效的列名',
  105. ]);
  106. }
  107. if ($form->save()) {
  108. return $this->asJson([
  109. 'code' => 0,
  110. 'msg' => '操作成功',
  111. ]);
  112. } else {
  113. return $this->asJson([
  114. 'code' => 1,
  115. 'msg' => '操作失败',
  116. ]);
  117. }
  118. }
  119. /**
  120. * 打印订单
  121. * @return Response
  122. */
  123. public function actionPrintOrder()
  124. {
  125. $selected_rows = json_decode(post_params('selectedRowKeys'));
  126. if (!empty($selected_rows)) {
  127. $orders = Order::find()->where([
  128. 'is_delete' => 0, 'store_id' => get_store_id(), 'id' => array_values($selected_rows),
  129. ])->orderBy('sort ASC')->asArray()->all();
  130. $pay_prices = array_column($orders, 'pay_price');
  131. $totalPayPrice = number_format((float) array_sum($pay_prices), 2);
  132. return $this->asJson(['code' => 0, 'msg' => 'success', 'data' => ($orders), 'totalPayPrice' => $totalPayPrice]);
  133. } else {
  134. try {
  135. $order = post_params('order');
  136. $admin = get_admin();
  137. $countNum = count($order);
  138. $form = new PrintHistory();
  139. $form->store_id = get_store_id();
  140. $form->mch_id = get_mch_id();
  141. $form->data = json_encode(array_column($order, 'id'));
  142. $form->user_name = $admin->name;
  143. $form->num = $countNum;
  144. $form->created_at = time();
  145. if (!$form->save()) {
  146. error_log("Error saving: " . json_encode($form->errors));
  147. return $this->asJson(['code' => 1, 'msg' => '排单记录保存失败']);
  148. }
  149. } catch (\Exception $e) {
  150. error_log("Error saving: " . $e->getMessage());
  151. error_log($e->getTraceAsString());
  152. }
  153. }
  154. }
  155. /**
  156. * 发送短信通知
  157. * @param integer $store_id 店铺ID
  158. * @param string $mobile 手机号
  159. * @param string $user_name 用户名
  160. * @return array
  161. */
  162. public function actionSendNotice()
  163. {
  164. $mobile = get_params('mobile');
  165. $name = get_params('user_name');
  166. $store_id = get_store_id();
  167. $setting = Notice::findOne(['store_id' => $store_id]);
  168. if ($setting && $setting->payment_statement) {
  169. $tpl = HelpersJson::decode($setting->payment_statement);
  170. if ($tpl && $tpl['sms'] && $tpl['sms']['is_open']) {
  171. $res = NoticeAction::sendSms($mobile, $tpl['sms']['template_id'], $tpl['sms']['template_var'], $name, $store_id);
  172. if ($res['code'] == 0) {
  173. return $this->asJson(['code' => 0, 'msg' => '短信发送成功']);
  174. } else {
  175. return $this->asJson(['code' => 1, 'msg' => '短信发送失败']);
  176. }
  177. }
  178. } else {
  179. return $this->asJson([
  180. 'code' => 1,
  181. 'msg' => '请检查付款对账单短信相关配置'
  182. ]);
  183. }
  184. }
  185. /**
  186. * 确认支付操作
  187. * @return json
  188. */
  189. public function actionConfirmPayment()
  190. {
  191. $form = new ReconciliationOrderForm();
  192. $form->attributes = get_params();
  193. $form->confirm_payment = get_params('confirm_payment') ?? 0;
  194. if (!empty(get_params('change_admin_id'))) {
  195. $form->change_admin_id = get_params('change_admin_id');
  196. } else {
  197. $form->change_admin_id = get_admin();
  198. }
  199. return $this->asJson($form->confirmPayment());
  200. }
  201. /**
  202. * 查询所有的打印历史记录
  203. * @return array
  204. */
  205. public function actionPrintHistory()
  206. {
  207. $printHistories = PrintHistory::find()->orderBy(['id' => SORT_DESC])->all();
  208. $result = [];
  209. foreach ($printHistories as $printHistory) {
  210. $orderIds = json_decode($printHistory->data, true);
  211. $orders = Order::find()->where(['id' => $orderIds])->select(['name', 'sort', 'pay_price', 'order_no'])->orderBy(['sort' => SORT_ASC])->all();
  212. $orderData = [];
  213. foreach ($orders as $order) {
  214. $orderData[] = $order;
  215. }
  216. $result[] = [
  217. 'id' => $printHistory->id,
  218. 'store_id' => $printHistory->store_id,
  219. 'mch_id' => $printHistory->mch_id,
  220. 'data' => $printHistory->data,
  221. 'order_data' => $orderData,
  222. 'user_name' => $printHistory->user_name,
  223. 'num' => $printHistory->num,
  224. 'created_at' => date('Y-m-d H:i:s', $printHistory->created_at),
  225. ];
  226. }
  227. return $this->asJson(['code' => 0, 'data' => $result]);
  228. }
  229. }