jin 5 ヶ月 前
コミット
8b64e7fb7f

+ 6 - 0
pom.xml

@@ -36,6 +36,7 @@
         <jakarta.version>6.0.0</jakarta.version>
         <springdoc.version>2.6.0</springdoc.version>
         <lombok.version>1.18.34</lombok.version>
+        <hutool.version>5.8.16</hutool.version>
         <thumbnailator.vaersion>0.4.20</thumbnailator.vaersion>
         <weixin-java-pay.version>4.6.0</weixin-java-pay.version>
         <weixin-java-miniapp.version>3.3.0</weixin-java-miniapp.version>
@@ -224,6 +225,11 @@
                 <artifactId>weixin-java-miniapp</artifactId>
                 <version>${weixin-java-miniapp.version}</version>
             </dependency>
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-all</artifactId>
+                <version>${hutool.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 

+ 10 - 14
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -2,6 +2,7 @@ package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import java.util.Set;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -21,12 +22,11 @@ import com.ruoyi.system.service.ISysMenuService;
 
 /**
  * 登录验证
- * 
+ *
  * @author ruoyi
  */
 @RestController
-public class SysLoginController
-{
+public class SysLoginController {
     @Autowired
     private SysLoginService loginService;
 
@@ -41,13 +41,12 @@ public class SysLoginController
 
     /**
      * 登录方法
-     * 
+     *
      * @param loginBody 登录信息
      * @return 结果
      */
     @PostMapping("/login")
-    public AjaxResult login(@RequestBody LoginBody loginBody)
-    {
+    public AjaxResult login(@RequestBody LoginBody loginBody) {
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
         String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
@@ -58,20 +57,18 @@ public class SysLoginController
 
     /**
      * 获取用户信息
-     * 
+     *
      * @return 用户信息
      */
     @GetMapping("getInfo")
-    public AjaxResult getInfo()
-    {
+    public AjaxResult getInfo() {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         SysUser user = loginUser.getUser();
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(user);
         // 权限集合
         Set<String> permissions = permissionService.getMenuPermission(user);
-        if (!loginUser.getPermissions().equals(permissions))
-        {
+        if (!loginUser.getPermissions().equals(permissions)) {
             loginUser.setPermissions(permissions);
             tokenService.refreshToken(loginUser);
         }
@@ -84,12 +81,11 @@ public class SysLoginController
 
     /**
      * 获取路由信息
-     * 
+     *
      * @return 路由信息
      */
     @GetMapping("getRouters")
-    public AjaxResult getRouters()
-    {
+    public AjaxResult getRouters() {
         Long userId = SecurityUtils.getUserId();
         List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
         return AjaxResult.success(menuService.buildMenus(menus));

+ 5 - 0
ruoyi-common/pom.xml

@@ -128,6 +128,11 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 0 - 4
ruoyi-common/src/main/java/com/ruoyi/common/utils/FTPUtil.java

@@ -30,10 +30,6 @@ public class FTPUtil {
         ftpClient = new FTPClient();
         Boolean isSuccess = false;
         try {
-            if (ftpClient.isConnected()) {
-                ftpClient.logout();
-                ftpClient.disconnect();
-            }
             ftpClient.connect(ip);
             isSuccess = ftpClient.login(user, pwd);
             log.info("连接ftp服务器成功");

+ 29 - 8
ruoyi-framework/src/main/java/com/ruoyi/framework/recovery/mapper/WxCreditMapper.java

@@ -1,19 +1,21 @@
 package com.ruoyi.framework.recovery.mapper;
 
+import java.util.Date;
 import java.util.List;
 import com.ruoyi.framework.recovery.domain.WxCredit;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 积分明细Mapper接口
- * 
+ *
  * @author jin
  * @date 2024-12-01
  */
-public interface WxCreditMapper 
+public interface WxCreditMapper
 {
     /**
      * 查询积分明细
-     * 
+     *
      * @param id 积分明细主键
      * @return 积分明细
      */
@@ -21,7 +23,7 @@ public interface WxCreditMapper
 
     /**
      * 查询积分明细列表
-     * 
+     *
      * @param wxCredit 积分明细
      * @return 积分明细集合
      */
@@ -29,7 +31,7 @@ public interface WxCreditMapper
 
     /**
      * 新增积分明细
-     * 
+     *
      * @param wxCredit 积分明细
      * @return 结果
      */
@@ -37,7 +39,7 @@ public interface WxCreditMapper
 
     /**
      * 修改积分明细
-     * 
+     *
      * @param wxCredit 积分明细
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface WxCreditMapper
 
     /**
      * 删除积分明细
-     * 
+     *
      * @param id 积分明细主键
      * @return 结果
      */
@@ -53,9 +55,28 @@ public interface WxCreditMapper
 
     /**
      * 批量删除积分明细
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteWxCreditByIds(Long[] ids);
+
+    /**
+     * 添加用户积分领取记录表
+     *
+     * @param wxOpenid 用户标识
+     * @param id 积分id
+     * @param date 创建时间
+     */
+    void insertWxCreditUser(@Param("openId") String wxOpenid, @Param("id") Long id, @Param("date") Date date);
+
+    /**
+     * 查询当前登录人积分领取记录
+     *
+     * @param wxOpenid 登录人表示
+     * @param start 开始时间
+     * @param end 结束时间
+     * @return 结果集
+     */
+    List<Long> selectWxCreditUser(@Param("openId") String wxOpenid, @Param("start") Date start, @Param("end") Date end);
 }

+ 11 - 5
ruoyi-system/src/main/resources/mapper/system/WxCreditMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.framework.recovery.mapper.WxCreditMapper">
-    
+
     <resultMap type="WxCredit" id="WxCreditResult">
         <result property="id"    column="id"    />
         <result property="creditType"    column="credit_type"    />
@@ -20,18 +20,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectWxCreditList" parameterType="WxCredit" resultMap="WxCreditResult">
         <include refid="selectWxCreditVo"/>
-        <where>  
+        <where>
             <if test="creditType != null  and creditType != ''"> and credit_type = #{creditType}</if>
             <if test="creditNum != null "> and credit_num = #{creditNum}</if>
             <if test="createDate != null "> and create_date = #{createDate}</if>
             <if test="updateDate != null "> and update_date = #{updateDate}</if>
         </where>
     </select>
-    
+
     <select id="selectWxCreditById" parameterType="Long" resultMap="WxCreditResult">
         <include refid="selectWxCreditVo"/>
         where id = #{id}
     </select>
+    <select id="selectWxCreditUser" resultType="java.lang.Long">
+        select credit_id from wx_credit_user where open_id = #{openId} and create_date between #{start} and #{end}
+    </select>
 
     <insert id="insertWxCredit" parameterType="WxCredit">
         insert into wx_credit
@@ -54,6 +57,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updateDate != null">#{updateDate},</if>
          </trim>
     </insert>
+    <insert id="insertWxCreditUser">
+        insert into wx_credit_user (open_id, credit_id, create_date) values (#{openId}, #{id}, #{date})
+    </insert>
 
     <update id="updateWxCredit" parameterType="WxCredit">
         update wx_credit
@@ -73,9 +79,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteWxCreditByIds" parameterType="String">
-        delete from wx_credit where id in 
+        delete from wx_credit where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 15 - 1
ruoyi-wx/src/main/java/com/ruoyi/wx/web/domain/dto/CreditDto.java

@@ -6,6 +6,11 @@ import com.ruoyi.common.annotation.Excel;
  * 增加积分前端入参
  */
 public class CreditDto {
+    /**
+     * 积分id
+     */
+    private Long id;
+
     /** 积分类型 */
     @Excel(name = "积分类型")
     private String creditType;
@@ -14,6 +19,14 @@ public class CreditDto {
     @Excel(name = "积分数")
     private Long creditNum;
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
     public String getCreditType() {
         return creditType;
     }
@@ -33,7 +46,8 @@ public class CreditDto {
     @Override
     public String toString() {
         final StringBuffer sb = new StringBuffer("CreditDto{");
-        sb.append("creditType='").append(creditType).append('\'');
+        sb.append("id=").append(id);
+        sb.append(", creditType='").append(creditType).append('\'');
         sb.append(", creditNum=").append(creditNum);
         sb.append('}');
         return sb.toString();

+ 41 - 0
ruoyi-wx/src/main/java/com/ruoyi/wx/web/domain/vo/WxCreditVo.java

@@ -0,0 +1,41 @@
+package com.ruoyi.wx.web.domain.vo;
+
+import com.ruoyi.framework.recovery.domain.WxCredit;
+
+import java.util.List;
+
+public class WxCreditVo {
+    /**
+     * 所有积分类型
+     */
+    private List<WxCredit> credits;
+    /**
+     * 已经记录过的积分
+     */
+    private List<Long> removeCreateIds;
+
+    public List<WxCredit> getCredits() {
+        return credits;
+    }
+
+    public void setCredits(List<WxCredit> credits) {
+        this.credits = credits;
+    }
+
+    public List<Long> getRemoveCreateIds() {
+        return removeCreateIds;
+    }
+
+    public void setRemoveCreateIds(List<Long> removeCreateIds) {
+        this.removeCreateIds = removeCreateIds;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("WxCreditVo{");
+        sb.append("credits=").append(credits);
+        sb.append(", removeCreateIds=").append(removeCreateIds);
+        sb.append('}');
+        return sb.toString();
+    }
+}

+ 16 - 2
ruoyi-wx/src/main/java/com/ruoyi/wx/web/service/impl/WxPersonCenterServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ruoyi.wx.web.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.WxUser;
 import com.ruoyi.common.core.domain.model.LoginWxUser;
@@ -11,11 +13,14 @@ import com.ruoyi.framework.recovery.mapper.WxCouponsMapper;
 import com.ruoyi.framework.recovery.mapper.WxCreditMapper;
 import com.ruoyi.framework.recovery.mapper.WxUserMapper;
 import com.ruoyi.wx.web.domain.dto.CreditDto;
+import com.ruoyi.wx.web.domain.vo.WxCreditVo;
 import com.ruoyi.wx.web.domain.vo.WxUserVo;
 import com.ruoyi.wx.web.service.IWxPersonCenterService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -41,25 +46,34 @@ public class WxPersonCenterServiceImpl implements IWxPersonCenterService {
         WxUserVo userVo = new WxUserVo();
         BeanUtils.copyBeanProp(userVo, wxUser);
         Map<String, Object> data = new HashMap<>();
+        // 积分情况
         List<WxCredit> credits = wxCreditMapper.selectWxCreditList(new WxCredit());
+        Date start = DateUtil.beginOfDay(new Date());
+        Date end = DateUtil.endOfDay(new Date());
+        List<Long> ids = wxCreditMapper.selectWxCreditUser(wxUser.getWxOpenid(), start, end);
+        WxCreditVo wxCreditVo = new WxCreditVo();
+        wxCreditVo.setCredits(credits);
+        wxCreditVo.setRemoveCreateIds(ids);
+        // 优惠卷情况
         List<WxCoupons> wxCoupons = couponsMapper.selectWxCouponsList(new WxCoupons());
-
         // 用户信息
         data.put("userVo", userVo);
         // 积分信息
-        data.put("credits", credits);
+        data.put("credits", wxCreditVo);
         // 优惠卷信息
         data.put("wxCoupons", wxCoupons);
         return AjaxResult.success(data);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean addCredit(CreditDto creditDto) {
         LoginWxUser loginWxUser = SecurityUtils.getLoginWxUser();
         if (loginWxUser == null) {
             throw new SecurityException("请登录");
         }
         WxUser wxUser = loginWxUser.getWxUser();
+        wxCreditMapper.insertWxCreditUser(wxUser.getWxOpenid(), creditDto.getId(), new Date());
         wxUser.setPoints(wxUser.getPoints() + creditDto.getCreditNum());
         int result = wxUserMapper.updateWxUser(wxUser);
         return result > 0;