|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+<?php
|
|
|
2
|
+
|
|
|
3
|
+namespace app\common\repositories\shared;
|
|
|
4
|
+
|
|
|
5
|
+use app\common\dao\shared\SharedProsperityRewardRecordDao;
|
|
|
6
|
+use app\common\enum\shared\SharedProsperityRewardRecordEnum;
|
|
|
7
|
+use app\common\repositories\BaseRepository;
|
|
|
8
|
+use app\common\repositories\store\order\StoreOrderRepository;
|
|
|
9
|
+use app\entity\data\shared\SharedProsperityRewardRecordEntity;
|
|
|
10
|
+use app\entity\data\shared\SharedProsperityUserEntity;
|
|
|
11
|
+use think\db\exception\DbException;
|
|
|
12
|
+use think\exception\ValidateException;
|
|
|
13
|
+
|
|
|
14
|
+class SharedProsperityRewardRecordRepository extends BaseRepository
|
|
|
15
|
+{
|
|
|
16
|
+
|
|
|
17
|
+ protected $dao;
|
|
|
18
|
+
|
|
|
19
|
+ /**
|
|
|
20
|
+ * SharedProsperityRewardRecordRepository constructor.
|
|
|
21
|
+ * @param SharedProsperityRewardRecordDao $dao
|
|
|
22
|
+ */
|
|
|
23
|
+ public function __construct(SharedProsperityRewardRecordDao $dao)
|
|
|
24
|
+ {
|
|
|
25
|
+ $this->dao = $dao;
|
|
|
26
|
+ }
|
|
|
27
|
+
|
|
|
28
|
+ /**
|
|
|
29
|
+ * @param int $id
|
|
|
30
|
+ * @return SharedProsperityRewardRecordEntity
|
|
|
31
|
+ */
|
|
|
32
|
+ public function getSharedProsperityRewardRecordEntityById(int $id): SharedProsperityRewardRecordEntity
|
|
|
33
|
+ {
|
|
|
34
|
+ $entityList = $this->getSharedProsperityRewardRecordEntityListByIdList([$id]);
|
|
|
35
|
+ $entity = array_shift($entityList);
|
|
|
36
|
+ if ($entity instanceof SharedProsperityRewardRecordEntity) {
|
|
|
37
|
+ return $entity;
|
|
|
38
|
+ } else {
|
|
|
39
|
+ /** @var SharedProsperityRewardRecordEntity */
|
|
|
40
|
+ return SharedProsperityRewardRecordEntity::newInstance();
|
|
|
41
|
+ }
|
|
|
42
|
+ }
|
|
|
43
|
+
|
|
|
44
|
+ /**
|
|
|
45
|
+ * @param array $idList
|
|
|
46
|
+ * @return SharedProsperityRewardRecordEntity[]
|
|
|
47
|
+ */
|
|
|
48
|
+ public function getSharedProsperityRewardRecordEntityListByIdList(array $idList): array
|
|
|
49
|
+ {
|
|
|
50
|
+ return $this->dao->getSharedProsperityRewardRecordEntityListByIdList($idList);
|
|
|
51
|
+ }
|
|
|
52
|
+
|
|
|
53
|
+ public function create($data)
|
|
|
54
|
+ {
|
|
|
55
|
+ return $this->dao->create($data);
|
|
|
56
|
+ }
|
|
|
57
|
+
|
|
|
58
|
+ /**
|
|
|
59
|
+ * @param SharedProsperityRewardRecordEntity $sharedProsperityRewardRecordEntity
|
|
|
60
|
+ * @return SharedProsperityRewardRecordEntity
|
|
|
61
|
+ */
|
|
|
62
|
+ public function createByEntity(SharedProsperityRewardRecordEntity $sharedProsperityRewardRecordEntity): SharedProsperityRewardRecordEntity
|
|
|
63
|
+ {
|
|
|
64
|
+ $result = $this->create($sharedProsperityRewardRecordEntity->toUnderlineArray())->toArray();
|
|
|
65
|
+ /** @var SharedProsperityRewardRecordEntity $entity */
|
|
|
66
|
+ $entity = SharedProsperityRewardRecordEntity::newInstance($result);
|
|
|
67
|
+ return $entity;
|
|
|
68
|
+ }
|
|
|
69
|
+
|
|
|
70
|
+ /**
|
|
|
71
|
+ * @param $id
|
|
|
72
|
+ * @param $data
|
|
|
73
|
+ * @return int
|
|
|
74
|
+ */
|
|
|
75
|
+ public function update($id, $data): int
|
|
|
76
|
+ {
|
|
|
77
|
+ try {
|
|
|
78
|
+ return $this->dao->update($id, $data);
|
|
|
79
|
+ } catch (DbException $e) {
|
|
|
80
|
+ return 0;
|
|
|
81
|
+ }
|
|
|
82
|
+ }
|
|
|
83
|
+
|
|
|
84
|
+ /**
|
|
|
85
|
+ * @param SharedProsperityRewardRecordEntity $sharedProsperityRewardRecordEntity
|
|
|
86
|
+ * @return SharedProsperityRewardRecordEntity
|
|
|
87
|
+ */
|
|
|
88
|
+ public function updateByEntity(SharedProsperityRewardRecordEntity $sharedProsperityRewardRecordEntity): SharedProsperityRewardRecordEntity
|
|
|
89
|
+ {
|
|
|
90
|
+ if (empty($sharedProsperityRewardRecordEntity->getId())) {
|
|
|
91
|
+ return SharedProsperityRewardRecordEntity::newInstance();
|
|
|
92
|
+ }
|
|
|
93
|
+ $result = $this->update($sharedProsperityRewardRecordEntity->getId(), $sharedProsperityRewardRecordEntity->toUnderlineArray());
|
|
|
94
|
+ if ($result > 0) {
|
|
|
95
|
+ return $this->getSharedProsperityRewardRecordEntityById($sharedProsperityRewardRecordEntity->getId());
|
|
|
96
|
+ }
|
|
|
97
|
+ return SharedProsperityRewardRecordEntity::newInstance();
|
|
|
98
|
+ }
|
|
|
99
|
+
|
|
|
100
|
+ /**
|
|
|
101
|
+ * 添加 共富体系奖励记录
|
|
|
102
|
+ * @param int $uid
|
|
|
103
|
+ * @param int $type
|
|
|
104
|
+ * @param float $number
|
|
|
105
|
+ * @param int $typeShop
|
|
|
106
|
+ * @param string $orderSn
|
|
|
107
|
+ * @param string $remark
|
|
|
108
|
+ * @return SharedProsperityRewardRecordEntity
|
|
|
109
|
+ */
|
|
|
110
|
+ public function addSharedProsperityRewardRecord(int $uid, int $type, float $number, int $typeShop = 0, string $orderSn = '', string $remark = ''): SharedProsperityRewardRecordEntity
|
|
|
111
|
+ {
|
|
|
112
|
+ if ($typeShop == SharedProsperityRewardRecordEnum::TYPE_SHOP['Platform']['code']) {
|
|
|
113
|
+ /** @var StoreOrderRepository $storeOrderRepository */
|
|
|
114
|
+ $storeOrderRepository = app()->make(StoreOrderRepository::class);
|
|
|
115
|
+ $storeOrderEntity = $storeOrderRepository->getStoreOrderEntityByOrderSn($orderSn);
|
|
|
116
|
+ if (empty($storeOrderEntity->getOrderId())) {
|
|
|
117
|
+ throw new ValidateException('未查询到订单信息');
|
|
|
118
|
+ }
|
|
|
119
|
+ }
|
|
|
120
|
+
|
|
|
121
|
+ /** @var SharedProsperityRewardRecordEntity $sharedProsperityRewardRecordEntity */
|
|
|
122
|
+ $sharedProsperityRewardRecordEntity = SharedProsperityRewardRecordEntity::newInstance();
|
|
|
123
|
+ $sharedProsperityRewardRecordEntity->setUserId($uid)
|
|
|
124
|
+ //UserBillEnum::PM['INCOME']['code']
|
|
|
125
|
+ ->setType($type)
|
|
|
126
|
+ ->setNumber($number)
|
|
|
127
|
+ ->setStatus(SharedProsperityRewardRecordEnum::STATUS['PENDING']['code'])
|
|
|
128
|
+ ->setTypeShop($typeShop)
|
|
|
129
|
+ ->setOrderSn($orderSn)
|
|
|
130
|
+ ->setRemark($remark);
|
|
|
131
|
+
|
|
|
132
|
+ return $this->createByEntity($sharedProsperityRewardRecordEntity);
|
|
|
133
|
+ }
|
|
|
134
|
+
|
|
|
135
|
+ /**
|
|
|
136
|
+ * 结算 共富体系奖励记录
|
|
|
137
|
+ * @param array $idList
|
|
|
138
|
+ * @return array
|
|
|
139
|
+ */
|
|
|
140
|
+ public function executeByIdList(array $idList): array
|
|
|
141
|
+ {
|
|
|
142
|
+ $sharedProsperityRewardRecordEntityList = $this->getSharedProsperityRewardRecordEntityListByIdList($idList);
|
|
|
143
|
+ // 忽略 已经生效的 记录
|
|
|
144
|
+ $sharedProsperityRewardRecordEntityList = array_filter($sharedProsperityRewardRecordEntityList, function($entity) {
|
|
|
145
|
+ return $entity->getStatus() != SharedProsperityRewardRecordEnum::STATUS['VALID']['code'];
|
|
|
146
|
+ });
|
|
|
147
|
+
|
|
|
148
|
+ if (!empty($sharedProsperityRewardRecordEntityList)) {
|
|
|
149
|
+ // 获取所有记录的 归属人
|
|
|
150
|
+ $userIdList = array_map(function ($sharedProsperityRewardRecordEntity) {
|
|
|
151
|
+ return $sharedProsperityRewardRecordEntity->getUserId();
|
|
|
152
|
+ }, $sharedProsperityRewardRecordEntityList);
|
|
|
153
|
+
|
|
|
154
|
+ // 获取用户 映射信息
|
|
|
155
|
+ /** @var SharedProsperityUserRepository $sharedProsperityUserRepository */
|
|
|
156
|
+ $sharedProsperityUserRepository = app()->make(SharedProsperityUserRepository::class);
|
|
|
157
|
+ /** @var SharedProsperityUserEntity[] $sharedProsperityUserEntityMapByUserId */
|
|
|
158
|
+ $sharedProsperityUserEntityMapByUserId = [];
|
|
|
159
|
+ if (!empty($userIdList)) {
|
|
|
160
|
+ $sharedProsperityUserEntityMapByUserId = $sharedProsperityUserRepository->getSharedProsperityUserEntityMapByUserIdList($userIdList);
|
|
|
161
|
+ }
|
|
|
162
|
+
|
|
|
163
|
+ $updateSharedProsperityUserEntityList = [];
|
|
|
164
|
+ $updateSharedProsperityRewardRecordEntityList = [];
|
|
|
165
|
+ foreach ($sharedProsperityRewardRecordEntityList as $sharedProsperityRewardRecordEntity) {
|
|
|
166
|
+ if (empty($sharedProsperityRewardRecordEntity->getId()) || empty($sharedProsperityRewardRecordEntity->getUserId())) {
|
|
|
167
|
+ // throw new ValidateException('无效的账单记录');
|
|
|
168
|
+ continue;
|
|
|
169
|
+ }
|
|
|
170
|
+ if (!empty($sharedProsperityRewardRecordEntity->getTakeTime())) {
|
|
|
171
|
+ throw new ValidateException("该奖励记录已更新,请勿重复操作({$sharedProsperityRewardRecordEntity->getId()})");
|
|
|
172
|
+ }
|
|
|
173
|
+
|
|
|
174
|
+ $sharedProsperityUserEntity = $sharedProsperityUserEntityMapByUserId[$sharedProsperityRewardRecordEntity->getUserId()];
|
|
|
175
|
+ if (empty($sharedProsperityUserEntity) || empty($sharedProsperityUserEntity->getUserId())) {
|
|
|
176
|
+ throw new ValidateException("未查询到用户信息({$sharedProsperityRewardRecordEntity->getId()})");
|
|
|
177
|
+ }
|
|
|
178
|
+
|
|
|
179
|
+ // 更新 用户信息
|
|
|
180
|
+ /** @var SharedProsperityUserEntity $updateSharedProsperityUserEntity */
|
|
|
181
|
+ $updateSharedProsperityUserEntity = $updateSharedProsperityUserEntityList[$sharedProsperityUserEntity->getUserId()] ?? SharedProsperityUserEntity::newInstance();
|
|
|
182
|
+ $updateSharedProsperityUserEntity->setId();
|
|
|
183
|
+
|
|
|
184
|
+ // 更新 账单 记录
|
|
|
185
|
+ /** @var SharedProsperityRewardRecordEntity $updateSharedProsperityRewardRecord */
|
|
|
186
|
+ $updateSharedProsperityRewardRecord = $updateSharedProsperityRewardRecordEntityList[$sharedProsperityRewardRecordEntity->getId()] ?? SharedProsperityRewardRecordEntity::newInstance();
|
|
|
187
|
+ // 更新 账单记录 状态
|
|
|
188
|
+ $updateSharedProsperityRewardRecord
|
|
|
189
|
+ ->setId($sharedProsperityRewardRecordEntity->getBillId())
|
|
|
190
|
+ ->setStatus(UserBillEnum::STATUS['VALID']['code'])
|
|
|
191
|
+ ->setTakeTime(time());
|
|
|
192
|
+
|
|
|
193
|
+ if ($sharedProsperityRewardRecordEntity->getCommissionType() == UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code']) {
|
|
|
194
|
+ // 直推奖
|
|
|
195
|
+ if (is_null($updateSharedProsperityUserEntity->getBrokeragePrice())) {
|
|
|
196
|
+ $updateSharedProsperityUserEntity->setBrokeragePrice($sharedProsperityUserEntity->getBrokeragePrice());
|
|
|
197
|
+ }
|
|
|
198
|
+ // 更新用户 佣金 信息
|
|
|
199
|
+ if ($sharedProsperityRewardRecordEntity->getPm() == UserBillEnum::PM['EXPEND']['code']) {
|
|
|
200
|
+ if ($updateSharedProsperityUserEntity->getBrokeragePrice() < $sharedProsperityRewardRecordEntity->getNumber()) {
|
|
|
201
|
+ throw new ValidateException('用户佣金不足');
|
|
|
202
|
+ }
|
|
|
203
|
+ $updateSharedProsperityUserEntity->setBrokeragePrice(bcsub($updateSharedProsperityUserEntity->getBrokeragePrice(), $sharedProsperityRewardRecordEntity->getNumber(), 2));
|
|
|
204
|
+ } else {
|
|
|
205
|
+ $updateSharedProsperityUserEntity->setBrokeragePrice(bcadd($updateSharedProsperityUserEntity->getBrokeragePrice(), $sharedProsperityRewardRecordEntity->getNumber(), 2));
|
|
|
206
|
+ }
|
|
|
207
|
+
|
|
|
208
|
+ } else if ($sharedProsperityRewardRecordEntity->getCommissionType() == UserBillEnum::COMMISSION_TYPE['PENSION']['code']) {
|
|
|
209
|
+
|
|
|
210
|
+ if ($sharedProsperityRewardRecordEntity->getGzc() == UserBillEnum::GZC_STATUS['NOT_ENTERED']['code']) {
|
|
|
211
|
+ if (!empty($userCertificationEntityMapByUid[$sharedProsperityRewardRecordEntity->getUid()])) {
|
|
|
212
|
+ $userCertificationEntity = $userCertificationEntityMapByUid[$sharedProsperityRewardRecordEntity->getUid()];
|
|
|
213
|
+ // 创建公证处记录
|
|
|
214
|
+ $gzcLogRepository->addGzcLog(
|
|
|
215
|
+ $userCertificationEntity->getUid(),
|
|
|
216
|
+ $userCertificationEntity->getUserName(),
|
|
|
217
|
+ $userCertificationEntity->getMobile(),
|
|
|
218
|
+ $userCertificationEntity->getUserCard(),
|
|
|
219
|
+ $sharedProsperityRewardRecordEntity->getTypeShop(),
|
|
|
220
|
+ $sharedProsperityRewardRecordEntity->getLinkId(),
|
|
|
221
|
+ $sharedProsperityRewardRecordEntity->getNumber()
|
|
|
222
|
+ );
|
|
|
223
|
+
|
|
|
224
|
+ // 养老金
|
|
|
225
|
+ if (is_null($updateSharedProsperityUserEntity->getAnnuity())) {
|
|
|
226
|
+ $updateSharedProsperityUserEntity->setAnnuity($sharedProsperityUserEntity->getAnnuity());
|
|
|
227
|
+ }
|
|
|
228
|
+ $updateSharedProsperityUserEntity->setAnnuity(bcadd($updateSharedProsperityUserEntity->getAnnuity(), $sharedProsperityRewardRecordEntity->getNumber(), 2));
|
|
|
229
|
+
|
|
|
230
|
+ // 几笔养老金
|
|
|
231
|
+ if (is_null($updateSharedProsperityUserEntity->getAnnuityNum())) {
|
|
|
232
|
+ $updateSharedProsperityUserEntity->setAnnuityNum($sharedProsperityUserEntity->getAnnuityNum());
|
|
|
233
|
+ }
|
|
|
234
|
+ $updateSharedProsperityUserEntity->setAnnuityNum(bcadd($updateSharedProsperityUserEntity->getAnnuityNum(), 1));
|
|
|
235
|
+
|
|
|
236
|
+ // 更新佣金记录
|
|
|
237
|
+ $updateSharedProsperityRewardRecord
|
|
|
238
|
+ ->setGzc(UserBillEnum::GZC_STATUS['ENTERED']['code'])
|
|
|
239
|
+ ->setIsGzc(UserBillEnum::IS_GZC['NOT_STARTED']['code']);
|
|
|
240
|
+ }
|
|
|
241
|
+ }
|
|
|
242
|
+ }
|
|
|
243
|
+
|
|
|
244
|
+ $updateSharedProsperityUserEntityList[$sharedProsperityUserEntity->getUid()] = $updateSharedProsperityUserEntity;
|
|
|
245
|
+ $updateSharedProsperityRewardRecordEntityList[$sharedProsperityRewardRecordEntity->getBillId()] = $updateSharedProsperityRewardRecord;
|
|
|
246
|
+ }
|
|
|
247
|
+ if (!empty($updateSharedProsperityUserEntityList)) {
|
|
|
248
|
+ $sharedProsperityUserRepository->batchUpdateUserDataByDataList(
|
|
|
249
|
+ array_map(function (UserEntity $updateUserEntity) {
|
|
|
250
|
+ return $updateUserEntity->toUnderlineArray();
|
|
|
251
|
+ }, $updateSharedProsperityUserEntityList)
|
|
|
252
|
+ );
|
|
|
253
|
+ }
|
|
|
254
|
+
|
|
|
255
|
+ if (!empty($updateSharedProsperityRewardRecordEntityList)) {
|
|
|
256
|
+ $this->batchUpdateUserBillDataByDataList(
|
|
|
257
|
+ array_map(function (UserBillEntity $updateUserBillEntity) {
|
|
|
258
|
+ return $updateUserBillEntity->toUnderlineArray();
|
|
|
259
|
+ }, $updateSharedProsperityRewardRecordEntityList)
|
|
|
260
|
+ );
|
|
|
261
|
+ }
|
|
|
262
|
+ }
|
|
|
263
|
+
|
|
|
264
|
+ return $idList;
|
|
|
265
|
+ }
|
|
|
266
|
+}
|