dao = $dao; } /** * @param int $id * @return UserSignFugouEntity */ public function getStoreSignFugouEntityById(int $id): UserSignFugouEntity { $entityList = $this->getStoreSignFugouEntityListByIdList([$id]); $entity = array_shift($entityList); if ($entity instanceof UserSignFugouEntity) { return $entity; } else { /** @var UserSignFugouEntity */ return UserSignFugouEntity::newInstance(); } } /** * @param array $idList * @return UserSignFugouEntity[] */ public function getStoreSignFugouEntityListByIdList(array $idList): array { return $this->dao->getStoreSignFugouEntityListByIdList($idList); } public function create($data) { return $this->dao->create($data); } /** * 写入 复购金 记录 * @param UserSignFugouEntity $userSignFugouEntity * @return UserSignFugouEntity */ public function createByEntity(UserSignFugouEntity $userSignFugouEntity): UserSignFugouEntity { $result = $this->dao->create($userSignFugouEntity->toUnderlineArray())->toArray(); /** @var UserSignFugouEntity $entity */ $entity = UserSignFugouEntity::newInstance($result); return $entity; } /** * 添加 复购金记录 * @param int $uid * @param int $type * @param float $number * @param int $commissionType * @param string $mark * @param string $orderType * @param string $orderId * @return UserSignFugouEntity */ public function addUserSingFugou(int $uid, int $type, float $number, int $commissionType, string $mark = '', string $orderType = '', string $orderId = ''): UserSignFugouEntity { if (!empty($orderType)) { if (!empty($orderId)) { if ($orderType == UserSignFugouEnum::ORDER_TYPE['Platform']['code']) { /** @var StoreOrderRepository $storeOrderRepository */ $storeOrderRepository = app()->make(StoreOrderRepository::class); $storeOrderEntity = $storeOrderRepository->getStoreOrderEntityByOrderId((int)$orderId); if (empty($storeOrderEntity->getOrderId())) { throw new ValidateException('未查询到订单信息'); } } } } /** @var UserSignFugouEntity $userSignFugouEntity */ $userSignFugouEntity = UserSignFugouEntity::newInstance(); $userSignFugouEntity->setUid($uid) ->setType($type) ->setNumber($number) ->setCommissionType($commissionType) ->setMark($mark) ->setOrderType($orderType) ->setOrderId($orderId) ->setAddtime(time()) ->setStatus(UserSignFugouEnum::STATUS['Pending']['code']); return $this->createByEntity($userSignFugouEntity); } /** * 将 复购 记录设置为生效状态 并对用户的 复购 字段进行增减 * @param int $id * @return UserSignFugouEntity */ public function execute(int $id): UserSignFugouEntity { $UserSignFugouEntity = $this->getStoreSignFugouEntityById($id); if (empty($UserSignFugouEntity->getId()) || empty($UserSignFugouEntity->getUid())) { throw new ValidateException('无效的复购记录'); } if ($UserSignFugouEntity->getStatus() == UserSignFugouEnum::STATUS['Invalid']['code']) { throw new ValidateException('该复购记录已失效'); } if (!empty($UserSignFugouEntity->getSettlementTime()) || $UserSignFugouEntity->getStatus() == UserSignFugouEnum::STATUS['Valid']['code']) { throw new ValidateException('该复购记录已更新,请勿重复操作'); } /** @var UserRepository $userRepository */ $userRepository = app()->make(UserRepository::class); $userEntity = $userRepository->getUserEntityByUid($UserSignFugouEntity->getUid()); if (empty($userEntity->getUid())) { throw new ValidateException('未查询到用户信息'); } if ($UserSignFugouEntity->getType() == UserSignFugouEnum::TYPE['Consume']['code']) { $surplus = bcsub($userEntity->getFugou(), $UserSignFugouEntity->getNumber(), 2); if ($surplus < 0.00) { throw new ValidateException('用户复购不足'); } } else { $surplus = bcadd($userEntity->getFugou(), $UserSignFugouEntity->getNumber(), 2); } try { $UserSignFugouEntity ->setSurplus($surplus) ->setSettlementTime(date('Y-m-d H:i:s')) ->setStatus(UserSignFugouEnum::STATUS['Valid']['code']); $userRepository->update($userEntity->getUid(), ['Fugou' => $surplus]); $this->dao->update($UserSignFugouEntity->getId(), [ 'surplus' => $UserSignFugouEntity->getSurplus(), 'settlement_time' => $UserSignFugouEntity->getSettlementTime(), 'status' => $UserSignFugouEntity->getStatus() ]); } catch (DbException $e) { } return $UserSignFugouEntity; } }