From 8063ee7eee51bfe25a09428e6efc60f828b270c6 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 19 六月 2025 20:00:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java |  161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 161 insertions(+), 0 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java
new file mode 100644
index 0000000..ba8b794
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java
@@ -0,0 +1,161 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.security.context.UserContext;
+import cn.lili.modules.lmk.domain.entity.ShareClickRecord;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import cn.lili.modules.lmk.service.ShareClickRecordService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.Share;
+import cn.lili.modules.lmk.mapper.ShareMapper;
+import cn.lili.modules.lmk.service.ShareService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.ShareForm;
+import cn.lili.modules.lmk.domain.vo.ShareVO;
+import cn.lili.modules.lmk.domain.query.ShareQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鍒嗕韩璁板綍 鏈嶅姟瀹炵幇绫�
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Service
+@RequiredArgsConstructor
+public class ShareServiceImpl extends ServiceImpl<ShareMapper, Share> implements ShareService {
+
+    private final ShareMapper shareMapper;
+    private final ShareClickRecordService shareClickRecordService;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ShareForm form) {
+        // 娌″垎浜繃鎵嶆柊澧�
+        boolean exists = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(Share::getShareType, form.getShareType())
+                .eq(Share::getRefId, form.getRefId())
+                .eq(Share::getShareUser, form.getShareUser())
+                .exists();
+        if (! exists) {
+            Share entity = ShareForm.getEntityByForm(form, null);
+            entity.setShareTime(new Date());
+            baseMapper.insert(entity);
+        }
+        return Result.ok();
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ShareForm form) {
+        Share entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(ShareQuery query) {
+        IPage<ShareVO> page = PageUtil.getPage(query, ShareVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        ShareVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<Share> entities = baseMapper.selectList(null);
+        List<ShareVO> vos = entities.stream()
+                .map(entity -> ShareVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result addShareClick(ShareClickRecordForm form) {
+        // 鏌ュ嚭鍒嗕韩璁板綍
+        Share share = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(Share::getShareUser, form.getShareUserId())
+                .eq(Share::getRefId, form.getRefId())
+                .one();
+        if (Objects.isNull(share)) {
+            return Result.ok();
+        }
+        // 娌℃湁璁块棶杩囨墠娣诲姞
+        boolean exists = new LambdaQueryChainWrapper<>(shareClickRecordService.getBaseMapper())
+                .eq(ShareClickRecord::getUserId, UserContext.getCurrentUserId())
+                .eq(ShareClickRecord::getShareId, share.getId())
+                .exists();
+        if (! exists) {
+            ShareClickRecord record = new ShareClickRecord();
+            record.setShareId(share.getId());
+            record.setUserId(UserContext.getCurrentUserId());
+            record.setClickTime(new Date());
+            shareClickRecordService.save(record);
+        }
+        return Result.ok();
+    }
+}

--
Gitblit v1.8.0