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.
 
 
 
 
 
 

347 rivejä
15 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 501810442
  5. * Date: 2017/8/9
  6. * Time: 13:16
  7. */
  8. namespace backend\modules\api\controllers;
  9. use backend\modules\api\logic\BaseBalance;
  10. use backend\modules\zzcs\logic\BaseSupplierBalance;
  11. use backend\modules\zzcs\models\BaseSupplier;
  12. use backend\modules\zzcs\models\BaseSupplierPurchase;
  13. use backend\modules\zzcs\models\BaseUser;
  14. use backend\modules\zzcs\models\ChannelBalanceHis;
  15. use backend\modules\zzcs\models\OperaBalanceHis;
  16. use backend\modules\zzcs\models\OrderMain;
  17. use backend\modules\zzcs\models\TailorCustomerReplyMessage;
  18. use yii\db\Exception;
  19. use yii\web\Controller;
  20. use Yii;
  21. use common\models\Msg;
  22. class BalanceController extends Controller
  23. {
  24. public $enableCsrfValidation = false;
  25. /**
  26. * Function Description:插入供应余额记录
  27. * Function Name: actionAddBalanceHis
  28. *
  29. * @return string
  30. *
  31. * @author LUOCJ
  32. */
  33. public function actionAddBalanceHis()
  34. {
  35. $request = Yii::$app -> request -> post();
  36. $order_id = Yii::$app->request->post('order_id', '');
  37. $pay_type = Yii::$app->request->post('pay_type', '');
  38. $memo = Yii::$app->request->post('memo', '');
  39. $price = empty($request['price']) ? 0 : $request['price'];
  40. $model = new BaseBalance($order_id, $pay_type, $memo);
  41. $data = $model->insertBalanceMain($price);
  42. $model->addLog($data);
  43. return json_encode($data);
  44. }
  45. /**
  46. * @Author wanglg
  47. * @Desc 下单渠道商操作新增预支付记录
  48. * @return string
  49. */
  50. public function actionAddChannelBalanceHis()
  51. {
  52. $request = Yii::$app -> request -> post();
  53. $order_id = Yii::$app->request->post('order_id', '');
  54. $pay_type = Yii::$app->request->post('pay_type', '');
  55. $memo = Yii::$app->request->post('memo', '');
  56. $price = empty($request['price']) ? 0 : $request['price'];
  57. $model = new BaseBalance($order_id, $pay_type, $memo);
  58. $data = $model->insertChannelBalanceMain($price);
  59. $model->createChannelLog($data);
  60. return json_encode($data);
  61. }
  62. /**
  63. * Function Description:取消订单时,插入记录和供应商余额
  64. * Function Name: actionUpdateBalanceHis
  65. *
  66. * @author LUOCJ
  67. */
  68. public function actionCancelBalanceHis()
  69. {
  70. $order_id = Yii::$app->request->post('order_id', '');
  71. $pay_type = Yii::$app->request->post('pay_type', '');
  72. $memo = Yii::$app->request->post('memo', '');
  73. $model = new BaseBalance($order_id, $pay_type, $memo);
  74. $data = $model->cancelBalanceMain();
  75. $model->addLog($data);
  76. return json_encode($data);
  77. }
  78. /**
  79. * @Author wanglg
  80. * @Desc 取消订单渠道商预支付变更记录流程
  81. * @return string
  82. */
  83. public function actionCancelChannelBalanceHis()
  84. {
  85. $order_id = Yii::$app->request->post('order_id', '');
  86. $pay_type = Yii::$app->request->post('pay_type', '');
  87. $memo = Yii::$app->request->post('memo', '');
  88. $model = new BaseBalance($order_id, $pay_type, $memo);
  89. $data = $model->cancelChannelBalanceMain();
  90. $model->createChannelLog($data);
  91. return json_encode($data);
  92. }
  93. /**
  94. * Function Description:定时任务更新已付状态
  95. * Function Name: actionTimingUpdateBalanceHis
  96. *
  97. * @return array
  98. *
  99. * @author LUOCJ
  100. */
  101. public function actionTimingUpdateBalanceHis()
  102. {
  103. $user_id = 1;
  104. $data = BaseBalance::timingUpdateBalanceMain($user_id);
  105. if (!file_exists(__DIR__ . '/../log/balance')) {
  106. mkdir(__DIR__ . '/../log/balance');
  107. }
  108. file_put_contents(__DIR__ . '/../log/balance/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '刷新订单数据:' . json_encode($data) . PHP_EOL, FILE_APPEND);
  109. }
  110. public function actionHisToHis()
  111. {
  112. //1302 世纪皇冠 1301浦西洲际
  113. $expect_array = [1302,1392,1336,672,1085,1027,1473,1070,1231,1301,1376,1296,1046,1042,1481,1479,1475,1351,1025,1242,1487,1018,1349,1225,1486,1511,1480,
  114. 1447,1501,1493,1468]; //已经处理的供应商 数组 处理完后放入其中
  115. $now_supplier_id = 1259; //需要处理的供应商id
  116. $now_balance =-5270; //供应商截止至$now_date 的余额
  117. $now_date = '2017-08-31'; //截止日期
  118. set_time_limit(0);
  119. ini_set('memory_limit', '-1');
  120. #1 清空所有his数据
  121. OperaBalanceHis::deleteAll(['and', ['not in', 'supplier_id', $expect_array]]);
  122. #2 所有base_supplier 的数据置0.00;
  123. BaseSupplier::updateAll(['ACCOUNT_BALANCE' => 0.00], ['and', ['not in', 'ID', $expect_array]]);
  124. #3 特殊处理
  125. BaseSupplier::updateAll(['ACCOUNT_BALANCE' => $now_balance], ['ID' => $now_supplier_id]);
  126. //1302 世纪皇冠
  127. $count = OrderMain::find()->where(['and', ['=', 'PROD_TOP_ORG_ID', $now_supplier_id], ['>', 'PROD_END_STATION_DATE', $now_date], ['=', 'ORDER_PROD_TYPE', 25], ['=', 'CANCEL_FLAG', 0], ['in', 'ORDER_STATUS', [564, 382, 314, 198, 313, 383, 147]]])->count();
  128. for ($i = 0; $i < ceil($count / 1000); $i++) {
  129. $begin = $i * 1000;
  130. $order_models = OrderMain::find()->where(['and', ['=', 'PROD_TOP_ORG_ID', $now_supplier_id], ['>', 'PROD_END_STATION_DATE', $now_date], ['=', 'ORDER_PROD_TYPE', 25], ['=', 'CANCEL_FLAG', 0], ['in', 'ORDER_STATUS', [564, 382, 314, 198, 313, 383, 147]]])->limit(1000)->offset($begin)->all();
  131. foreach ($order_models as $order_model) {
  132. $model = new BaseBalance($order_model->ORDER_ID, 1, '历史订单');
  133. $data = $model->insertBalanceMainBatch();
  134. $model->addLog($data);
  135. }
  136. }
  137. return 123;
  138. }
  139. /**
  140. * Function Description:定时获取顾客上行短信
  141. * Function Name: actionTimingUpdateBalanceHis
  142. *
  143. * @return array
  144. *
  145. * @author LUOCJ
  146. */
  147. public function actionTimingGetMessage()
  148. {
  149. $data = BaseBalance::getMessage();
  150. if (!file_exists(__DIR__ . '/../log/tailor')) {
  151. mkdir(__DIR__ . '/../log/tailor');
  152. }
  153. file_put_contents(__DIR__ . '/../log/tailor/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '定时获取顾客上行短信:' . json_encode($data) . PHP_EOL, FILE_APPEND);
  154. }
  155. /**
  156. * Function Description:定时发送信息给 需要上门接的线路 并且尚未获取到地址的乘客
  157. * Function Name: actionTimingSendNoAddressMessage
  158. *
  159. *
  160. * @author LUOCJ
  161. */
  162. public function actionTimingSendNoAddressMessage()
  163. {
  164. $data = BaseBalance::sendNoAddressMessage();
  165. if (!file_exists(__DIR__ . '/../log/tailor')) {
  166. mkdir(__DIR__ . '/../log/tailor');
  167. }
  168. file_put_contents(__DIR__ . '/../log/tailor/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '定时发送信息给 需要上门接的线路 并且尚未获取到地址的乘客:' . json_encode($data) . PHP_EOL, FILE_APPEND);
  169. }
  170. /**
  171. * @Author wanglg
  172. * @Desc 通过定时任务执行该接口轮询修改渠道已付订单的订单状态
  173. */
  174. public function actionTimingUpdateChannelBalanceHis()
  175. {
  176. $user_id = 1;
  177. $data = BaseBalance::timingUpdateChannelBalanceMain($user_id);
  178. if (!file_exists(__DIR__ . '/../log/channel')) {
  179. mkdir(__DIR__ . '/../log/channel');
  180. }
  181. file_put_contents(__DIR__ . '/../log/channel/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '刷新订单数据:' . json_encode($data) . PHP_EOL, FILE_APPEND);
  182. }
  183. /**
  184. * @Author wanglg
  185. * @Desc渠道商余额小于预警金额时给渠道商采购人发送预警短信(定时任务,暂时无需求)
  186. */
  187. public function actionSendChannelMessage()
  188. {
  189. $content = "渠道商{渠道商}的预付款余额已经低于警戒值,当前为 {余额}元。请及时确认。";
  190. $models = BaseSupplier::find()->where(['and', ['=', 'CANCEL_FLAG', 0], ['=', 'SUPPLIER_TYPE', 301], ['<', 'ACCOUNT_BALANCE', 'ALERT_BALANCE']])->all();
  191. foreach ($models as $k => $model) {
  192. $phones = [];
  193. $bsp_models = BaseSupplierPurchase::findAll(['SUPPLIER_ID' => $model->ID, 'CANCEL_FLAG' => 0, 'PRODUCT_TYPE' => 25]);
  194. foreach ($bsp_models as $bsp_model) {
  195. $user_model = BaseUser::findOne(['ID' => $bsp_model->PURCHASER_NAME]);
  196. $phones[] = $user_model->PHONE_no;
  197. }
  198. if (count($phones) > 0) {
  199. $phones_str = implode(',', $phones);
  200. } else {
  201. continue;
  202. }
  203. if (strlen($phones_str) < 10) {
  204. continue;
  205. }
  206. $tp_content = $content;
  207. $tp_content = str_replace(['{供应商}', '{余额}'], [$model->SUPPLIER_NAME, $model->ACCOUNT_BALANCE], $tp_content);
  208. $res = Msg::sendTelMsg($phones_str, $tp_content);
  209. if ($res !== 0) {
  210. if (!file_exists(__DIR__ . '/../log/balance')) {
  211. mkdir(__DIR__ . '/../log/balance');
  212. }
  213. file_put_contents(__DIR__ . '/../log/balance/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '渠道商警戒值 短信发送失败 ' . $model->SUPPLIER_NAME . ' ' . $model->ACCOUNT_BALANCE . PHP_EOL, FILE_APPEND);
  214. }
  215. }
  216. }
  217. /**
  218. * @Author wanglg
  219. * @Desc 手动增加渠道商扣款记录,刷单使用,一般情况不会用到,逻辑也不用看
  220. * supplier_id 渠道商id
  221. */
  222. public function actionDealWithOrder()
  223. {
  224. // 南京万达 1529
  225. $order_main = new OrderMain();
  226. $order_list = $order_main -> getBetweenOrder();
  227. $transaction = Yii::$app -> db -> beginTransaction();
  228. try
  229. {
  230. /****************有充值记录首先添加充值记录begin**********************/
  231. $channel = new ChannelBalanceHis();
  232. // 有充值记录
  233. $recharge_arr = array('supplier_id' => 1529, 'create_time' => '2017-09-01 00:00:00', 'update_time' => '2017-09-01 00:00:00',
  234. 'create_user_id' => 1, 'update_user_id' => 1, 'order_id' => 0, 'pay_type' => 2,
  235. 'expect_time' => '2017-09-01 00:00:00', 'change_value' => 10000, 'balance_before' => 0,
  236. 'balance_after' => 10000, 'pay_time' => '2017-09-01 00:00:00', 'pay_status' => 2, 'pay_reason' => '');
  237. // 新增扣款记录
  238. if($channel -> load($recharge_arr,'') && $channel -> validate())
  239. {
  240. if(!$channel -> save())
  241. {
  242. throw new \Exception('新建扣款记录失败');
  243. }
  244. }
  245. // 充值成功 修改渠道商余额
  246. $supplier = BaseSupplierBalance::findOne(1529);
  247. $supplier -> ACCOUNT_BALANCE = $supplier['ACCOUNT_BALANCE'] + 10000 ;
  248. if(!$supplier -> update())
  249. {
  250. throw new \Exception('新建扣款记录失败');
  251. }
  252. /****************有充值记录首先添加充值记录end**********************/
  253. foreach($order_list as $key => $value)
  254. {
  255. $supplier_info = BaseSupplierBalance::findOne(1529);
  256. $channel1 = new ChannelBalanceHis();
  257. $channel2 = new ChannelBalanceHis();
  258. if($value['ORDER_STATUS'] == 148)
  259. {
  260. // 处理无效订单
  261. $make_order_arr = array('supplier_id' => $value['OUTSIDE_SALE_ORG_ID'], 'create_time' => $value['CREATE_TIME'], 'update_time' => $value['UPDATE_TIME'],
  262. 'create_user_id' => 1, 'update_user_id' => 1, 'order_id' => $value['ORDER_ID'], 'pay_type' => 1,
  263. 'expect_time' => $value['CREATE_TIME'], 'change_value' => $value['ORDER_PRICE'], 'balance_before' => $supplier_info['ACCOUNT_BALANCE'],
  264. 'balance_after' => $supplier_info['ACCOUNT_BALANCE'] - $value['ORDER_PRICE'], 'pay_time' => $value['CREATE_TIME'], 'pay_status' => 2, 'pay_reason' => '下单扣款');
  265. // 新增扣款记录
  266. if($channel1 -> load($make_order_arr,'') && $channel1 -> validate())
  267. {
  268. if(!$channel1 -> save())
  269. {
  270. throw new \Exception('新建扣款记录失败');
  271. }
  272. }
  273. // 扣款回退
  274. $back_order_arr = array('supplier_id' => $value['OUTSIDE_SALE_ORG_ID'], 'create_time' => $value['UPDATE_TIME'], 'update_time' => $value['UPDATE_TIME'],
  275. 'create_user_id' => 1, 'update_user_id' => 1, 'order_id' => $value['ORDER_ID'], 'pay_type' => 2,
  276. 'expect_time' => $value['UPDATE_TIME'], 'change_value' => $value['ORDER_PRICE'], 'balance_before' => $supplier_info['ACCOUNT_BALANCE'] - $value['ORDER_PRICE'],
  277. 'balance_after' => $supplier_info['ACCOUNT_BALANCE'], 'pay_time' => $value['UPDATE_TIME'], 'pay_status' => 2, 'pay_reason' => '扣款回退');
  278. if($channel2 -> load($back_order_arr,'') && $channel2 -> validate())
  279. {
  280. if(!$channel2 -> save())
  281. {
  282. throw new \Exception('新建回退记录失败');
  283. }
  284. }
  285. }else
  286. {
  287. // 处理有效订单
  288. $make_order_arr = array('supplier_id' => $value['OUTSIDE_SALE_ORG_ID'], 'create_time' => $value['CREATE_TIME'], 'update_time' => $value['UPDATE_TIME'],
  289. 'create_user_id' => 1, 'update_user_id' => 1, 'order_id' => $value['ORDER_ID'], 'pay_type' => 1,
  290. 'expect_time' => $value['CREATE_TIME'], 'change_value' => $value['ORDER_PRICE'], 'balance_before' => $supplier_info['ACCOUNT_BALANCE'],
  291. 'balance_after' => $supplier_info['ACCOUNT_BALANCE'] - $value['ORDER_PRICE'], 'pay_time' => $value['CREATE_TIME'], 'pay_status' => 2, 'pay_reason' => '下单扣款');
  292. // 新增扣款记录
  293. if($channel1 -> load($make_order_arr,'') && $channel1 -> validate())
  294. {
  295. if(!$channel1 -> save())
  296. {
  297. throw new \Exception('新建扣款记录失败');
  298. }
  299. }
  300. // 修改渠道商余额
  301. $supplier_info -> ACCOUNT_BALANCE = $supplier_info['ACCOUNT_BALANCE'] - $value['ORDER_PRICE'];
  302. if(!$supplier_info -> update())
  303. {
  304. throw new \Exception('新建扣款记录失败');
  305. }
  306. }
  307. }
  308. $transaction -> commit();
  309. }catch (\Exception $e)
  310. {
  311. $transaction -> rollBack();
  312. }
  313. return $this -> redirect(['/hotel/hotel/index']);
  314. }
  315. }