dao = $dao; } /** * @param int $id * @return UserSignJingdouEntity */ public function getStoreSignJingdouEntityById(int $id): UserSignJingdouEntity { $entityList = $this->getStoreSignJingdouEntityListByIdList([$id]); $entity = array_shift($entityList); if ($entity instanceof UserSignJingdouEntity) { return $entity; } else { /** @var UserSignJingdouEntity */ return UserSignJingdouEntity::newInstance(); } } /** * @param array $idList * @return UserSignJingdouEntity[] */ public function getStoreSignJingdouEntityListByIdList(array $idList): array { return $this->dao->getStoreSignJingdouEntityListByIdList($idList); } public function create($data) { return $this->dao->create($data); } /** * 写入京豆记录 * @param UserSignJingdouEntity $userSignJingdouEntity * @return UserSignJingdouEntity */ public function createByEntity(UserSignJingdouEntity $userSignJingdouEntity): UserSignJingdouEntity { $result = $this->dao->create($userSignJingdouEntity->toUnderlineArray())->toArray(); /** @var UserSignJingdouEntity $entity */ $entity = UserSignJingdouEntity::newInstance($result); return $entity; } /** * 添加京豆记录 * @param int $uid * @param int $type * @param float $number * @param int $merId * @param string $mark * @param string $orderType * @param string $orderId * @return UserSignJingdouEntity */ public function addUserSingJingdou(int $uid, int $type, float $number, int $merId, string $mark = '', string $orderType = '', string $orderId = ''): UserSignJingdouEntity { if (!empty($orderType)) { if (!empty($orderId)) { if ($orderType == UserSignJingdouEnum::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 UserSignJingdouEntity $userSignJingdouEntity */ $userSignJingdouEntity = UserSignJingdouEntity::newInstance(); $userSignJingdouEntity->setUid($uid) ->setType($type) ->setNumber($number) ->setMerId($merId) ->setMark($mark) ->setOrderType($orderType) ->setOrderId($orderId) ->setAddtime(time()) ->setStatus(UserSignJingdouEnum::STATUS['PendingConfirmation']['code']); return $this->createByEntity($userSignJingdouEntity); } /** * 将 京豆 记录设置为生效状态 并对用户的 京豆 字段进行增减 * @param int $id * @return UserSignJingdouEntity */ public function execute(int $id): UserSignJingdouEntity { $UserSignJingdouEntity = $this->getStoreSignJingdouEntityById($id); if (empty($UserSignJingdouEntity->getId()) || empty($UserSignJingdouEntity->getUid())) { throw new ValidateException('无效的积分记录'); } if ($UserSignJingdouEntity->getStatus() == UserSignJingdouEnum::STATUS['Invalid']['code']) { throw new ValidateException('该积分记录已失效'); } if (!empty($UserSignJingdouEntity->getSettlementTime()) || $UserSignJingdouEntity->getStatus() == UserSignJingdouEnum::STATUS['Valid']['code']) { throw new ValidateException('该积分记录已更新,请勿重复操作'); } /** @var UserRepository $userRepository */ $userRepository = app()->make(UserRepository::class); $userEntity = $userRepository->getUserEntityByUid($UserSignJingdouEntity->getUid()); if (empty($userEntity->getUid())) { throw new ValidateException('未查询到用户信息'); } if ($UserSignJingdouEntity->getType() == UserSignJingdouEnum::TYPE['Consume']['code']) { $surplus = bcsub($userEntity->getJingdou(), $UserSignJingdouEntity->getNumber(), 2); if ($surplus < 0.00) { throw new ValidateException('用户京豆不足'); } } else { $surplus = bcadd($userEntity->getJingdou(), $UserSignJingdouEntity->getNumber(), 2); } try { $UserSignJingdouEntity ->setSurplus($surplus) ->setSettlementTime(date('Y-m-d H:i:s')); $userRepository->update($userEntity->getUid(), ['jingdou' => $surplus]); $this->dao->update($UserSignJingdouEntity->getId(), [ 'surplus' => $UserSignJingdouEntity->getSurplus(), 'settlement_time' => $UserSignJingdouEntity->getSettlementTime() ]); } catch (DbException $e) { } return $UserSignJingdouEntity; } }