ShopOrdersLogic.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeadmin快速开发前后端分离管理后台(PHP版)
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
  8. // | github下载:https://github.com/likeshop-github/likeadmin
  9. // | 访问官网:https://www.likeadmin.cn
  10. // | likeadmin团队 版权所有 拥有最终解释权
  11. // +----------------------------------------------------------------------
  12. // | author: likeadminTeam
  13. // +----------------------------------------------------------------------
  14. namespace app\adminapi\logic\shops;
  15. use app\common\model\shops\ShopOrderLogistic;
  16. use app\common\model\shops\ShopOrders;
  17. use app\common\logic\BaseLogic;
  18. use app\workerapi\logic\shops\ShopOrderLogic;
  19. use think\db\Query;
  20. use think\facade\Db;
  21. /**
  22. * ShopOrders逻辑
  23. * Class ShopOrdersLogic
  24. * @package app\adminapi\logic\shops
  25. */
  26. class ShopOrdersLogic extends BaseLogic
  27. {
  28. /**
  29. * @notes 添加
  30. * @param array $params
  31. * @return bool
  32. * @author likeadmin
  33. * @date 2024/08/04 13:49
  34. */
  35. public static function add(array $params): bool
  36. {
  37. Db::startTrans();
  38. try {
  39. ShopOrders::create([
  40. 'shop_order_type' => $params['shop_order_type'],
  41. 'worker_id' => $params['worker_id'],
  42. 'sn' => $params['sn'],
  43. 'real_name' => $params['real_name'],
  44. 'mobile' => $params['mobile'],
  45. 'address' => $params['address'],
  46. 'pay_time' => strtotime($params['pay_time']),
  47. 'pay_status' => $params['pay_status'],
  48. 'pay_sn' => $params['pay_sn'],
  49. 'paw_way' => $params['paw_way'],
  50. 'order_terminal' => $params['order_terminal'],
  51. 'amount_total' => $params['amount_total'],
  52. 'amount' => $params['amount'],
  53. 'transaction_id' => $params['transaction_id'],
  54. 'refund_status' => $params['refund_status'],
  55. 'refund_transaction_id' => $params['refund_transaction_id'],
  56. ]);
  57. Db::commit();
  58. return true;
  59. } catch (\Exception $e) {
  60. Db::rollback();
  61. self::setError($e->getMessage());
  62. return false;
  63. }
  64. }
  65. /**
  66. * @notes 编辑
  67. * @param array $params
  68. * @return bool
  69. * @author likeadmin
  70. * @date 2024/08/04 13:49
  71. */
  72. public static function edit(array $params): bool
  73. {
  74. Db::startTrans();
  75. try {
  76. ShopOrders::where('id', $params['id'])->update([
  77. 'shop_order_type' => $params['shop_order_type'],
  78. 'worker_id' => $params['worker_id'],
  79. 'sn' => $params['sn'],
  80. 'real_name' => $params['real_name'],
  81. 'mobile' => $params['mobile'],
  82. 'address' => $params['address'],
  83. 'pay_time' => strtotime($params['pay_time']),
  84. 'pay_status' => $params['pay_status'],
  85. 'pay_sn' => $params['pay_sn'],
  86. 'paw_way' => $params['paw_way'],
  87. 'order_terminal' => $params['order_terminal'],
  88. 'amount_total' => $params['amount_total'],
  89. 'amount' => $params['amount'],
  90. 'transaction_id' => $params['transaction_id'],
  91. 'refund_status' => $params['refund_status'],
  92. 'refund_transaction_id' => $params['refund_transaction_id'],
  93. ]);
  94. Db::commit();
  95. return true;
  96. } catch (\Exception $e) {
  97. Db::rollback();
  98. self::setError($e->getMessage());
  99. return false;
  100. }
  101. }
  102. /**
  103. * @notes 删除
  104. * @param array $params
  105. * @return bool
  106. * @author likeadmin
  107. * @date 2024/08/04 13:49
  108. */
  109. public static function delete(array $params): bool
  110. {
  111. return ShopOrders::destroy($params['id']);
  112. }
  113. /**
  114. * @notes 获取详情
  115. * @param $params
  116. * @return array
  117. * @author likeadmin
  118. * @date 2024/08/04 13:49
  119. */
  120. public static function detail($params): array
  121. {
  122. return ShopOrders::with([
  123. 'worker'=>function(Query $query) {
  124. $query->field("id,worker_number,real_name");
  125. },'orderGoods'=>function(Query $query){
  126. $query->field("id,sn,shop_goods_id,goods_name,goods_image,goods_banners,description,specs_type,custom_attribute_items,specs,number,service_total,service_fee")->append(['spec_arr']);
  127. },'orderlogistic'=>function (Query $query) {
  128. $query->field("id,order_id,shop_goods_id,express_id,logistic_number,logistic_status,create_time,update_time")->append(['logistic_status_text']);
  129. $query->with('express');
  130. }])->findOrEmpty($params['id'])->toArray();
  131. }
  132. public static function logisticInfo($params):array
  133. {
  134. $detail = ShopOrders::with(['orderlogistic'=>function (Query $query) {
  135. $query->field("id,order_id,shop_goods_id,express_id,logistic_number,logistic_status")->append(['logistic_status_text']);
  136. },'orderGoods'=>function(Query $query){
  137. $query->field("id,sn,shop_goods_id,goods_name,goods_image,goods_banners,description,specs_type,custom_attribute_items,specs,number,service_total,service_fee")->append(['spec_arr']);
  138. }])->findOrEmpty($params['id'])->toArray();
  139. $orderGoods = [];
  140. if(isset($detail['orderGoods'])){
  141. foreach ($detail['orderGoods'] as $orderGood){
  142. $orderGoods[$orderGood['shop_goods_id']] = $orderGood;
  143. }
  144. }
  145. $detail['goods'] = $orderGoods;
  146. return $detail;
  147. }
  148. public static function saveLogistic($params)
  149. {
  150. try{
  151. Db::startTrans();
  152. $orderModel = ShopOrders::with(['orderlogistic'=>function (Query $query) {
  153. $query->field("id,order_id,shop_goods_id,express_id,logistic_number,logistic_status");
  154. }])->findOrEmpty($params['id']);
  155. if($orderModel->isEmpty()){
  156. throw new \Exception('订单不存在');
  157. }
  158. if(!in_array($orderModel->shop_order_type,[2,3,4])){
  159. throw new \Exception('订单类型不支持');
  160. }
  161. $existIds = $orderModel->orderlogistic()->column('id');
  162. $takeOverFlag = true;
  163. $deliverGoodsFlag = true;
  164. $saveLogisticArr = [];
  165. $updateLogisticArr = [];
  166. foreach ($params['logistic_data'] as $logistic){
  167. if(intval($logistic['logistic_status']) === 0){
  168. $takeOverFlag = false;
  169. }
  170. if(intval($logistic['logistic_status'])!== 3){
  171. $deliverGoodsFlag = false;
  172. }
  173. if(!empty($logistic['id']) && in_array($logistic['id'],$existIds)){
  174. $updateLogisticArr[$logistic['id']] = [
  175. 'shop_goods_id' => $logistic['shop_goods_id'],
  176. 'express_id' => $logistic['express_id'],
  177. 'logistic_number' => $logistic['logistic_number'],
  178. 'logistic_status' => $logistic['logistic_status'],
  179. 'update_time' => time(),
  180. ];
  181. array_splice($existIds,array_search($logistic['id'], $existIds),1);
  182. continue;
  183. }
  184. $saveLogisticArr[] = [
  185. 'order_id' => $orderModel->id,
  186. 'shop_goods_id' => $logistic['shop_goods_id'],
  187. 'express_id' => $logistic['express_id'],
  188. 'logistic_number' => $logistic['logistic_number'],
  189. 'logistic_status' => $logistic['logistic_status'],
  190. 'create_time' => time(),
  191. 'update_time' => time(),
  192. ];
  193. }
  194. if(!empty($updateLogisticArr)){
  195. ShopOrderLogistic::updateWhenCase($updateLogisticArr);
  196. }
  197. if(!empty($saveLogisticArr)){
  198. ShopOrderLogistic::insertAll($saveLogisticArr);
  199. }
  200. if(!empty($existIds)){
  201. ShopOrderLogistic::destroy($existIds);
  202. }
  203. if($takeOverFlag && $orderModel->shop_order_type !== 3){
  204. $orderModel->shop_order_type = 2;
  205. $orderModel->save();
  206. }
  207. Db::commit();
  208. return true;
  209. } catch(\Exception $e){
  210. Db::rollback();
  211. self::setError($e->getMessage());
  212. return false;
  213. }
  214. }
  215. }