IntegralOrder.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeshop开源商城系统
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | gitee下载:https://gitee.com/likeshop_gitee
  7. // | github下载:https://github.com/likeshop-github
  8. // | 访问官网:https://www.likeshop.cn
  9. // | 访问社区:https://home.likeshop.cn
  10. // | 访问手册:http://doc.likeshop.cn
  11. // | 微信公众号:likeshop技术社区
  12. // | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
  13. // | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
  14. // | 禁止对系统程序代码以任何目的,任何形式的再发布
  15. // | likeshop团队版权所有并拥有最终解释权
  16. // +----------------------------------------------------------------------
  17. // | author: likeshop.cn.team
  18. // +----------------------------------------------------------------------
  19. namespace app\common\model;
  20. use app\common\enum\IntegralGoodsEnum;
  21. use app\common\enum\IntegralOrderEnum;
  22. use app\common\enum\PayEnum;
  23. use app\common\service\RegionService;
  24. use think\model\concern\SoftDelete;
  25. /**
  26. * 积分订单模型
  27. * Class IntegralOrder
  28. * @package app\common\model
  29. */
  30. class IntegralOrder extends BaseModel
  31. {
  32. use SoftDelete;
  33. protected $deleteTime = 'delete_time';
  34. // 设置json类型字段
  35. protected $json = ['goods_snap', 'address'];
  36. // 设置JSON数据返回数组
  37. protected $jsonAssoc = true;
  38. /**
  39. * @notes 关联用户模型
  40. * @return \think\model\relation\HasOne
  41. * @author ljj
  42. * @date 2022/3/30 5:16 下午
  43. */
  44. public function user()
  45. {
  46. return $this->hasOne(User::class, 'id', 'user_id')
  47. ->field('id,sn,nickname,avatar,level,mobile,sex,create_time');
  48. }
  49. /**
  50. * @notes 收货地址
  51. * @param $value
  52. * @param $data
  53. * @return mixed|string
  54. * @author ljj
  55. * @date 2022/3/30 5:17 下午
  56. */
  57. public function getDeliveryAddressAttr($value, $data)
  58. {
  59. return RegionService::getAddress(
  60. [
  61. $data['address']['province'] ?? '',
  62. $data['address']['city'] ?? '',
  63. $data['address']['district'] ?? ''
  64. ],
  65. $data['address']['address'] ?? '',
  66. );
  67. }
  68. /**
  69. * @notes 按钮
  70. * @param $value
  71. * @param $data
  72. * @return array
  73. * @author ljj
  74. * @date 2022/3/30 5:26 下午
  75. */
  76. public function getAdminBtnsAttr($value, $data)
  77. {
  78. $goods_snap = $data['goods_snap'];
  79. $btns = [
  80. 'cancel_btn' => $this->getAdminCancelBtn($data, $goods_snap),
  81. 'delivery_btn' => $this->getDeliveryBtn($data, $goods_snap),
  82. 'confirm_btn' => $this->getConfirmBtn($data, $goods_snap),
  83. 'to_ship_btn' => $this->getToShipBtn($data),
  84. ];
  85. return $btns;
  86. }
  87. /**
  88. * @notes 用户端按钮
  89. * @param $value
  90. * @param $data
  91. * @return array
  92. * @author 段誉
  93. * @date 2022/3/31 16:39
  94. */
  95. public function getBtnsAttr($value, $data)
  96. {
  97. $goods_snap = $data['goods_snap'];
  98. return [
  99. 'pay_btn' => $this->getPayBtn($data),
  100. 'cancel_btn' => $this->getAdminCancelBtn($data, $goods_snap),
  101. 'delivery_btn' => $this->getDeliveryBtn($data, $goods_snap),
  102. 'confirm_btn' => $this->getConfirmBtn($data, $goods_snap),
  103. 'del_btn' => $this->getDelBtn($data),
  104. ];
  105. }
  106. /**
  107. * @notes 是否显示支付按钮
  108. * @param $data
  109. * @return int
  110. * @author 段誉
  111. * @date 2022/3/31 16:32
  112. */
  113. public function getPayBtn($data)
  114. {
  115. $btn = 0;
  116. if ($data['order_status'] == IntegralOrderEnum::ORDER_STATUS_NO_PAID && $data['pay_status'] == PayEnum::UNPAID) {
  117. $btn = 1;
  118. }
  119. return $btn;
  120. }
  121. /**
  122. * @notes 是否显示删除按钮
  123. * @param $data
  124. * @return int
  125. * @author 段誉
  126. * @date 2022/3/31 16:36
  127. */
  128. public function getDelBtn($data)
  129. {
  130. $btn = 0;
  131. if ($data['order_status'] == IntegralOrderEnum::ORDER_STATUS_DOWN) {
  132. if ($data['pay_status'] == PayEnum::UNPAID || $data['refund_status'] == 1) {
  133. $btn = 1;
  134. }
  135. }
  136. return $btn;
  137. }
  138. /**
  139. * @notes 后台取消订单按钮
  140. * @param $data
  141. * @param $goods_snap
  142. * @return int
  143. * @author ljj
  144. * @date 2022/3/30 5:33 下午
  145. */
  146. public function getAdminCancelBtn($data, $goods_snap)
  147. {
  148. $btn = 0;
  149. // 积分订单 商品类型为红包时 不可取消
  150. if ($goods_snap['type'] == IntegralGoodsEnum::TYPE_BALANCE) {
  151. return $btn;
  152. }
  153. // 未支付的订单 或 已支付但未发货 可以取消
  154. if (is_string($data['create_time'])) {
  155. $data['create_time'] = strtotime($data['create_time']);
  156. }
  157. if (($data['order_status'] == IntegralOrderEnum::ORDER_STATUS_NO_PAID && $data['pay_status'] == PayEnum::UNPAID)
  158. || ($data['pay_status'] == PayEnum::ISPAID && $data['order_status'] == IntegralOrderEnum::ORDER_STATUS_DELIVERY)) {
  159. $btn = 1;
  160. }
  161. return $btn;
  162. }
  163. /**
  164. * @notes 物流查询按钮
  165. * @param $data
  166. * @param $goods_snap
  167. * @return int
  168. * @author ljj
  169. * @date 2022/3/30 5:34 下午
  170. */
  171. public function getDeliveryBtn($data, $goods_snap)
  172. {
  173. // 红包类型 或 商品无需物流
  174. if ($goods_snap['type'] == IntegralGoodsEnum::TYPE_BALANCE || $goods_snap['delivery_way'] == 0) {
  175. return 0;
  176. }
  177. return $data['express_status'];
  178. }
  179. /**
  180. * @notes 确认收货按钮
  181. * @param $data
  182. * @param $goods_snap
  183. * @return int
  184. * @author ljj
  185. * @date 2022/3/30 5:35 下午
  186. */
  187. public function getConfirmBtn($data, $goods_snap)
  188. {
  189. $btn = 0;
  190. // 红包类型 或 订单无需物流
  191. if ($goods_snap['type'] == IntegralGoodsEnum::TYPE_BALANCE || $goods_snap['delivery_way'] == 0) {
  192. return $btn;
  193. }
  194. // 订单待收货 且 已发货状态
  195. if ($data['order_status'] == IntegralOrderEnum::ORDER_STATUS_GOODS && $data['express_status'] == 1) {
  196. $btn = 1;
  197. }
  198. return $btn;
  199. }
  200. /**
  201. * @notes 去发货按钮
  202. * @param $value
  203. * @param $data
  204. * @return int
  205. * @author ljj
  206. * @date 2022/3/30 5:37 下午
  207. */
  208. public function getToShipBtn($data)
  209. {
  210. $btn = 0;
  211. if ($data['order_status'] == IntegralOrderEnum::ORDER_STATUS_DELIVERY && $data['pay_status'] == PayEnum::ISPAID) {
  212. $btn = 1;
  213. }
  214. return $btn;
  215. }
  216. /**
  217. * @notes 兑换类型
  218. * @param $value
  219. * @param $data
  220. * @return string|string[]
  221. * @author ljj
  222. * @date 2022/3/30 5:37 下午
  223. */
  224. public function getExchangeTypeDescAttr($value, $data)
  225. {
  226. return IntegralGoodsEnum::getTypeDesc($data['exchange_type']);
  227. }
  228. /**
  229. * @notes 订单状态
  230. * @param $value
  231. * @param $data
  232. * @return string|string[]
  233. * @author ljj
  234. * @date 2022/3/30 5:38 下午
  235. */
  236. public function getOrderStatusDescAttr($value, $data)
  237. {
  238. return IntegralOrderEnum::getOrderStatus($data['order_status']);
  239. }
  240. /**
  241. * @notes 支付状态
  242. * @param $value
  243. * @param $data
  244. * @return string|string[]
  245. * @author ljj
  246. * @date 2022/3/30 5:38 下午
  247. */
  248. public function getPayStatusDescAttr($value, $data)
  249. {
  250. return PayEnum::getPayStatusDesc($data['pay_status']);
  251. }
  252. /**
  253. * @notes 支付方式
  254. * @param $value
  255. * @param $data
  256. * @return string|string[]
  257. * @author ljj
  258. * @date 2022/3/30 5:38 下午
  259. */
  260. public function getPayWayDescAttr($value, $data)
  261. {
  262. return PayEnum::getPayDesc($data['pay_way']);
  263. }
  264. /**
  265. * @notes 支付时间
  266. * @param $value
  267. * @param $data
  268. * @return string
  269. * @author ljj
  270. * @date 2022/3/31 9:44 上午
  271. */
  272. public function getPayTimeAttr($value, $data)
  273. {
  274. return $value ? date('Y-m-d H:i:s', $value) : '-';
  275. }
  276. /**
  277. * @notes 发货时间
  278. * @param $value
  279. * @param $data
  280. * @return string
  281. * @author 段誉
  282. * @date 2022/3/31 16:26
  283. */
  284. public function getExpressTimeAttr($value, $data)
  285. {
  286. return $value ? date('Y-m-d H:i:s', $value) : '-';
  287. }
  288. }